add: tools, secrets (safe files), updated gitignore
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
def get_ids_and_failures(file_path):
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
har_data = json.load(f)
|
||||
|
||||
entries = har_data['log']['entries']
|
||||
|
||||
instance_ids = set()
|
||||
operation_ids = set()
|
||||
dates = set()
|
||||
|
||||
# Try to find UUIDs that look like instance or operation IDs
|
||||
# Usually in URLs or body
|
||||
for entry in entries:
|
||||
req = entry['request']
|
||||
resp = entry['response']
|
||||
|
||||
# Check Date header
|
||||
for header in resp.get('headers', []):
|
||||
if header['name'].lower() == 'date':
|
||||
dates.add(header['value'])
|
||||
|
||||
url = req.get('url', '')
|
||||
# Pattern for UUID
|
||||
uuids = re.findall(r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}', url)
|
||||
for u in uuids:
|
||||
instance_ids.add(u)
|
||||
|
||||
resp_text = ""
|
||||
if 'content' in resp and 'text' in resp['content']:
|
||||
resp_text = resp['content']['text']
|
||||
# Look for instanceOperation or similar
|
||||
if 'instanceOperation' in resp_text:
|
||||
op_uuids = re.findall(r'"id":"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"', resp_text)
|
||||
for u in op_uuids:
|
||||
operation_ids.add(u)
|
||||
|
||||
# Look for instance id
|
||||
inst_uuids = re.findall(r'"instanceId":"([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"', resp_text)
|
||||
for u in inst_uuids:
|
||||
instance_ids.add(u)
|
||||
|
||||
print(f"File: {file_path}")
|
||||
print(f"Possible Instance IDs: {instance_ids}")
|
||||
print(f"Possible Operation IDs: {operation_ids}")
|
||||
|
||||
# Analyze flow
|
||||
print("\nFlow analysis (Status 400+ or instanceOperation):")
|
||||
for entry in entries:
|
||||
req = entry['request']
|
||||
resp = entry['response']
|
||||
status = resp['status']
|
||||
url = req['url']
|
||||
time = entry['startedDateTime']
|
||||
|
||||
if status >= 400:
|
||||
print(f"[{time}] ERROR {status} {req['method']} {url}")
|
||||
if 'content' in resp and 'text' in resp['content']:
|
||||
print(f" Response: {resp['content']['text'][:500]}")
|
||||
|
||||
if 'instanceOperation' in url or ('content' in resp and 'text' in resp['content'] and 'instanceOperation' in resp['content']['text']):
|
||||
print(f"[{time}] OP_POLL {status} {url}")
|
||||
if 'content' in resp and 'text' in resp['content']:
|
||||
try:
|
||||
data = json.loads(resp['content']['text'])
|
||||
if isinstance(data, dict):
|
||||
op = data.get('instanceOperation', data)
|
||||
if isinstance(op, dict):
|
||||
success = op.get('isSuccessful')
|
||||
if success is False:
|
||||
# Print summary of stages
|
||||
stages = op.get('stages', [])
|
||||
print(f" FAILED OP STAGES:")
|
||||
for s in stages:
|
||||
print(f" - {s.get('displayName')} Status: {s.get('isSuccessful')} Msg: {s.get('message')}")
|
||||
print(f" FULL ERROR LOG: {op.get('errorLog')}")
|
||||
else:
|
||||
print(f" Op: {op.get('operation')} Success: {success} Progress: {op.get('isInProgress')} Msg: {op.get('message')}")
|
||||
except:
|
||||
pass
|
||||
|
||||
print("\n--- Date headers summary ---")
|
||||
sun_mon = [d for d in dates if "Sun" in d or "Mon" in d]
|
||||
if sun_mon:
|
||||
print(f"Found Sun/Mon dates: {sun_mon[:5]}")
|
||||
else:
|
||||
print("No Sun/Mon dates found in headers.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
if len(sys.argv) > 1:
|
||||
get_ids_and_failures(sys.argv[1])
|
||||
Reference in New Issue
Block a user