Quality of Life updates

This commit is contained in:
brotoskyj
2025-09-03 11:31:59 -04:00
parent 935467fbcb
commit 2f47ee7e44
2 changed files with 41 additions and 38 deletions
+1
View File
@@ -2,3 +2,4 @@ pandas==2.3.2
python-dotenv==1.1.1 python-dotenv==1.1.1
Requests==2.32.5 Requests==2.32.5
urllib3==2.5.0 urllib3==2.5.0
tqdm
+40 -38
View File
@@ -21,6 +21,8 @@ import ijson
import os import os
from bson import ObjectId from bson import ObjectId
import datetime import datetime
import tqdm
import time
def pullPolicyExechistories(url, policiesnames, days, outputjson: bool): def pullPolicyExechistories(url, policiesnames, days, outputjson: bool):
file_path = 'chunkinator.json' file_path = 'chunkinator.json'
@@ -33,46 +35,46 @@ def pullPolicyExechistories(url, policiesnames, days, outputjson: bool):
headers = {"X-APIKey": os.getenv('APIKEY')} headers = {"X-APIKey": os.getenv('APIKEY')}
checkpoint = str(skipback(days)) checkpoint = str(skipback(days))
json_output = {'error': 'Success', 'response': {'exechistories': []}} json_output = {'error': 'Success', 'response': {'exechistories': []}}
while True: with tqdm.tqdm(total=100, desc="Total Percentage Complete: ") as pbar:
json_response_data = checkpoint_stomper(checkpoint, url, policiesnames, headers) while True:
histories = json_response_data['response']['exechistories'] json_response_data = checkpoint_stomper(checkpoint, url, policiesnames, headers)
if not histories: histories = json_response_data['response']['exechistories']
break if not histories:
array_dividend = max(round(len(histories) / 20), 1)
match_found = False
for index, item in enumerate(histories[::array_dividend]):
if (datetime.date.today() - datetime.timedelta(days=days) <= datetime.datetime.strptime(item['datetime'].replace(' +0000 UTC', ''), '%Y-%m-%dT%H:%M:%SZ').date()):
match_found = True
break break
checkpoints_processed = round(len(histories) / array_dividend) array_dividend = max(round(len(histories) / 20), 1)
if ( index + 1 ) < checkpoints_processed: match_found = False
print(ct.colorText(f"{index + 1}/{checkpoints_processed} checkpoint(s) from this execution have been processed with date match. Last Checkpoint: {checkpoint}", "blue")) for index, item in enumerate(histories[::array_dividend]):
else: if (datetime.date.today() - datetime.timedelta(days=days) <= datetime.datetime.strptime(item['datetime'].replace(' +0000 UTC', ''), '%Y-%m-%dT%H:%M:%SZ').date()):
print(ct.colorText(f"{index + 1}/{checkpoints_processed} checkpoint(s) Processed. Last Checkpoint: {checkpoint}", "blue")) match_found = True
if match_found == True:
for index, item in enumerate(histories):
if index == len(histories) - 1:
print(ct.colorText(f"All Events Processed for {checkpoint}", "blue"))
checkpoint = item['checkpoint']
break break
else: if match_found == True:
if (datetime.date.today() - datetime.timedelta(days=days) > datetime.datetime.strptime(item['datetime'].replace(' +0000 UTC', ''), '%Y-%m-%dT%H:%M:%SZ').date()): for index, item in enumerate(tqdm.tqdm(histories, desc=f"Processing events for {checkpoint}", unit="events", colour="blue", initial=1)):
pass if index == len(histories) - 1:
else: json_output['response']['exechistories'].append(item) checkpoint = item['checkpoint']
seen = {} break
if os.path.exists(file_path): else:
with open(file_path, 'r') as file: if (datetime.date.today() - datetime.timedelta(days=days) > datetime.datetime.strptime(item['datetime'].replace(' +0000 UTC', ''), '%Y-%m-%dT%H:%M:%SZ').date()):
existing_data = json.load(file) pass
combined = existing_data['response']['exechistories'] + json_output['response']['exechistories'] else: json_output['response']['exechistories'].append(item)
else: seen = {}
combined = json_output['response']['exechistories'] if os.path.exists(file_path):
for item in combined: with open(file_path, 'r') as file:
key = (item.get('sha256'), item.get('filename'), item.get('hostname')) existing_data = json.load(file)
seen[key] = item combined = existing_data['response']['exechistories'] + json_output['response']['exechistories']
deduplicated = list(seen.values()) else:
with open(file_path, 'w') as file: combined = json_output['response']['exechistories']
json.dump({'error': 'Success', 'response': {'exechistories': deduplicated}}, file) for item in combined:
json_output['response']['exechistories'].clear() key = (item.get('sha256'), item.get('filename'), item.get('hostname'))
seen[key] = item
deduplicated = list(seen.values())
with open(file_path, 'w') as file:
json.dump({'error': 'Success', 'response': {'exechistories': deduplicated}}, file)
json_output['response']['exechistories'].clear()
date_diff = datetime.date.today() - datetime.datetime.strptime(item['datetime'].replace(' +0000 UTC', ''), '%Y-%m-%dT%H:%M:%SZ').date()
percentage_diff = ((days - date_diff.days) / 60) * 100
pbar.n = round(percentage_diff)
pbar.set_description_str(f"Total Percentage Complete: ({percentage_diff:.1f}%)")
pbar.refresh
with open(file_path, 'r') as file: with open(file_path, 'r') as file:
final_output = json.load(file) final_output = json.load(file)
os.remove(file_path) os.remove(file_path)