runbooks 1.1.4__py3-none-any.whl → 1.1.6__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.
Files changed (273) hide show
  1. runbooks/__init__.py +31 -2
  2. runbooks/__init___optimized.py +18 -4
  3. runbooks/_platform/__init__.py +1 -5
  4. runbooks/_platform/core/runbooks_wrapper.py +141 -138
  5. runbooks/aws2/accuracy_validator.py +812 -0
  6. runbooks/base.py +7 -0
  7. runbooks/cfat/assessment/compliance.py +1 -1
  8. runbooks/cfat/assessment/runner.py +1 -0
  9. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  10. runbooks/cli/__init__.py +1 -1
  11. runbooks/cli/commands/cfat.py +64 -23
  12. runbooks/cli/commands/finops.py +1005 -54
  13. runbooks/cli/commands/inventory.py +135 -91
  14. runbooks/cli/commands/operate.py +9 -36
  15. runbooks/cli/commands/security.py +42 -18
  16. runbooks/cli/commands/validation.py +432 -18
  17. runbooks/cli/commands/vpc.py +81 -17
  18. runbooks/cli/registry.py +22 -10
  19. runbooks/cloudops/__init__.py +20 -27
  20. runbooks/cloudops/base.py +96 -107
  21. runbooks/cloudops/cost_optimizer.py +544 -542
  22. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  23. runbooks/cloudops/interfaces.py +224 -225
  24. runbooks/cloudops/lifecycle_manager.py +5 -4
  25. runbooks/cloudops/mcp_cost_validation.py +252 -235
  26. runbooks/cloudops/models.py +78 -53
  27. runbooks/cloudops/monitoring_automation.py +5 -4
  28. runbooks/cloudops/notebook_framework.py +177 -213
  29. runbooks/cloudops/security_enforcer.py +125 -159
  30. runbooks/common/accuracy_validator.py +17 -12
  31. runbooks/common/aws_pricing.py +349 -326
  32. runbooks/common/aws_pricing_api.py +211 -212
  33. runbooks/common/aws_profile_manager.py +40 -36
  34. runbooks/common/aws_utils.py +74 -79
  35. runbooks/common/business_logic.py +126 -104
  36. runbooks/common/cli_decorators.py +36 -60
  37. runbooks/common/comprehensive_cost_explorer_integration.py +455 -463
  38. runbooks/common/cross_account_manager.py +197 -204
  39. runbooks/common/date_utils.py +27 -39
  40. runbooks/common/decorators.py +29 -19
  41. runbooks/common/dry_run_examples.py +173 -208
  42. runbooks/common/dry_run_framework.py +157 -155
  43. runbooks/common/enhanced_exception_handler.py +15 -4
  44. runbooks/common/enhanced_logging_example.py +50 -64
  45. runbooks/common/enhanced_logging_integration_example.py +65 -37
  46. runbooks/common/env_utils.py +16 -16
  47. runbooks/common/error_handling.py +40 -38
  48. runbooks/common/lazy_loader.py +41 -23
  49. runbooks/common/logging_integration_helper.py +79 -86
  50. runbooks/common/mcp_cost_explorer_integration.py +476 -493
  51. runbooks/common/mcp_integration.py +99 -79
  52. runbooks/common/memory_optimization.py +140 -118
  53. runbooks/common/module_cli_base.py +37 -58
  54. runbooks/common/organizations_client.py +175 -193
  55. runbooks/common/patterns.py +23 -25
  56. runbooks/common/performance_monitoring.py +67 -71
  57. runbooks/common/performance_optimization_engine.py +283 -274
  58. runbooks/common/profile_utils.py +111 -37
  59. runbooks/common/rich_utils.py +315 -141
  60. runbooks/common/sre_performance_suite.py +177 -186
  61. runbooks/enterprise/__init__.py +1 -1
  62. runbooks/enterprise/logging.py +144 -106
  63. runbooks/enterprise/security.py +187 -204
  64. runbooks/enterprise/validation.py +43 -56
  65. runbooks/finops/__init__.py +26 -30
  66. runbooks/finops/account_resolver.py +1 -1
  67. runbooks/finops/advanced_optimization_engine.py +980 -0
  68. runbooks/finops/automation_core.py +268 -231
  69. runbooks/finops/business_case_config.py +184 -179
  70. runbooks/finops/cli.py +660 -139
  71. runbooks/finops/commvault_ec2_analysis.py +157 -164
  72. runbooks/finops/compute_cost_optimizer.py +336 -320
  73. runbooks/finops/config.py +20 -20
  74. runbooks/finops/cost_optimizer.py +484 -618
  75. runbooks/finops/cost_processor.py +332 -214
  76. runbooks/finops/dashboard_runner.py +1006 -172
  77. runbooks/finops/ebs_cost_optimizer.py +991 -657
  78. runbooks/finops/elastic_ip_optimizer.py +317 -257
  79. runbooks/finops/enhanced_mcp_integration.py +340 -0
  80. runbooks/finops/enhanced_progress.py +32 -29
  81. runbooks/finops/enhanced_trend_visualization.py +3 -2
  82. runbooks/finops/enterprise_wrappers.py +223 -285
  83. runbooks/finops/executive_export.py +203 -160
  84. runbooks/finops/helpers.py +130 -288
  85. runbooks/finops/iam_guidance.py +1 -1
  86. runbooks/finops/infrastructure/__init__.py +80 -0
  87. runbooks/finops/infrastructure/commands.py +506 -0
  88. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  89. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  90. runbooks/finops/markdown_exporter.py +337 -174
  91. runbooks/finops/mcp_validator.py +1952 -0
  92. runbooks/finops/nat_gateway_optimizer.py +1512 -481
  93. runbooks/finops/network_cost_optimizer.py +657 -587
  94. runbooks/finops/notebook_utils.py +226 -188
  95. runbooks/finops/optimization_engine.py +1136 -0
  96. runbooks/finops/optimizer.py +19 -23
  97. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  98. runbooks/finops/reservation_optimizer.py +427 -363
  99. runbooks/finops/scenario_cli_integration.py +64 -65
  100. runbooks/finops/scenarios.py +1277 -438
  101. runbooks/finops/schemas.py +218 -182
  102. runbooks/finops/snapshot_manager.py +2289 -0
  103. runbooks/finops/types.py +3 -3
  104. runbooks/finops/validation_framework.py +259 -265
  105. runbooks/finops/vpc_cleanup_exporter.py +189 -144
  106. runbooks/finops/vpc_cleanup_optimizer.py +591 -573
  107. runbooks/finops/workspaces_analyzer.py +171 -182
  108. runbooks/integration/__init__.py +89 -0
  109. runbooks/integration/mcp_integration.py +1920 -0
  110. runbooks/inventory/CLAUDE.md +816 -0
  111. runbooks/inventory/__init__.py +2 -2
  112. runbooks/inventory/aws_decorators.py +2 -3
  113. runbooks/inventory/check_cloudtrail_compliance.py +2 -4
  114. runbooks/inventory/check_controltower_readiness.py +152 -151
  115. runbooks/inventory/check_landingzone_readiness.py +85 -84
  116. runbooks/inventory/cloud_foundations_integration.py +144 -149
  117. runbooks/inventory/collectors/aws_comprehensive.py +1 -1
  118. runbooks/inventory/collectors/aws_networking.py +109 -99
  119. runbooks/inventory/collectors/base.py +4 -0
  120. runbooks/inventory/core/collector.py +495 -313
  121. runbooks/inventory/core/formatter.py +11 -0
  122. runbooks/inventory/draw_org_structure.py +8 -9
  123. runbooks/inventory/drift_detection_cli.py +69 -96
  124. runbooks/inventory/ec2_vpc_utils.py +2 -2
  125. runbooks/inventory/find_cfn_drift_detection.py +5 -7
  126. runbooks/inventory/find_cfn_orphaned_stacks.py +7 -9
  127. runbooks/inventory/find_cfn_stackset_drift.py +5 -6
  128. runbooks/inventory/find_ec2_security_groups.py +48 -42
  129. runbooks/inventory/find_landingzone_versions.py +4 -6
  130. runbooks/inventory/find_vpc_flow_logs.py +7 -9
  131. runbooks/inventory/inventory_mcp_cli.py +48 -46
  132. runbooks/inventory/inventory_modules.py +103 -91
  133. runbooks/inventory/list_cfn_stacks.py +9 -10
  134. runbooks/inventory/list_cfn_stackset_operation_results.py +1 -3
  135. runbooks/inventory/list_cfn_stackset_operations.py +79 -57
  136. runbooks/inventory/list_cfn_stacksets.py +8 -10
  137. runbooks/inventory/list_config_recorders_delivery_channels.py +49 -39
  138. runbooks/inventory/list_ds_directories.py +65 -53
  139. runbooks/inventory/list_ec2_availability_zones.py +2 -4
  140. runbooks/inventory/list_ec2_ebs_volumes.py +32 -35
  141. runbooks/inventory/list_ec2_instances.py +23 -28
  142. runbooks/inventory/list_ecs_clusters_and_tasks.py +26 -34
  143. runbooks/inventory/list_elbs_load_balancers.py +22 -20
  144. runbooks/inventory/list_enis_network_interfaces.py +26 -33
  145. runbooks/inventory/list_guardduty_detectors.py +2 -4
  146. runbooks/inventory/list_iam_policies.py +2 -4
  147. runbooks/inventory/list_iam_roles.py +5 -7
  148. runbooks/inventory/list_iam_saml_providers.py +4 -6
  149. runbooks/inventory/list_lambda_functions.py +38 -38
  150. runbooks/inventory/list_org_accounts.py +6 -8
  151. runbooks/inventory/list_org_accounts_users.py +55 -44
  152. runbooks/inventory/list_rds_db_instances.py +31 -33
  153. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  154. runbooks/inventory/list_route53_hosted_zones.py +3 -5
  155. runbooks/inventory/list_servicecatalog_provisioned_products.py +37 -41
  156. runbooks/inventory/list_sns_topics.py +2 -4
  157. runbooks/inventory/list_ssm_parameters.py +4 -7
  158. runbooks/inventory/list_vpc_subnets.py +2 -4
  159. runbooks/inventory/list_vpcs.py +7 -10
  160. runbooks/inventory/mcp_inventory_validator.py +554 -468
  161. runbooks/inventory/mcp_vpc_validator.py +359 -442
  162. runbooks/inventory/organizations_discovery.py +63 -55
  163. runbooks/inventory/recover_cfn_stack_ids.py +7 -8
  164. runbooks/inventory/requirements.txt +0 -1
  165. runbooks/inventory/rich_inventory_display.py +35 -34
  166. runbooks/inventory/run_on_multi_accounts.py +3 -5
  167. runbooks/inventory/unified_validation_engine.py +281 -253
  168. runbooks/inventory/verify_ec2_security_groups.py +1 -1
  169. runbooks/inventory/vpc_analyzer.py +735 -697
  170. runbooks/inventory/vpc_architecture_validator.py +293 -348
  171. runbooks/inventory/vpc_dependency_analyzer.py +384 -380
  172. runbooks/inventory/vpc_flow_analyzer.py +1 -1
  173. runbooks/main.py +49 -34
  174. runbooks/main_final.py +91 -60
  175. runbooks/main_minimal.py +22 -10
  176. runbooks/main_optimized.py +131 -100
  177. runbooks/main_ultra_minimal.py +7 -2
  178. runbooks/mcp/__init__.py +36 -0
  179. runbooks/mcp/integration.py +679 -0
  180. runbooks/monitoring/performance_monitor.py +9 -4
  181. runbooks/operate/dynamodb_operations.py +3 -1
  182. runbooks/operate/ec2_operations.py +145 -137
  183. runbooks/operate/iam_operations.py +146 -152
  184. runbooks/operate/networking_cost_heatmap.py +29 -8
  185. runbooks/operate/rds_operations.py +223 -254
  186. runbooks/operate/s3_operations.py +107 -118
  187. runbooks/operate/vpc_operations.py +646 -616
  188. runbooks/remediation/base.py +1 -1
  189. runbooks/remediation/commons.py +10 -7
  190. runbooks/remediation/commvault_ec2_analysis.py +70 -66
  191. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  192. runbooks/remediation/multi_account.py +24 -21
  193. runbooks/remediation/rds_snapshot_list.py +86 -60
  194. runbooks/remediation/remediation_cli.py +92 -146
  195. runbooks/remediation/universal_account_discovery.py +83 -79
  196. runbooks/remediation/workspaces_list.py +46 -41
  197. runbooks/security/__init__.py +19 -0
  198. runbooks/security/assessment_runner.py +1150 -0
  199. runbooks/security/baseline_checker.py +812 -0
  200. runbooks/security/cloudops_automation_security_validator.py +509 -535
  201. runbooks/security/compliance_automation_engine.py +17 -17
  202. runbooks/security/config/__init__.py +2 -2
  203. runbooks/security/config/compliance_config.py +50 -50
  204. runbooks/security/config_template_generator.py +63 -76
  205. runbooks/security/enterprise_security_framework.py +1 -1
  206. runbooks/security/executive_security_dashboard.py +519 -508
  207. runbooks/security/multi_account_security_controls.py +959 -1210
  208. runbooks/security/real_time_security_monitor.py +422 -444
  209. runbooks/security/security_baseline_tester.py +1 -1
  210. runbooks/security/security_cli.py +143 -112
  211. runbooks/security/test_2way_validation.py +439 -0
  212. runbooks/security/two_way_validation_framework.py +852 -0
  213. runbooks/sre/production_monitoring_framework.py +167 -177
  214. runbooks/tdd/__init__.py +15 -0
  215. runbooks/tdd/cli.py +1071 -0
  216. runbooks/utils/__init__.py +14 -17
  217. runbooks/utils/logger.py +7 -2
  218. runbooks/utils/version_validator.py +50 -47
  219. runbooks/validation/__init__.py +6 -6
  220. runbooks/validation/cli.py +9 -3
  221. runbooks/validation/comprehensive_2way_validator.py +745 -704
  222. runbooks/validation/mcp_validator.py +906 -228
  223. runbooks/validation/terraform_citations_validator.py +104 -115
  224. runbooks/validation/terraform_drift_detector.py +461 -454
  225. runbooks/vpc/README.md +617 -0
  226. runbooks/vpc/__init__.py +8 -1
  227. runbooks/vpc/analyzer.py +577 -0
  228. runbooks/vpc/cleanup_wrapper.py +476 -413
  229. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  230. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  231. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  232. runbooks/vpc/config.py +92 -97
  233. runbooks/vpc/cost_engine.py +411 -148
  234. runbooks/vpc/cost_explorer_integration.py +553 -0
  235. runbooks/vpc/cross_account_session.py +101 -106
  236. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  237. runbooks/vpc/eni_gate_validator.py +961 -0
  238. runbooks/vpc/heatmap_engine.py +185 -160
  239. runbooks/vpc/mcp_no_eni_validator.py +680 -639
  240. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  241. runbooks/vpc/networking_wrapper.py +15 -8
  242. runbooks/vpc/pdca_remediation_planner.py +528 -0
  243. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  244. runbooks/vpc/runbooks_adapter.py +1167 -241
  245. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  246. runbooks/vpc/test_data_loader.py +358 -0
  247. runbooks/vpc/tests/conftest.py +314 -4
  248. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  249. runbooks/vpc/tests/test_cost_engine.py +0 -2
  250. runbooks/vpc/topology_generator.py +326 -0
  251. runbooks/vpc/unified_scenarios.py +1297 -1124
  252. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  253. runbooks-1.1.6.dist-info/METADATA +327 -0
  254. runbooks-1.1.6.dist-info/RECORD +489 -0
  255. runbooks/finops/README.md +0 -414
  256. runbooks/finops/accuracy_cross_validator.py +0 -647
  257. runbooks/finops/business_cases.py +0 -950
  258. runbooks/finops/dashboard_router.py +0 -922
  259. runbooks/finops/ebs_optimizer.py +0 -973
  260. runbooks/finops/embedded_mcp_validator.py +0 -1629
  261. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  262. runbooks/finops/finops_dashboard.py +0 -584
  263. runbooks/finops/finops_scenarios.py +0 -1218
  264. runbooks/finops/legacy_migration.py +0 -730
  265. runbooks/finops/multi_dashboard.py +0 -1519
  266. runbooks/finops/single_dashboard.py +0 -1113
  267. runbooks/finops/unlimited_scenarios.py +0 -393
  268. runbooks-1.1.4.dist-info/METADATA +0 -800
  269. runbooks-1.1.4.dist-info/RECORD +0 -468
  270. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/WHEEL +0 -0
  271. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/entry_points.txt +0 -0
  272. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/licenses/LICENSE +0 -0
  273. {runbooks-1.1.4.dist-info → runbooks-1.1.6.dist-info}/top_level.txt +0 -0
