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
@@ -21,12 +21,18 @@ from rich.panel import Panel
21
21
  from rich.table import Table
22
22
 
23
23
  from runbooks.common.rich_utils import (
24
- console, print_header, print_success, print_error, print_warning, print_info,
25
- create_table, create_progress_bar, format_cost, STATUS_INDICATORS
26
- )
27
- from runbooks.common.cli_decorators import (
28
- common_aws_options, rich_output_options, enterprise_safety_options
24
+ console,
25
+ print_header,
26
+ print_success,
27
+ print_error,
28
+ print_warning,
29
+ print_info,
30
+ create_table,
31
+ create_progress_bar,
32
+ format_cost,
33
+ STATUS_INDICATORS,
29
34
  )
35
+ from runbooks.common.cli_decorators import common_aws_options, rich_output_options, enterprise_safety_options
30
36
  from runbooks.common.error_handling import handle_aws_errors, handle_validation_errors
31
37
  from runbooks.common.profile_utils import get_profile_for_operation, validate_profile_access_decorator
32
38
  from runbooks.common.business_logic import BusinessMetrics, OptimizationResult, UniversalBusinessLogic
@@ -35,6 +41,7 @@ from runbooks.common.business_logic import BusinessMetrics, OptimizationResult,
35
41
  @dataclass
36
42
  class ModuleConfig:
37
43
  """Configuration for runbooks module CLI."""
44
+
38
45
  name: str
39
46
  version: str
40
47
  description: str
@@ -69,11 +76,7 @@ class ModuleCLIBase(abc.ABC):
69
76
  """Print standardized module header with Rich formatting."""
70
77
  print_header(self.config.name, self.config.version)
71
78
  self.console.print(
72
- Panel(
73
- f"[cyan]{self.config.description}[/cyan]",
74
- title=f"🚀 {self.config.name} Module",
75
- border_style="blue"
76
- )
79
+ Panel(f"[cyan]{self.config.description}[/cyan]", title=f"🚀 {self.config.name} Module", border_style="blue")
77
80
  )
78
81
 
79
82
  def validate_prerequisites(self, profile: Optional[str] = None) -> bool:
@@ -88,15 +91,12 @@ class ModuleCLIBase(abc.ABC):
88
91
  """
89
92
  try:
90
93
  # Validate AWS profile access
91
- selected_profile = get_profile_for_operation(
92
- self.config.primary_operation_type,
93
- profile
94
- )
94
+ selected_profile = get_profile_for_operation(self.config.primary_operation_type, profile)
95
95
 
96
96
  if not validate_profile_access(selected_profile, self.config.name):
97
97
  return False
98
98
 
99
- self._session_data['validated_profile'] = selected_profile
99
+ self._session_data["validated_profile"] = selected_profile
100
100
  return True
101
101
 
102
102
  except Exception as e:
@@ -125,8 +125,7 @@ class ModuleCLIBase(abc.ABC):
125
125
  """
126
126
  pass
127
127
 
128
- def create_results_table(self, title: str, data: List[Dict[str, Any]],
129
- columns: List[str]) -> Table:
128
+ def create_results_table(self, title: str, data: List[Dict[str, Any]], columns: List[str]) -> Table:
130
129
  """
131
130
  Create standardized results table with Rich formatting.
132
131
 
@@ -138,18 +137,19 @@ class ModuleCLIBase(abc.ABC):
138
137
  Returns:
139
138
  Configured Rich Table object
140
139
  """
141
- table = create_table(title=title, columns=[
142
- {"name": col, "style": "cyan" if "name" in col.lower() else "default"}
143
- for col in columns
144
- ])
140
+ table = create_table(
141
+ title=title,
142
+ columns=[{"name": col, "style": "cyan" if "name" in col.lower() else "default"} for col in columns],
143
+ )
145
144
 
146
145
  for row in data:
147
146
  table.add_row(*[str(row.get(col, "N/A")) for col in columns])
148
147
 
149
148
  return table
150
149
 
151
- def export_results(self, results: Dict[str, Any], format_type: str = "json",
152
- output_path: Optional[str] = None) -> bool:
150
+ def export_results(
151
+ self, results: Dict[str, Any], format_type: str = "json", output_path: Optional[str] = None
152
+ ) -> bool:
153
153
  """
154
154
  Export results in specified format.
155
155
 
@@ -166,9 +166,7 @@ class ModuleCLIBase(abc.ABC):
166
166
  return False
167
167
 
168
168
  try:
169
- export_handler = self.business_logic.create_export_handler(
170
- format_type, output_path
171
- )
169
+ export_handler = self.business_logic.create_export_handler(format_type, output_path)
172
170
 
173
171
  success = export_handler.export_data(results)
174
172
 
@@ -205,6 +203,7 @@ class ModuleCLIBase(abc.ABC):
205
203
  Returns:
206
204
  Decorated click command function
207
205
  """
