From 604b01451cd824e0bf8635c2e9ef4c89a596fcfc Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 10 Mar 2026 14:47:17 -0400 Subject: [PATCH] fix --- .../assess_check_scheduling.py | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/local-app/python-tools/cross-organization/assess_check_scheduling.py b/local-app/python-tools/cross-organization/assess_check_scheduling.py index 0d6d8883..fe1904dd 100755 --- a/local-app/python-tools/cross-organization/assess_check_scheduling.py +++ b/local-app/python-tools/cross-organization/assess_check_scheduling.py @@ -3,19 +3,21 @@ from collections import Counter, defaultdict # --- VERSIONING --- -__version__ = "1.2.0" +__version__ = "1.2.1" def find_latest_file(pattern): - """Locates the most recent check_scheduling JSON file.""" - files = glob.glob("audit_results.check_scheduling.*.json") + """Locates the most recent file matching the given pattern.""" + files = glob.glob(pattern) return max(files, key=os.path.getctime) if files else None def main(): - parser = argparse.ArgumentParser(description="PowerSchedule & FinOps Assessor - v1.2.0") + parser = argparse.ArgumentParser(description="PowerSchedule & FinOps Assessor - v1.2.1") parser.add_argument("--input", help="JSON audit file") args = parser.parse_args() - input_file = args.input or find_latest_file() + # FIX: Pass the specific pattern to find_latest_file + input_file = args.input or find_latest_file("audit_results.check_scheduling.*.json") + if not input_file: print("Error: No scheduling audit file found."); sys.exit(1) @@ -25,14 +27,11 @@ def main(): # Tracking structures env_matrix = defaultdict(Counter) env_totals = Counter() - type_matrix = defaultdict(Counter) type_totals = Counter() total_resources = 0 accounts_checked = len(data) - - # Specific sub-type counters for summary asg_names = set() eks_node_count = 0 @@ -46,13 +45,11 @@ def main(): tags = val.get("tags", {}) res_type = val.get("type", "unknown") - # Sub-type tracking for summary if res_type == "eks_node": eks_node_count += 1 if val.get("asg_name") and val.get("asg_name") != "N/A": asg_names.add(f"{account.get('account_id')}:{val.get('asg_name')}") - # Normalize Environment and Schedule env = tags.get('Environment') or tags.get('environment') or "Undefined" schedule = tags.get('PowerSchedule', "No Schedule") @@ -68,7 +65,6 @@ def main(): print(f"POWERSCHEDULE COMPLIANCE ASSESSMENT | Input: {os.path.basename(input_file)}") print("-" * report_width) - # REPORT 1: Breakdown by Environment print(f"\nREPORT 1: BREAKDOWN BY ENVIRONMENT") print("=" * 40) for env in sorted(env_matrix.keys()): @@ -79,11 +75,9 @@ def main(): pct = (count / env_totals[env]) * 100 print(f" {sched:<30} | {count:<10} | {pct:.1f}%") - # REPORT 2: Breakdown by Resource Type print(f"\n\nREPORT 2: BREAKDOWN BY RESOURCE TYPE") print("=" * 40) for r_type in sorted(type_matrix.keys()): - # ADDED: Total count for each resource type print(f"\nResource Type: {r_type.upper()} (Total: {type_totals[r_type]})") print(f" {'Schedule Value':<30} | {'Count':<10} | {'Percentage'}") print(f" {'-'*30} | {'-'*10} | {'-'*10}") @@ -91,7 +85,6 @@ def main(): pct = (count / type_totals[r_type]) * 100 print(f" {sched:<30} | {count:<10} | {pct:.1f}%") - # Organization Summary print("\n" + "=" * report_width) print(f"ORGANIZATION SUMMARY") print(f" Accounts Checked: {accounts_checked}")