@@ -16,49 +16,57 @@ from enum import Enum
16
16
  from datetime import datetime
17
17
  import boto3
18
18
 
19
+
19
20
  class BusinessScenario(str, Enum):
20
21
  """Business scenario categories for CloudOps automation."""
22
+
21
23
  COST_OPTIMIZATION = "cost_optimization"
22
- SECURITY_ENFORCEMENT = "security_enforcement"
24
+ SECURITY_ENFORCEMENT = "security_enforcement"
23
25
  LIFECYCLE_MANAGEMENT = "lifecycle_management"
24
26
  INFRASTRUCTURE_OPTIMIZATION = "infrastructure_optimization"
25
27
  MONITORING_AUTOMATION = "monitoring_automation"
26
28
  GOVERNANCE_CAMPAIGN = "governance_campaign"
27
29
 
30
+
28
31
  class RiskLevel(str, Enum):
29
32
  """Risk assessment levels for business operations."""
33
+
30
34
  LOW = "low"
31
- MEDIUM = "medium"
35
+ MEDIUM = "medium"
32
36
  HIGH = "high"
33
37
  CRITICAL = "critical"
34
38
 
39
+
35
40
  class ExecutionMode(str, Enum):
36
41
  """Execution modes for CloudOps operations."""
42
+
37
43
  DRY_RUN = "dry_run"