206
+
208
207
  @click.command(name=command_name)
209
208
  @common_aws_options
210
209
  @rich_output_options
@@ -212,8 +211,7 @@ class ModuleCLIBase(abc.ABC):
212
211
  @handle_aws_errors(module_name=self.config.name)
213
212
  @handle_validation_errors
214
213
  @validate_profile_access_decorator(operation_type=self.config.primary_operation_type)
215
- def standardized_command(profile=None, region=None, dry_run=True,
216
- export_format=None, quiet=False, **kwargs):
214
+ def standardized_command(profile=None, region=None, dry_run=True, export_format=None, quiet=False, **kwargs):
217
215
  """Execute standardized module operation with enterprise safety."""
218
216
 
219
217
  # Module header
@@ -227,19 +225,11 @@ class ModuleCLIBase(abc.ABC):
227
225
  # Execute with performance monitoring
228
226
  try:
229
227
  with create_progress_bar() as progress:
230
- task = progress.add_task(
231
- f"[cyan]Executing {self.config.name} operation...",
232
- total=100
233
- )
228
+ task = progress.add_task(f"[cyan]Executing {self.config.name} operation...", total=100)
234
229
 
235
230
  # Execute primary operation
236
231
  results = self.execute_primary_operation(
237
- profile=profile,
238
- region=region,
239
- dry_run=dry_run,
240
- progress=progress,
241
- task=task,
242
- **kwargs
232
+ profile=profile, region=region, dry_run=dry_run, progress=progress, task=task, **kwargs
243
233
  )
244
234
 
245
235
  progress.update(task, completed=100)
@@ -252,9 +242,7 @@ class ModuleCLIBase(abc.ABC):
252
242
  metrics = self.calculate_business_metrics(results)
253
243
 
254
244
  if not quiet and metrics.annual_savings > 0:
255
- print_success(
256
- f"💰 Potential annual savings: {format_cost(metrics.annual_savings)}"
257
- )
245
+ print_success(f"💰 Potential annual savings: {format_cost(metrics.annual_savings)}")
258
246
 
259
247
  # Export if requested
260
248
  if export_format:
@@ -294,17 +282,13 @@ class AnalysisModuleCLI(ModuleCLIBase):
294
282
  if metrics.roi_percentage > 0:
295
283
  summary_content.append(f"📊 ROI: {metrics.roi_percentage:.1f}%")
296
284
 
297
- if hasattr(metrics, 'resources_analyzed'):
285
+ if hasattr(metrics, "resources_analyzed"):
298
286
  summary_content.append(f"🔍 Resources Analyzed: {metrics.resources_analyzed:,}")
299
287
 
300
288
  summary_content.append(f"⏱️ Execution Time: <{self.config.performance_target_seconds}s target")
301
289
  summary_content.append(f"✅ Confidence: {metrics.confidence_level:.1f}%")
302
290
 
303
- return Panel(
304
- "\n".join(summary_content),
305
- title="📈 Executive Summary",
306
- border_style="green"
307
- )
291
+ return Panel("\n".join(summary_content), title="📈 Executive Summary", border_style="green")
308
292
 
309
293
 
310
294
  class OperationsModuleCLI(ModuleCLIBase):
@@ -330,7 +314,7 @@ class OperationsModuleCLI(ModuleCLIBase):
330
314
  True if operation is safe to proceed
331
315
  """
332
316
  # Always require explicit approval for destructive operations
333
- destructive_operations = ['delete', 'terminate', 'remove', 'destroy']
317
+ destructive_operations = ["delete", "terminate", "remove", "destroy"]
334
318
 
335
319
  if any(op in operation.lower() for op in destructive_operations):
336
320
  print_warning(f"⚠️ Destructive operation requested: {operation}")
@@ -360,19 +344,14 @@ class OperationsModuleCLI(ModuleCLIBase):
360
344
  "timestamp": datetime.now().isoformat(),
361
345
  "module": self.config.name,
362
346
  "operation": operation,
363
- "user": self._session_data.get('validated_profile', 'unknown'),
364
- "resources_affected": results.get('resources_affected', []),
365
- "success": results.get('success', False),
366
- "execution_time": results.get('execution_time_seconds', 0)
347
+ "user": self._session_data.get("validated_profile", "unknown"),
348
+ "resources_affected": results.get("resources_affected", []),
349
+ "success": results.get("success", False),
350
+ "execution_time": results.get("execution_time_seconds", 0),
367
351
  }
368
352
 
369
353
  return json.dumps(audit_entry, indent=2)
370
354
 
371
355
 
372
356
  # Export standardized classes for module implementations
373
- __all__ = [
374
- "ModuleConfig",
375
- "ModuleCLIBase",
376
- "AnalysisModuleCLI",
377
- "OperationsModuleCLI"
378
- ]
357
+ __all__ = ["ModuleConfig", "ModuleCLIBase", "AnalysisModuleCLI", "OperationsModuleCLI"]