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.
Files changed (247) 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/WEIGHT_CONFIG_README.md +1 -1
  8. runbooks/cfat/assessment/compliance.py +8 -8
  9. runbooks/cfat/assessment/runner.py +1 -0
  10. runbooks/cfat/cloud_foundations_assessment.py +227 -239
  11. runbooks/cfat/models.py +6 -2
  12. runbooks/cfat/tests/__init__.py +6 -1
  13. runbooks/cli/__init__.py +13 -0
  14. runbooks/cli/commands/cfat.py +274 -0
  15. runbooks/cli/commands/finops.py +1164 -0
  16. runbooks/cli/commands/inventory.py +379 -0
  17. runbooks/cli/commands/operate.py +239 -0
  18. runbooks/cli/commands/security.py +248 -0
  19. runbooks/cli/commands/validation.py +825 -0
  20. runbooks/cli/commands/vpc.py +310 -0
  21. runbooks/cli/registry.py +107 -0
  22. runbooks/cloudops/__init__.py +23 -30
  23. runbooks/cloudops/base.py +96 -107
  24. runbooks/cloudops/cost_optimizer.py +549 -547
  25. runbooks/cloudops/infrastructure_optimizer.py +5 -4
  26. runbooks/cloudops/interfaces.py +226 -227
  27. runbooks/cloudops/lifecycle_manager.py +5 -4
  28. runbooks/cloudops/mcp_cost_validation.py +252 -235
  29. runbooks/cloudops/models.py +78 -53
  30. runbooks/cloudops/monitoring_automation.py +5 -4
  31. runbooks/cloudops/notebook_framework.py +179 -215
  32. runbooks/cloudops/security_enforcer.py +125 -159
  33. runbooks/common/accuracy_validator.py +11 -0
  34. runbooks/common/aws_pricing.py +349 -326
  35. runbooks/common/aws_pricing_api.py +211 -212
  36. runbooks/common/aws_profile_manager.py +341 -0
  37. runbooks/common/aws_utils.py +75 -80
  38. runbooks/common/business_logic.py +127 -105
  39. runbooks/common/cli_decorators.py +36 -60
  40. runbooks/common/comprehensive_cost_explorer_integration.py +456 -464
  41. runbooks/common/cross_account_manager.py +198 -205
  42. runbooks/common/date_utils.py +27 -39
  43. runbooks/common/decorators.py +235 -0
  44. runbooks/common/dry_run_examples.py +173 -208
  45. runbooks/common/dry_run_framework.py +157 -155
  46. runbooks/common/enhanced_exception_handler.py +15 -4
  47. runbooks/common/enhanced_logging_example.py +50 -64
  48. runbooks/common/enhanced_logging_integration_example.py +65 -37
  49. runbooks/common/env_utils.py +16 -16
  50. runbooks/common/error_handling.py +40 -38
  51. runbooks/common/lazy_loader.py +41 -23
  52. runbooks/common/logging_integration_helper.py +79 -86
  53. runbooks/common/mcp_cost_explorer_integration.py +478 -495
  54. runbooks/common/mcp_integration.py +63 -74
  55. runbooks/common/memory_optimization.py +140 -118
  56. runbooks/common/module_cli_base.py +37 -58
  57. runbooks/common/organizations_client.py +176 -194
  58. runbooks/common/patterns.py +204 -0
  59. runbooks/common/performance_monitoring.py +67 -71
  60. runbooks/common/performance_optimization_engine.py +283 -274
  61. runbooks/common/profile_utils.py +248 -39
  62. runbooks/common/rich_utils.py +643 -92
  63. runbooks/common/sre_performance_suite.py +177 -186
  64. runbooks/enterprise/__init__.py +1 -1
  65. runbooks/enterprise/logging.py +144 -106
  66. runbooks/enterprise/security.py +187 -204
  67. runbooks/enterprise/validation.py +43 -56
  68. runbooks/finops/__init__.py +29 -33
  69. runbooks/finops/account_resolver.py +1 -1
  70. runbooks/finops/advanced_optimization_engine.py +980 -0
  71. runbooks/finops/automation_core.py +268 -231
  72. runbooks/finops/business_case_config.py +184 -179
  73. runbooks/finops/cli.py +660 -139
  74. runbooks/finops/commvault_ec2_analysis.py +157 -164
  75. runbooks/finops/compute_cost_optimizer.py +336 -320
  76. runbooks/finops/config.py +20 -20
  77. runbooks/finops/cost_optimizer.py +488 -622
  78. runbooks/finops/cost_processor.py +332 -214
  79. runbooks/finops/dashboard_runner.py +1006 -172
  80. runbooks/finops/ebs_cost_optimizer.py +991 -657
  81. runbooks/finops/elastic_ip_optimizer.py +317 -257
  82. runbooks/finops/enhanced_mcp_integration.py +340 -0
  83. runbooks/finops/enhanced_progress.py +40 -37
  84. runbooks/finops/enhanced_trend_visualization.py +3 -2
  85. runbooks/finops/enterprise_wrappers.py +230 -292
  86. runbooks/finops/executive_export.py +203 -160
  87. runbooks/finops/helpers.py +130 -288
  88. runbooks/finops/iam_guidance.py +1 -1
  89. runbooks/finops/infrastructure/__init__.py +80 -0
  90. runbooks/finops/infrastructure/commands.py +506 -0
  91. runbooks/finops/infrastructure/load_balancer_optimizer.py +866 -0
  92. runbooks/finops/infrastructure/vpc_endpoint_optimizer.py +832 -0
  93. runbooks/finops/markdown_exporter.py +338 -175
  94. runbooks/finops/mcp_validator.py +1952 -0
  95. runbooks/finops/nat_gateway_optimizer.py +1513 -482
  96. runbooks/finops/network_cost_optimizer.py +657 -587
  97. runbooks/finops/notebook_utils.py +226 -188
  98. runbooks/finops/optimization_engine.py +1136 -0
  99. runbooks/finops/optimizer.py +25 -29
  100. runbooks/finops/rds_snapshot_optimizer.py +367 -411
  101. runbooks/finops/reservation_optimizer.py +427 -363
  102. runbooks/finops/scenario_cli_integration.py +77 -78
  103. runbooks/finops/scenarios.py +1278 -439
  104. runbooks/finops/schemas.py +218 -182
  105. runbooks/finops/snapshot_manager.py +2289 -0
  106. runbooks/finops/tests/test_finops_dashboard.py +3 -3
  107. runbooks/finops/tests/test_reference_images_validation.py +2 -2
  108. runbooks/finops/tests/test_single_account_features.py +17 -17
  109. runbooks/finops/tests/validate_test_suite.py +1 -1
  110. runbooks/finops/types.py +3 -3
  111. runbooks/finops/validation_framework.py +263 -269
  112. runbooks/finops/vpc_cleanup_exporter.py +191 -146
  113. runbooks/finops/vpc_cleanup_optimizer.py +593 -575
  114. runbooks/finops/workspaces_analyzer.py +171 -182
  115. runbooks/hitl/enhanced_workflow_engine.py +1 -1
  116. runbooks/integration/__init__.py +89 -0
  117. runbooks/integration/mcp_integration.py +1920 -0
  118. runbooks/inventory/CLAUDE.md +816 -0
  119. runbooks/inventory/README.md +3 -3
  120. runbooks/inventory/Tests/common_test_data.py +30 -30
  121. runbooks/inventory/__init__.py +2 -2
  122. runbooks/inventory/cloud_foundations_integration.py +144 -149
  123. runbooks/inventory/collectors/aws_comprehensive.py +28 -11
  124. runbooks/inventory/collectors/aws_networking.py +111 -101
  125. runbooks/inventory/collectors/base.py +4 -0
  126. runbooks/inventory/core/collector.py +495 -313
  127. runbooks/inventory/discovery.md +2 -2
  128. runbooks/inventory/drift_detection_cli.py +69 -96
  129. runbooks/inventory/find_ec2_security_groups.py +1 -1
  130. runbooks/inventory/inventory_mcp_cli.py +48 -46
  131. runbooks/inventory/list_rds_snapshots_aggregator.py +192 -208
  132. runbooks/inventory/mcp_inventory_validator.py +549 -465
  133. runbooks/inventory/mcp_vpc_validator.py +359 -442
  134. runbooks/inventory/organizations_discovery.py +56 -52
  135. runbooks/inventory/rich_inventory_display.py +33 -32
  136. runbooks/inventory/unified_validation_engine.py +278 -251
  137. runbooks/inventory/vpc_analyzer.py +733 -696
  138. runbooks/inventory/vpc_architecture_validator.py +293 -348
  139. runbooks/inventory/vpc_dependency_analyzer.py +382 -378
  140. runbooks/inventory/vpc_flow_analyzer.py +3 -3
  141. runbooks/main.py +152 -9147
  142. runbooks/main_final.py +91 -60
  143. runbooks/main_minimal.py +22 -10
  144. runbooks/main_optimized.py +131 -100
  145. runbooks/main_ultra_minimal.py +7 -2
  146. runbooks/mcp/__init__.py +36 -0
  147. runbooks/mcp/integration.py +679 -0
  148. runbooks/metrics/dora_metrics_engine.py +2 -2
  149. runbooks/monitoring/performance_monitor.py +9 -4
  150. runbooks/operate/dynamodb_operations.py +3 -1
  151. runbooks/operate/ec2_operations.py +145 -137
  152. runbooks/operate/iam_operations.py +146 -152
  153. runbooks/operate/mcp_integration.py +1 -1
  154. runbooks/operate/networking_cost_heatmap.py +33 -10
  155. runbooks/operate/privatelink_operations.py +1 -1
  156. runbooks/operate/rds_operations.py +223 -254
  157. runbooks/operate/s3_operations.py +107 -118
  158. runbooks/operate/vpc_endpoints.py +1 -1
  159. runbooks/operate/vpc_operations.py +648 -618
  160. runbooks/remediation/base.py +1 -1
  161. runbooks/remediation/commons.py +10 -7
  162. runbooks/remediation/commvault_ec2_analysis.py +71 -67
  163. runbooks/remediation/ec2_unattached_ebs_volumes.py +1 -0
  164. runbooks/remediation/multi_account.py +24 -21
  165. runbooks/remediation/rds_snapshot_list.py +91 -65
  166. runbooks/remediation/remediation_cli.py +92 -146
  167. runbooks/remediation/universal_account_discovery.py +83 -79
  168. runbooks/remediation/workspaces_list.py +49 -44
  169. runbooks/security/__init__.py +19 -0
  170. runbooks/security/assessment_runner.py +1150 -0
  171. runbooks/security/baseline_checker.py +812 -0
  172. runbooks/security/cloudops_automation_security_validator.py +509 -535
  173. runbooks/security/compliance_automation_engine.py +17 -17
  174. runbooks/security/config/__init__.py +2 -2
  175. runbooks/security/config/compliance_config.py +50 -50
  176. runbooks/security/config_template_generator.py +63 -76
  177. runbooks/security/enterprise_security_framework.py +1 -1
  178. runbooks/security/executive_security_dashboard.py +519 -508
  179. runbooks/security/integration_test_enterprise_security.py +5 -3
  180. runbooks/security/multi_account_security_controls.py +959 -1210
  181. runbooks/security/real_time_security_monitor.py +422 -444
  182. runbooks/security/run_script.py +1 -1
  183. runbooks/security/security_baseline_tester.py +1 -1
  184. runbooks/security/security_cli.py +143 -112
  185. runbooks/security/test_2way_validation.py +439 -0
  186. runbooks/security/two_way_validation_framework.py +852 -0
  187. runbooks/sre/mcp_reliability_engine.py +6 -6
  188. runbooks/sre/production_monitoring_framework.py +167 -177
  189. runbooks/tdd/__init__.py +15 -0
  190. runbooks/tdd/cli.py +1071 -0
  191. runbooks/utils/__init__.py +14 -17
  192. runbooks/utils/logger.py +7 -2
  193. runbooks/utils/version_validator.py +51 -48
  194. runbooks/validation/__init__.py +6 -6
  195. runbooks/validation/cli.py +9 -3
  196. runbooks/validation/comprehensive_2way_validator.py +754 -708
  197. runbooks/validation/mcp_validator.py +906 -228
  198. runbooks/validation/terraform_citations_validator.py +104 -115
  199. runbooks/validation/terraform_drift_detector.py +447 -451
  200. runbooks/vpc/README.md +617 -0
  201. runbooks/vpc/__init__.py +8 -1
  202. runbooks/vpc/analyzer.py +577 -0
  203. runbooks/vpc/cleanup_wrapper.py +476 -413
  204. runbooks/vpc/cli_cloudtrail_commands.py +339 -0
  205. runbooks/vpc/cli_mcp_validation_commands.py +480 -0
  206. runbooks/vpc/cloudtrail_audit_integration.py +717 -0
  207. runbooks/vpc/config.py +92 -97
  208. runbooks/vpc/cost_engine.py +411 -148
  209. runbooks/vpc/cost_explorer_integration.py +553 -0
  210. runbooks/vpc/cross_account_session.py +101 -106
  211. runbooks/vpc/enhanced_mcp_validation.py +917 -0
  212. runbooks/vpc/eni_gate_validator.py +961 -0
  213. runbooks/vpc/heatmap_engine.py +190 -162
  214. runbooks/vpc/mcp_no_eni_validator.py +681 -640
  215. runbooks/vpc/nat_gateway_optimizer.py +358 -0
  216. runbooks/vpc/networking_wrapper.py +15 -8
  217. runbooks/vpc/pdca_remediation_planner.py +528 -0
  218. runbooks/vpc/performance_optimized_analyzer.py +219 -231
  219. runbooks/vpc/runbooks_adapter.py +1167 -241
  220. runbooks/vpc/tdd_red_phase_stubs.py +601 -0
  221. runbooks/vpc/test_data_loader.py +358 -0
  222. runbooks/vpc/tests/conftest.py +314 -4
  223. runbooks/vpc/tests/test_cleanup_framework.py +1022 -0
  224. runbooks/vpc/tests/test_cost_engine.py +0 -2
  225. runbooks/vpc/topology_generator.py +326 -0
  226. runbooks/vpc/unified_scenarios.py +1302 -1129
  227. runbooks/vpc/vpc_cleanup_integration.py +1943 -1115
  228. runbooks-1.1.5.dist-info/METADATA +328 -0
  229. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/RECORD +233 -200
  230. runbooks/finops/README.md +0 -414
  231. runbooks/finops/accuracy_cross_validator.py +0 -647
  232. runbooks/finops/business_cases.py +0 -950
  233. runbooks/finops/dashboard_router.py +0 -922
  234. runbooks/finops/ebs_optimizer.py +0 -956
  235. runbooks/finops/embedded_mcp_validator.py +0 -1629
  236. runbooks/finops/enhanced_dashboard_runner.py +0 -527
  237. runbooks/finops/finops_dashboard.py +0 -584
  238. runbooks/finops/finops_scenarios.py +0 -1218
  239. runbooks/finops/legacy_migration.py +0 -730
  240. runbooks/finops/multi_dashboard.py +0 -1519
  241. runbooks/finops/single_dashboard.py +0 -1113
  242. runbooks/finops/unlimited_scenarios.py +0 -393
  243. runbooks-1.1.3.dist-info/METADATA +0 -799
  244. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/WHEEL +0 -0
  245. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/entry_points.txt +0 -0
  246. {runbooks-1.1.3.dist-info → runbooks-1.1.5.dist-info}/licenses/LICENSE +0 -0
  247. {runbooks-1.1.3.dist-info → runbooks-1.1.5.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"