38
44
  EXECUTE = "execute"
39
45
  VALIDATE_ONLY = "validate_only"
40
46
 
47
+
41
48
  class ResourceImpact(BaseModel):
42
49
  """Business impact assessment for individual resources."""
50
+
43
51
  resource_type: str = Field(description="AWS resource type (ec2, s3, nat-gateway, etc)")
44
52
  resource_id: str = Field(description="Unique resource identifier")
45
53
  resource_name: Optional[str] = Field(description="Human-readable resource name")
46
54
  region: str = Field(description="AWS region")
47
55
  account_id: str = Field(description="AWS account ID")
48
-
56
+
49
57
  # Financial Impact
50
58
  estimated_monthly_cost: Optional[float] = Field(description="Current monthly cost estimate")
51
- projected_savings: Optional[float] = Field(description="Projected monthly savings")
52
-
59
+ projected_savings: Optional[float] = Field(description="Projected monthly savings")
60
+
53
61
  # Risk Assessment
54
62
  risk_level: RiskLevel = Field(description="Risk level for modification", default=RiskLevel.LOW)
55
63
  business_criticality: str = Field(description="Business criticality (low/medium/high/critical)", default="low")
56
-
64
+
57
65
  # Operational Impact
58
66
  modification_required: bool = Field(description="Whether resource requires modification", default=False)
