runbooks 1.1.3__py3-none-any.whl → 1.1.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- runbooks/__init__.py +31 -2
- runbooks/__init___optimized.py +18 -4
- runbooks/_platform/__init__.py +1 -5
- runbooks/_platform/core/runbooks_wrapper.py +141 -138
- runbooks/aws2/accuracy_validator.py +812 -0
- runbooks/base.py +7 -0
- runbooks/cfat/WEIGHT_CONFIG_README.md +1 -1
- runbooks/cfat/assessment/compliance.py +8 -8
- runbooks/cfat/assessment/runner.py +1 -0
- runbooks/cfat/cloud_foundations_assessment.py +227 -239
- runbooks/cfat/models.py +6 -2
- runbooks/cfat/tests/__init__.py +6 -1
- runbooks/cli/__init__.py +13 -0
- runbooks/cli/commands/cfat.py +274 -0
- runbooks/cli/commands/finops.py +1164 -0
- runbooks/cli/commands/inventory.py +379 -0
- runbooks/cli/commands/operate.py +239 -0
- runbooks/cli/commands/security.py +248 -0
- runbooks/cli/commands/validation.py +825 -0
- runbooks/cli/commands/vpc.py +310 -0
- runbooks/cli/registry.py +107 -0
- runbooks/cloudops/__init__.py +23 -30
- runbooks/cloudops/base.py +96 -107
- runbooks/cloudops/cost_optimizer.py +549 -547
- runbooks/cloudops/infrastructure_optimizer.py +5 -4
- runbooks/cloudops/interfaces.py +226 -227
- runbooks/cloudops/lifecycle_manager.py +5 -4
- runbooks/cloudops/mcp_cost_validation.py +252 -235
- runbooks/cloudops/models.py +78 -53
- runbooks/cloudops/monitoring_automation.py +5 -4
- runbooks/cloudops/notebook_framework.py +179 -215
- runbooks/cloudops/security_enforcer.py +125 -159
- runbooks/common/accuracy_validator.py +11 -0
- runbooks/common/aws_pricing.py +349 -326
- runbooks/common/aws_pricing_api.py +211 -212
- runbooks/common/aws_profile_manager.py +341 -0
- runbooks/common/aws_utils.py +75 -80
- runbooks/common/business_logic.py +127 -105
- runbooks/common/cli_decorators.py +36 -60
- runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
- runbooks/common/cross_account_manager.py +198 -205
- runbooks/common/date_utils.py +27 -39
- runbooks/common/decorators.py +235 -0
- runbooks/common/dry_run_examples.py +173 -208
- runbooks/common/dry_run_framework.py +157 -155
- runbooks/common/enhanced_exception_handler.py +15 -4
- runbooks/common/enhanced_logging_example.py +50 -64
- runbooks/common/enhanced_logging_integration_example.py +65 -37
- runbooks/common/env_utils.py +16 -16
- runbooks/common/error_handling.py +40 -38
- runbooks/common/lazy_loader.py +41 -23
- runbooks/common/logging_integration_helper.py +79 -86
- runbooks/common/mcp_cost_explorer_integration.py +478 -495
- runbooks/common/mcp_integration.py +63 -74
- runbooks/common/memory_optimization.py +140 -118
- runbooks/common/module_cli_base.py +37 -58
- runbooks/common/organizations_client.py +176 -194
- runbooks/common/patterns.py +204 -0
- runbooks/common/performance_monitoring.py +67 -71
- runbooks/common/performance_optimization_engine.py +283 -274
- runbooks/common/profile_utils.py +248 -39
- runbooks/common/rich_utils.py +643 -92
- runbooks/common/sre_performance_suite.py +177 -186
- runbooks/enterprise/__init__.py +1 -1
- runbooks/enterprise/logging.py +144 -106
- runbooks/enterprise/security.py +187 -204
- runbooks/enterprise/validation.py +43 -56
- runbooks/finops/__init__.py +29 -33
- runbooks/finops/account_resolver.py +1 -1
- runbooks/finops/advanced_optimization_engine.py +980 -0
- runbooks/finops/automation_core.py +268 -231
- runbooks/finops/business_case_config.py +184 -179
- runbooks/finops/cli.py +660 -139
- runbooks/finops/commvault_ec2_analysis.py +157 -164
- runbooks/finops/compute_cost_optimizer.py +336 -320
- runbooks/finops/config.py +20 -20
- runbooks/finops/cost_optimizer.py +488 -622
- runbooks/finops/cost_processor.py +332 -214
- runbooks/finops/dashboard_runner.py +1006 -172
- runbooks/finops/ebs_cost_optimizer.py +991 -657
- runbooks/finops/elastic_ip_optimizer.py +317 -257
- runbooks/finops/enhanced_mcp_integration.py +340 -0
- runbooks/finops/enhanced_progress.py +40 -37
- runbooks/finops/enhanced_trend_visualization.py +3 -2
- runbooks/finops/enterprise_wrappers.py +230 -292
- runbooks/finops/executive_export.py +203 -160
- runbooks/finops/helpers.py +130 -288
- runbooks/finops/iam_guidance.py +1 -1
- runbooks/finops/infrastructure/__init__.py +80 -0
- runbooks/finops/infrastructure/commands.py +506 -0
- runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
- runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
- runbooks/finops/markdown_exporter.py +338 -175
- runbooks/finops/mcp_validator.py +1952 -0
- runbooks/finops/nat_gateway_optimizer.py +1513 -482
- runbooks/finops/network_cost_optimizer.py +657 -587
- runbooks/finops/notebook_utils.py +226 -188
- runbooks/finops/optimization_engine.py +1136 -0
- runbooks/finops/optimizer.py +25 -29
- runbooks/finops/rds_snapshot_optimizer.py +367 -411
- runbooks/finops/reservation_optimizer.py +427 -363
- runbooks/finops/scenario_cli_integration.py +77 -78
- runbooks/finops/scenarios.py +1278 -439
- runbooks/finops/schemas.py +218 -182
- runbooks/finops/snapshot_manager.py +2289 -0
- runbooks/finops/tests/test_finops_dashboard.py +3 -3
- runbooks/finops/tests/test_reference_images_validation.py +2 -2
- runbooks/finops/tests/test_single_account_features.py +17 -17
- runbooks/finops/tests/validate_test_suite.py +1 -1
- runbooks/finops/types.py +3 -3
- runbooks/finops/validation_framework.py +263 -269
- runbooks/finops/vpc_cleanup_exporter.py +191 -146
- runbooks/finops/vpc_cleanup_optimizer.py +593 -575
- runbooks/finops/workspaces_analyzer.py +171 -182
- runbooks/hitl/enhanced_workflow_engine.py +1 -1
- runbooks/integration/__init__.py +89 -0
- runbooks/integration/mcp_integration.py +1920 -0
- runbooks/inventory/CLAUDE.md +816 -0
- runbooks/inventory/README.md +3 -3
- runbooks/inventory/Tests/common_test_data.py +30 -30
- runbooks/inventory/__init__.py +2 -2
- runbooks/inventory/cloud_foundations_integration.py +144 -149
- runbooks/inventory/collectors/aws_comprehensive.py +28 -11
- runbooks/inventory/collectors/aws_networking.py +111 -101
- runbooks/inventory/collectors/base.py +4 -0
- runbooks/inventory/core/collector.py +495 -313
- runbooks/inventory/discovery.md +2 -2
- runbooks/inventory/drift_detection_cli.py +69 -96
- runbooks/inventory/find_ec2_security_groups.py +1 -1
- runbooks/inventory/inventory_mcp_cli.py +48 -46
- runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
- runbooks/inventory/mcp_inventory_validator.py +549 -465
- runbooks/inventory/mcp_vpc_validator.py +359 -442
- runbooks/inventory/organizations_discovery.py +56 -52
- runbooks/inventory/rich_inventory_display.py +33 -32
- runbooks/inventory/unified_validation_engine.py +278 -251
- runbooks/inventory/vpc_analyzer.py +733 -696
- runbooks/inventory/vpc_architecture_validator.py +293 -348
- runbooks/inventory/vpc_dependency_analyzer.py +382 -378
- runbooks/inventory/vpc_flow_analyzer.py +3 -3
- runbooks/main.py +152 -9147
- runbooks/main_final.py +91 -60
- runbooks/main_minimal.py +22 -10
- runbooks/main_optimized.py +131 -100
- runbooks/main_ultra_minimal.py +7 -2
- runbooks/mcp/__init__.py +36 -0
- runbooks/mcp/integration.py +679 -0
- runbooks/metrics/dora_metrics_engine.py +2 -2
- runbooks/monitoring/performance_monitor.py +9 -4
- runbooks/operate/dynamodb_operations.py +3 -1
- runbooks/operate/ec2_operations.py +145 -137
- runbooks/operate/iam_operations.py +146 -152
- runbooks/operate/mcp_integration.py +1 -1
- runbooks/operate/networking_cost_heatmap.py +33 -10
- runbooks/operate/privatelink_operations.py +1 -1
- runbooks/operate/rds_operations.py +223 -254
- runbooks/operate/s3_operations.py +107 -118
- runbooks/operate/vpc_endpoints.py +1 -1
- runbooks/operate/vpc_operations.py +648 -618
- runbooks/remediation/base.py +1 -1
- runbooks/remediation/commons.py +10 -7
- runbooks/remediation/commvault_ec2_analysis.py +71 -67
- runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
- runbooks/remediation/multi_account.py +24 -21
- runbooks/remediation/rds_snapshot_list.py +91 -65
- runbooks/remediation/remediation_cli.py +92 -146
- runbooks/remediation/universal_account_discovery.py +83 -79
- runbooks/remediation/workspaces_list.py +49 -44
- runbooks/security/__init__.py +19 -0
- runbooks/security/assessment_runner.py +1150 -0
- runbooks/security/baseline_checker.py +812 -0
- runbooks/security/cloudops_automation_security_validator.py +509 -535
- runbooks/security/compliance_automation_engine.py +17 -17
- runbooks/security/config/__init__.py +2 -2
- runbooks/security/config/compliance_config.py +50 -50
- runbooks/security/config_template_generator.py +63 -76
- runbooks/security/enterprise_security_framework.py +1 -1
- runbooks/security/executive_security_dashboard.py +519 -508
- runbooks/security/integration_test_enterprise_security.py +5 -3
- runbooks/security/multi_account_security_controls.py +959 -1210
- runbooks/security/real_time_security_monitor.py +422 -444
- runbooks/security/run_script.py +1 -1
- runbooks/security/security_baseline_tester.py +1 -1
- runbooks/security/security_cli.py +143 -112
- runbooks/security/test_2way_validation.py +439 -0
- runbooks/security/two_way_validation_framework.py +852 -0
- runbooks/sre/mcp_reliability_engine.py +6 -6
- runbooks/sre/production_monitoring_framework.py +167 -177
- runbooks/tdd/__init__.py +15 -0
- runbooks/tdd/cli.py +1071 -0
- runbooks/utils/__init__.py +14 -17
- runbooks/utils/logger.py +7 -2
- runbooks/utils/version_validator.py +51 -48
- runbooks/validation/__init__.py +6 -6
- runbooks/validation/cli.py +9 -3
- runbooks/validation/comprehensive_2way_validator.py +754 -708
- runbooks/validation/mcp_validator.py +906 -228
- runbooks/validation/terraform_citations_validator.py +104 -115
- runbooks/validation/terraform_drift_detector.py +447 -451
- runbooks/vpc/README.md +617 -0
- runbooks/vpc/__init__.py +8 -1
- runbooks/vpc/analyzer.py +577 -0
- runbooks/vpc/cleanup_wrapper.py +476 -413
- runbooks/vpc/cli_cloudtrail_commands.py +339 -0
- runbooks/vpc/cli_mcp_validation_commands.py +480 -0
- runbooks/vpc/cloudtrail_audit_integration.py +717 -0
- runbooks/vpc/config.py +92 -97
- runbooks/vpc/cost_engine.py +411 -148
- runbooks/vpc/cost_explorer_integration.py +553 -0
- runbooks/vpc/cross_account_session.py +101 -106
- runbooks/vpc/enhanced_mcp_validation.py +917 -0
- runbooks/vpc/eni_gate_validator.py +961 -0
- runbooks/vpc/heatmap_engine.py +190 -162
- runbooks/vpc/mcp_no_eni_validator.py +681 -640
- runbooks/vpc/nat_gateway_optimizer.py +358 -0
- runbooks/vpc/networking_wrapper.py +15 -8
- runbooks/vpc/pdca_remediation_planner.py +528 -0
- runbooks/vpc/performance_optimized_analyzer.py +219 -231
- runbooks/vpc/runbooks_adapter.py +1167 -241
- runbooks/vpc/tdd_red_phase_stubs.py +601 -0
- runbooks/vpc/test_data_loader.py +358 -0
- runbooks/vpc/tests/conftest.py +314 -4
- runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
- runbooks/vpc/tests/test_cost_engine.py +0 -2
- runbooks/vpc/topology_generator.py +326 -0
- runbooks/vpc/unified_scenarios.py +1302 -1129
- runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
- runbooks-1.1.5.dist-info/METADATA +328 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
- runbooks/finops/README.md +0 -414
- runbooks/finops/accuracy_cross_validator.py +0 -647
- runbooks/finops/business_cases.py +0 -950
- runbooks/finops/dashboard_router.py +0 -922
- runbooks/finops/ebs_optimizer.py +0 -956
- runbooks/finops/embedded_mcp_validator.py +0 -1629
- runbooks/finops/enhanced_dashboard_runner.py +0 -527
- runbooks/finops/finops_dashboard.py +0 -584
- runbooks/finops/finops_scenarios.py +0 -1218
- runbooks/finops/legacy_migration.py +0 -730
- runbooks/finops/multi_dashboard.py +0 -1519
- runbooks/finops/single_dashboard.py +0 -1113
- runbooks/finops/unlimited_scenarios.py +0 -393
- runbooks-1.1.3.dist-info/METADATA +0 -799
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
- {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/top_level.txt +0 -0
@@ -45,9 +45,9 @@ class TestFinOpsConfig:
|
|
45
45
|
config = FinOpsConfig()
|
46
46
|
|
47
47
|
# Test default profile values
|
48
|
-
assert config.billing_profile == "
|
49
|
-
assert config.management_profile == "
|
50
|
-
assert config.operational_profile == "
|
48
|
+
assert config.billing_profile == "${BILLING_PROFILE}"
|
49
|
+
assert config.management_profile == "${MANAGEMENT_PROFILE}"
|
50
|
+
assert config.operational_profile == "${CENTRALISED_OPS_PROFILE}"
|
51
51
|
|
52
52
|
# Test analysis parameters
|
53
53
|
assert config.time_range_days == 30
|
@@ -582,8 +582,8 @@ class TestReferenceImage5_ExportIntegration:
|
|
582
582
|
"status": "completed",
|
583
583
|
"available_profiles": ["profile1", "profile2"],
|
584
584
|
"configured_profiles": {
|
585
|
-
"billing": "
|
586
|
-
"management": "
|
585
|
+
"billing": "${BILLING_PROFILE}",
|
586
|
+
"management": "${MANAGEMENT_PROFILE}",
|
587
587
|
},
|
588
588
|
}
|
589
589
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
Single Account FinOps Features Test Suite - Definition of Done Validation.
|
4
4
|
|
5
5
|
This test suite validates the 5 key features for single account analysis
|
6
|
-
using REAL AWS data for account
|
6
|
+
using REAL AWS data for account ${ACCOUNT_ID} (ams-shared-services-non-prod).
|
7
7
|
|
8
8
|
Purpose: Ensure comprehensive functionality validation against manager requirements.
|
9
9
|
|
@@ -16,7 +16,7 @@ Test Cases:
|
|
16
16
|
|
17
17
|
Author: CloudOps Runbooks Team
|
18
18
|
Version: 0.7.8 - Single Account Focus
|
19
|
-
Target: Account
|
19
|
+
Target: Account ${ACCOUNT_ID} (ams-shared-services-non-prod-ReadOnlyAccess)
|
20
20
|
"""
|
21
21
|
|
22
22
|
import json
|
@@ -30,9 +30,9 @@ import boto3
|
|
30
30
|
import pytest
|
31
31
|
|
32
32
|
# Set environment for single account testing
|
33
|
-
os.environ["SINGLE_AWS_PROFILE"] = "
|
33
|
+
os.environ["SINGLE_AWS_PROFILE"] = "${SINGLE_AWS_PROFILE}"
|
34
34
|
os.environ["AWS_PROFILE"] = os.environ["SINGLE_AWS_PROFILE"]
|
35
|
-
os.environ["BILLING_PROFILE"] = "
|
35
|
+
os.environ["BILLING_PROFILE"] = "${BILLING_PROFILE}"
|
36
36
|
|
37
37
|
# Import FinOps components for testing
|
38
38
|
from runbooks.finops.finops_dashboard import (
|
@@ -53,10 +53,10 @@ class SingleAccountFinOpsConfig(FinOpsConfig):
|
|
53
53
|
super().__init__()
|
54
54
|
|
55
55
|
# Override for single account operation
|
56
|
-
self.target_account = "
|
56
|
+
self.target_account = "${SINGLE_AWS_PROFILE}"
|
57
57
|
|
58
58
|
# Single account configuration
|
59
|
-
self.billing_profile = os.environ.get("BILLING_PROFILE", "
|
59
|
+
self.billing_profile = os.environ.get("BILLING_PROFILE", "${BILLING_PROFILE}")
|
60
60
|
self.management_profile = self.target_account
|
61
61
|
self.operational_profile = self.target_account
|
62
62
|
|
@@ -67,7 +67,7 @@ class SingleAccountFinOpsConfig(FinOpsConfig):
|
|
67
67
|
|
68
68
|
# Single account specific settings
|
69
69
|
self.single_account_mode = True
|
70
|
-
self.account_id = "
|
70
|
+
self.account_id = "${ACCOUNT_ID}" # Extracted from profile name
|
71
71
|
|
72
72
|
|
73
73
|
class TestSingleAccountFeature1_CostTrendAnalysis:
|
@@ -75,7 +75,7 @@ class TestSingleAccountFeature1_CostTrendAnalysis:
|
|
75
75
|
Feature 1: Single Account Cost Trend Analysis with Real AWS Data.
|
76
76
|
|
77
77
|
Validates cost analysis functionality using real AWS Cost Explorer
|
78
|
-
for account
|
78
|
+
for account ${ACCOUNT_ID} with billing profile access.
|
79
79
|
"""
|
80
80
|
|
81
81
|
@pytest.fixture
|
@@ -211,7 +211,7 @@ class TestSingleAccountFeature2_ResourceUtilizationHeatmap:
|
|
211
211
|
Feature 2: Single Account Resource Utilization Heatmap with Real AWS Data.
|
212
212
|
|
213
213
|
Validates resource utilization analysis using real EC2, RDS, S3 data
|
214
|
-
for account
|
214
|
+
for account ${ACCOUNT_ID} with efficiency scoring and rightsizing.
|
215
215
|
"""
|
216
216
|
|
217
217
|
@pytest.fixture
|
@@ -374,7 +374,7 @@ class TestSingleAccountFeature3_ComplianceDashboard:
|
|
374
374
|
Feature 3: Single Account Compliance Dashboard with Real AWS Config Data.
|
375
375
|
|
376
376
|
Validates compliance audit functionality using real AWS Config
|
377
|
-
for account
|
377
|
+
for account ${ACCOUNT_ID} with risk assessment and findings.
|
378
378
|
"""
|
379
379
|
|
380
380
|
@pytest.fixture
|
@@ -527,7 +527,7 @@ class TestSingleAccountFeature4_RightsizingRecommendations:
|
|
527
527
|
Feature 4: Single Account Rightsizing Recommendations with Real CloudWatch Metrics.
|
528
528
|
|
529
529
|
Validates rightsizing functionality using real CloudWatch data
|
530
|
-
for account
|
530
|
+
for account ${ACCOUNT_ID} with cost optimization recommendations.
|
531
531
|
"""
|
532
532
|
|
533
533
|
def test_rightsizing_with_real_metrics(self):
|
@@ -565,7 +565,7 @@ class TestSingleAccountFeature5_ExecutiveSummary:
|
|
565
565
|
Feature 5: Single Account Executive Summary with Real Aggregated Data.
|
566
566
|
|
567
567
|
Validates executive dashboard functionality combining all real data sources
|
568
|
-
for account
|
568
|
+
for account ${ACCOUNT_ID} with C-suite presentation format.
|
569
569
|
"""
|
570
570
|
|
571
571
|
def test_executive_summary_with_real_data(self):
|
@@ -629,15 +629,15 @@ class TestSingleAccountNotebookIntegration:
|
|
629
629
|
def test_notebook_environment_setup(self):
|
630
630
|
"""Test notebook environment is properly configured."""
|
631
631
|
# Verify environment variables
|
632
|
-
assert os.environ.get("SINGLE_AWS_PROFILE") == "
|
633
|
-
assert os.environ.get("BILLING_PROFILE") == "
|
632
|
+
assert os.environ.get("SINGLE_AWS_PROFILE") == "${SINGLE_AWS_PROFILE}"
|
633
|
+
assert os.environ.get("BILLING_PROFILE") == "${BILLING_PROFILE}"
|
634
634
|
|
635
635
|
# Verify AWS connectivity
|
636
636
|
try:
|
637
637
|
session = boto3.Session(profile_name=os.environ["BILLING_PROFILE"])
|
638
638
|
sts = session.client("sts")
|
639
639
|
identity = sts.get_caller_identity()
|
640
|
-
assert identity["Account"] == "
|
640
|
+
assert identity["Account"] == "${BILLING_ACCOUNT_ID}" # Billing account
|
641
641
|
|
642
642
|
print("✅ Notebook environment properly configured")
|
643
643
|
|
@@ -650,8 +650,8 @@ class TestSingleAccountNotebookIntegration:
|
|
650
650
|
|
651
651
|
# Validate single account configuration
|
652
652
|
assert config.single_account_mode is True
|
653
|
-
assert config.account_id == "
|
654
|
-
assert config.target_account == "
|
653
|
+
assert config.account_id == "${ACCOUNT_ID}"
|
654
|
+
assert config.target_account == "${SINGLE_AWS_PROFILE}"
|
655
655
|
assert config.min_account_threshold == 1
|
656
656
|
assert config.enable_cross_account is False
|
657
657
|
|
@@ -64,7 +64,7 @@ def validate_functionality():
|
|
64
64
|
|
65
65
|
config = FinOpsConfig()
|
66
66
|
|
67
|
-
assert config.billing_profile == "
|
67
|
+
assert config.billing_profile == "${BILLING_PROFILE}"
|
68
68
|
assert config.dry_run is True
|
69
69
|
assert config.target_savings_percent == 40
|
70
70
|
print("✅ Configuration validation passed")
|
runbooks/finops/types.py
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
"""Type definitions for CloudOps
|
1
|
+
"""Type definitions for CloudOps & FinOps Runbooks Module."""
|
2
2
|
|
3
3
|
from typing import Dict, List, Optional, Tuple, TypedDict
|
4
4
|
|
@@ -33,7 +33,7 @@ class CostData(TypedDict):
|
|
33
33
|
|
34
34
|
class DualMetricResult(TypedDict):
|
35
35
|
"""Type for dual-metric cost analysis results."""
|
36
|
-
|
36
|
+
|
37
37
|
unblended_costs: Dict[str, float] # UnblendedCost data (technical perspective)
|
38
38
|
amortized_costs: Dict[str, float] # AmortizedCost data (financial perspective)
|
39
39
|
technical_total: float # Total UnblendedCost
|
@@ -51,7 +51,7 @@ class ProfileData(TypedDict):
|
|
51
51
|
|
52
52
|
profile_name: str # Updated field name for consistency
|
53
53
|
account_id: str
|
54
|
-
current_month: float # Primary metric: UnblendedCost (technical accuracy)
|
54
|
+
current_month: float # Primary metric: UnblendedCost (technical accuracy)
|
55
55
|
previous_month: float # Updated field name for consistency
|
56
56
|
current_month_formatted: str # Formatted display for primary metric
|
57
57
|
previous_month_formatted: str # Formatted display for primary metric
|