59
67
  estimated_downtime: Optional[float] = Field(description="Expected downtime in minutes", default=None)
60
-
61
- @field_validator('risk_level')
68
+
69
+ @field_validator("risk_level")
62
70
  @classmethod
63
71
  def validate_risk_level(cls, v):
64
72
  """Ensure risk level is valid."""
@@ -66,86 +74,94 @@ class ResourceImpact(BaseModel):
66
74
  try:
67
75
  return RiskLevel(v.lower())
68
76
  except ValueError:
69
- raise ValueError(f'Risk level must be one of: {[e.value for e in RiskLevel]}')
77
+ raise ValueError(f"Risk level must be one of: {[e.value for e in RiskLevel]}")
70
78
  return v
71
79
 
72
- @field_validator('projected_savings')
80
+ @field_validator("projected_savings")
73
81
  @classmethod
74
82
  def validate_savings(cls, v, info):
75
83
  """Validate savings against current cost."""
76
- if v is not None and 'estimated_monthly_cost' in info.data:
77
- current_cost = info.data['estimated_monthly_cost']
84
+ if v is not None and "estimated_monthly_cost" in info.data:
85
+ current_cost = info.data["estimated_monthly_cost"]
78
86
  if current_cost is not None and v > current_cost:
79
- raise ValueError('Projected savings cannot exceed current cost')
87
+ raise ValueError("Projected savings cannot exceed current cost")
80
88
  return v
81
89
 
90
+
82
91
  class ComplianceMetrics(BaseModel):
83
92
  """Security and compliance assessment metrics."""
93
+
84
94
  framework: str = Field(description="Compliance framework (SOC2, PCI-DSS, HIPAA, etc)")
85
95
  current_score: float = Field(ge=0, le=100, description="Current compliance score percentage")
86
- target_score: float = Field(ge=0, le=100, description="Target compliance score percentage")
96
+ target_score: float = Field(ge=0, le=100, description="Target compliance score percentage")
87
97
  violations_found: int = Field(ge=0, description="Number of violations identified")
88
98
  violations_fixed: int = Field(ge=0, description="Number of violations remediated")
89
-
90
- @field_validator('violations_fixed')
99
+
100
+ @field_validator("violations_fixed")
91
101
  @classmethod
92
102
  def validate_violations_fixed(cls, v, info):
93
103
  """Ensure violations fixed doesn't exceed violations found."""
94
- if 'violations_found' in info.data and v > info.data['violations_found']:
95
- raise ValueError('Violations fixed cannot exceed violations found')
104
+ if "violations_found" in info.data and v > info.data["violations_found"]:
105
+ raise ValueError("Violations fixed cannot exceed violations found")
96
106
  return v
97
107
 
108
+
98
109
  class BusinessMetrics(BaseModel):
99
110
  """High-level business impact metrics for executive reporting."""
111
+
100
112
  total_monthly_savings: float = Field(description="Total projected monthly savings")
101
113
  implementation_cost: Optional[float] = Field(description="One-time implementation cost", default=None)
102
114
  roi_percentage: Optional[float] = Field(description="Return on investment percentage", default=None)
103
115
  payback_period_months: Optional[int] = Field(description="Payback period in months", default=None)
104
-
116
+
105
117
  # Operational Metrics
106
- operational_efficiency_gain: Optional[float] = Field(description="Operational efficiency improvement percentage", default=None)
118
+ operational_efficiency_gain: Optional[float] = Field(
119
+ description="Operational efficiency improvement percentage", default=None
120
+ )
107
121
  manual_effort_reduction: Optional[float] = Field(description="Manual effort reduction percentage", default=None)
108
-
122
+
109
123
  # Risk Metrics
110
124
  overall_risk_level: RiskLevel = Field(description="Overall operation risk level")
111
125
  business_continuity_impact: str = Field(description="Impact on business continuity", default="minimal")
112
126
 
127
+
113
128
  class CloudOpsExecutionResult(BaseModel):
114
129
  """Comprehensive execution result for enterprise CloudOps operations."""
130
+
115
131
  # Scenario Metadata
116
132
  scenario: BusinessScenario = Field(description="Business scenario executed")
117
133
  scenario_name: str = Field(description="Human-readable scenario name")
118
134
  execution_timestamp: datetime = Field(description="Execution timestamp")
119
135
  execution_mode: ExecutionMode = Field(description="Execution mode used")
120
-
136
+
121
137
  # Execution Metrics
122
138
  execution_time: float = Field(description="Total execution time in seconds")
123
139
  success: bool = Field(description="Overall execution success")
124
140
  error_message: Optional[str] = Field(description="Error message if execution failed", default=None)
125
-
141
+
126
142
  # Resource Impact
127
143
  resources_analyzed: int = Field(ge=0, description="Total resources analyzed")
128
144
  resources_impacted: List[ResourceImpact] = Field(description="Detailed resource impact list")
129
-
145
+
130
146
  # Business Impact
131
147
  business_metrics: BusinessMetrics = Field(description="Business impact summary")
132
148
  compliance_improvements: List[ComplianceMetrics] = Field(description="Compliance improvements", default=[])
133
-
149
+
134
150
  # Recommendations
135
151
  recommendations: List[str] = Field(description="Follow-up recommendations")
136
152
  action_items: List[str] = Field(description="Required action items", default=[])
137
-
153
+
138
154
  # Audit Trail
139
155
  aws_profile_used: str = Field(description="AWS profile used for execution")
140
156
  regions_analyzed: List[str] = Field(description="AWS regions analyzed", default=[])
141
157
  services_analyzed: List[str] = Field(description="AWS services analyzed", default=[])
142
-
143
- @field_validator('execution_time')
158
+
159
+ @field_validator("execution_time")
144
160
  @classmethod
145
161
  def validate_execution_time(cls, v):
146
162
  """Ensure execution time is positive."""
147
163
  if v < 0:
148
- raise ValueError('Execution time must be positive')
164
+ raise ValueError("Execution time must be positive")
149
165
  return v
150
166
 
151
167
  @property
@@ -159,9 +175,10 @@ class CloudOpsExecutionResult(BaseModel):
159
175
  "projected_monthly_savings": self.business_metrics.total_monthly_savings,
160
176
  "roi_percentage": self.business_metrics.roi_percentage,
161
177
  "overall_risk": self.business_metrics.overall_risk_level.value,
162
- "execution_time_seconds": self.execution_time
178
+ "execution_time_seconds": self.execution_time,
163
179
  }
164
180
 
181
+
165
182
  class CostOptimizationResult(CloudOpsExecutionResult):
166
183
  """Specialized result for cost optimization scenarios."""
167
184
 
@@ -180,43 +197,46 @@ class CostOptimizationResult(CloudOpsExecutionResult):
180
197
  # Additional fields used by cost_optimizer.py
181
198
  affected_resources: int = Field(description="Number of resources affected by optimization", default=0)
182
199
  resource_impacts: List[ResourceImpact] = Field(description="Detailed resource impact analysis", default=[])
183
-
184
- @field_validator('optimized_monthly_spend')
200
+
201
+ @field_validator("optimized_monthly_spend")
185
202
  @classmethod
186
203
  def validate_optimized_spend(cls, v, info):
187
204
  """Ensure optimized spend is less than current spend."""
188
- if 'current_monthly_spend' in info.data and v > info.data['current_monthly_spend']:
189
- raise ValueError('Optimized spend cannot exceed current spend')
205
+ if "current_monthly_spend" in info.data and v > info.data["current_monthly_spend"]:
206
+ raise ValueError("Optimized spend cannot exceed current spend")
190
207
  return v
191
208
 
209
+
192
210
  class SecurityEnforcementResult(CloudOpsExecutionResult):
193
211
  """Specialized result for security enforcement scenarios."""
194
-
212
+
195
213
  # Security-Specific Metrics
196
214
  security_score_before: float = Field(ge=0, le=100, description="Security score before enforcement")
197
- security_score_after: float = Field(ge=0, le=100, description="Security score after enforcement")
198
-
215
+ security_score_after: float = Field(ge=0, le=100, description="Security score after enforcement")
216
+
199
217
  # Compliance Frameworks
200
218
  compliance_frameworks: List[ComplianceMetrics] = Field(description="Compliance framework results")
201
-
219
+
202
220
  # Security Findings
203
221
  critical_findings: int = Field(ge=0, description="Critical security findings")
204
222
  high_findings: int = Field(ge=0, description="High severity security findings")
205
223
  medium_findings: int = Field(ge=0, description="Medium severity security findings")
206
224
  low_findings: int = Field(ge=0, description="Low severity security findings")
207
-
225
+
208
226
  # Remediation
209
227
  auto_remediated: int = Field(ge=0, description="Automatically remediated findings")
210
228
  manual_remediation_required: int = Field(ge=0, description="Findings requiring manual remediation")
211
229
 
230
+
212
231
  class ProfileConfiguration(BaseModel):
213
232
  """AWS profile configuration for multi-account operations."""
233
+
214
234
  profile_name: str = Field(description="AWS profile name")
215
235
  profile_type: str = Field(description="Profile type (billing/management/operational)")
216
236
  account_id: Optional[str] = Field(description="AWS account ID")
217
237
  regions: List[str] = Field(description="Target AWS regions", default=["us-east-1"])
218
-
219
- @field_validator('profile_name')
238
+
239
+ @field_validator("profile_name")
220
240
  @classmethod
221
241
  def validate_profile_exists(cls, v):
222
242
  """Validate that AWS profile exists in local configuration."""
@@ -228,36 +248,41 @@ class ProfileConfiguration(BaseModel):
228
248
  # In dry-run or test environments, allow any profile name
229
249
  return v
230
250
 
251
+
231
252
  class BusinessScenarioConfig(BaseModel):
232
253
  """Configuration for business scenario execution."""
254
+
233
255
  scenario_name: str = Field(description="Business scenario name")
234
256
  scenario_type: BusinessScenario = Field(description="Scenario type")
235
257
  execution_mode: ExecutionMode = Field(description="Execution mode", default=ExecutionMode.DRY_RUN)
236
-
258
+
237
259
  # AWS Configuration
238
260
  primary_profile: ProfileConfiguration = Field(description="Primary AWS profile")
239
- additional_profiles: List[ProfileConfiguration] = Field(description="Additional profiles for multi-account", default=[])
240
-
261
+ additional_profiles: List[ProfileConfiguration] = Field(
262
+ description="Additional profiles for multi-account", default=[]
263
+ )
264
+
241
265
  # Business Parameters
242
266
  cost_threshold: Optional[float] = Field(description="Minimum cost threshold for analysis")
243
267
  risk_tolerance: RiskLevel = Field(description="Maximum acceptable risk level", default=RiskLevel.MEDIUM)
244
-
268
+
245
269
  # Executive Reporting
246
270
  generate_executive_report: bool = Field(description="Generate executive PDF report", default=True)
247
271
  include_detailed_analysis: bool = Field(description="Include detailed technical analysis", default=False)
248
272
  notify_stakeholders: List[str] = Field(description="Stakeholder notification emails", default=[])
249
273
 
274
+
250
275
  # Export all models for easy importing
251
276
  __all__ = [
252
- "BusinessScenario",
253
- "RiskLevel",
277
+ "BusinessScenario",
278
+ "RiskLevel",
254
279
  "ExecutionMode",
255
- "ResourceImpact",
256
- "ComplianceMetrics",
280
+ "ResourceImpact",
281
+ "ComplianceMetrics",
257
282
  "BusinessMetrics",
258
- "CloudOpsExecutionResult",
259
- "CostOptimizationResult",
283
+ "CloudOpsExecutionResult",
284
+ "CostOptimizationResult",
260
285
  "SecurityEnforcementResult",
261
286
  "ProfileConfiguration",
262
- "BusinessScenarioConfig"
263
- ]
287
+ "BusinessScenarioConfig",
288
+ ]
@@ -10,20 +10,21 @@ This module will be fully implemented in the next development phase.
10
10
  from .base import CloudOpsBase
11
11
  from .models import CloudOpsExecutionResult, BusinessScenario, ExecutionMode
12
12
 
13
+
13
14
  class MonitoringAutomation(CloudOpsBase):
14
15
  """
15
16
  Monitoring automation scenarios for operational excellence and SRE practices.
16
-
17
+
17
18
  Future Implementation Will Include:
18
19
  - CloudWatch automation and alerting
19
20
  - Performance monitoring and optimization
20
21
  - SRE monitoring patterns and dashboards
21
22
  - Incident response automation
22
23
  """
23
-
24
+
24
25
  def __init__(self, profile: str = "default", dry_run: bool = True):
25
26
  super().__init__(profile, dry_run, ExecutionMode.DRY_RUN)
26
-
27
+
27
28
  def placeholder_method(self):
28
29
  """Placeholder for future implementation."""
29
- return "MonitoringAutomation - Coming in next development phase"
30
+ return "MonitoringAutomation - Coming in next development phase"