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
@@ -8,27 +8,28 @@ Strategic Achievement: Manager requires business scenario intelligence with smar
|
|
8
8
|
parameter recommendations per business case type.
|
9
9
|
"""
|
10
10
|
|
11
|
-
import click
|
12
11
|
import time
|
13
|
-
from typing import Dict, List, Optional
|
12
|
+
from typing import Any, Dict, List, Optional
|
13
|
+
|
14
|
+
import click
|
14
15
|
from rich.console import Console
|
15
|
-
from rich.table import Table
|
16
16
|
from rich.panel import Panel
|
17
|
+
from rich.table import Table
|
17
18
|
|
19
|
+
from ..common.rich_utils import print_header, print_info, print_success, print_warning
|
18
20
|
from .business_case_config import (
|
21
|
+
BusinessScenarioMatrix,
|
22
|
+
ScenarioParameter,
|
19
23
|
get_business_case_config,
|
20
24
|
get_business_scenario_matrix,
|
21
|
-
BusinessScenarioMatrix,
|
22
|
-
ScenarioParameter
|
23
25
|
)
|
24
|
-
from ..common.rich_utils import print_header, print_info, print_success, print_warning
|
25
26
|
|
26
27
|
|
27
28
|
class SimplifiedScenarioMessaging:
|
28
29
|
"""
|
29
30
|
Simplified scenario messaging system for 75% console operation reduction.
|
30
31
|
|
31
|
-
|
32
|
+
Phase 2 Enhancement: Consolidates multiple console operations into
|
32
33
|
template-based single panel displays while preserving all information content.
|
33
34
|
|
34
35
|
Target: 75% reduction in console operations through panel consolidation.
|
@@ -47,14 +48,14 @@ class SimplifiedScenarioMessaging:
|
|
47
48
|
Achieves 75% reduction: 5 operations → 1 panel.
|
48
49
|
"""
|
49
50
|
self.operation_count += 5 # Would have been 5 separate prints
|
50
|
-
self.template_count += 1
|
51
|
+
self.template_count += 1 # Now using 1 panel template
|
51
52
|
|
52
53
|
scenario_content = self._format_scenario_content(scenario_config)
|
53
54
|
scenario_panel = Panel(
|
54
55
|
scenario_content,
|
55
56
|
title=f"[bold cyan]Scenario: {scenario_config.display_name}[/bold cyan]",
|
56
57
|
border_style="cyan",
|
57
|
-
padding=(1, 2)
|
58
|
+
padding=(1, 2),
|
58
59
|
)
|
59
60
|
self.console.print(scenario_panel)
|
60
61
|
|
@@ -75,7 +76,7 @@ class SimplifiedScenarioMessaging:
|
|
75
76
|
param_content,
|
76
77
|
title="[bold green]🎯 Intelligent Parameter Recommendations[/bold green]",
|
77
78
|
border_style="green",
|
78
|
-
padding=(1, 2)
|
79
|
+
padding=(1, 2),
|
79
80
|
)
|
80
81
|
self.console.print(param_panel)
|
81
82
|
|
@@ -96,12 +97,12 @@ class SimplifiedScenarioMessaging:
|
|
96
97
|
suggestion_content,
|
97
98
|
title=f"[bold yellow]💡 Parameter Optimization Suggestions for '{scenario_key}'[/bold yellow]",
|
98
99
|
border_style="yellow",
|
99
|
-
padding=(1, 2)
|
100
|
+
padding=(1, 2),
|
100
101
|
)
|
101
102
|
self.console.print(suggestion_panel)
|
102
103
|
|
103
104
|
def get_consolidation_metrics(self) -> Dict[str, Any]:
|
104
|
-
"""Get consolidation efficiency metrics for
|
105
|
+
"""Get consolidation efficiency metrics for Phase 2 validation."""
|
105
106
|
if self.operation_count == 0:
|
106
107
|
return {"efficiency": 0.0, "operations_saved": 0}
|
107
108
|
|
@@ -111,7 +112,7 @@ class SimplifiedScenarioMessaging:
|
|
111
112
|
"template_operations_used": self.template_count,
|
112
113
|
"operations_saved": self.operation_count - self.template_count,
|
113
114
|
"efficiency_percentage": efficiency,
|
114
|
-
"target_achieved": efficiency >= 75.0
|
115
|
+
"target_achieved": efficiency >= 75.0,
|
115
116
|
}
|
116
117
|
|
117
118
|
def _format_scenario_content(self, scenario_config) -> str:
|
@@ -139,7 +140,7 @@ class SimplifiedScenarioMessaging:
|
|
139
140
|
content_lines.append(f" [dim]→ {param.business_justification}[/dim]")
|
140
141
|
|
141
142
|
if param.alternative_values:
|
142
|
-
alternatives =
|
143
|
+
alternatives = ", ".join(str(v) for v in param.alternative_values)
|
143
144
|
content_lines.append(f" [dim]Alternatives: {alternatives}[/dim]")
|
144
145
|
content_lines.append("")
|
145
146
|
|
@@ -157,7 +158,7 @@ class ScenarioCliHelper:
|
|
157
158
|
"""
|
158
159
|
CLI integration helper for business scenario intelligence.
|
159
160
|
|
160
|
-
|
161
|
+
Phase 2 Enhanced: Integrates SimplifiedScenarioMessaging for 75% console
|
161
162
|
operation reduction while providing intelligent parameter recommendations.
|
162
163
|
"""
|
163
164
|
|
@@ -167,7 +168,7 @@ class ScenarioCliHelper:
|
|
167
168
|
self.business_config = get_business_case_config()
|
168
169
|
self.scenario_matrix = get_business_scenario_matrix()
|
169
170
|
|
170
|
-
#
|
171
|
+
# Phase 2 Enhancement: Integrate simplified messaging system
|
171
172
|
self.simplified_messaging = SimplifiedScenarioMessaging(self.console)
|
172
173
|
self.audit_trail = []
|
173
174
|
|
@@ -184,7 +185,7 @@ class ScenarioCliHelper:
|
|
184
185
|
"""
|
185
186
|
Display detailed help for a single scenario using simplified messaging.
|
186
187
|
|
187
|
-
|
188
|
+
Phase 2 Enhancement: Uses simplified messaging to reduce console operations
|
188
189
|
by 75% while preserving all information content.
|
189
190
|
"""
|
190
191
|
scenario_config = self.business_config.get_scenario(scenario_key)
|
@@ -192,13 +193,13 @@ class ScenarioCliHelper:
|
|
192
193
|
print_warning(f"Unknown scenario: {scenario_key}")
|
193
194
|
return
|
194
195
|
|
195
|
-
#
|
196
|
+
# Phase 2: Use simplified messaging for scenario overview (5 prints → 1 panel)
|
196
197
|
self.simplified_messaging.display_scenario_overview(scenario_config)
|
197
198
|
|
198
199
|
# Display parameter recommendations using simplified messaging
|
199
200
|
recommendations = self.scenario_matrix.get_parameter_recommendations(scenario_key)
|
200
201
|
if recommendations:
|
201
|
-
#
|
202
|
+
# Phase 2: Use simplified messaging for parameters (multiple prints → 1 panel)
|
202
203
|
self.simplified_messaging.display_parameter_recommendations(recommendations)
|
203
204
|
|
204
205
|
# Display optimal command in consolidated format
|
@@ -206,19 +207,21 @@ class ScenarioCliHelper:
|
|
206
207
|
command_panel = Panel(
|
207
208
|
f"[dim]runbooks finops --scenario {scenario_key} {optimal_command}[/dim]",
|
208
209
|
title="[bold yellow]💡 Optimal Command Example[/bold yellow]",
|
209
|
-
border_style="yellow"
|
210
|
+
border_style="yellow",
|
210
211
|
)
|
211
212
|
self.console.print(command_panel)
|
212
213
|
else:
|
213
214
|
print_info("Using standard parameters for this scenario")
|
214
215
|
|
215
|
-
# Audit trail for
|
216
|
-
self.audit_trail.append(
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
216
|
+
# Audit trail for Phase 2 compliance
|
217
|
+
self.audit_trail.append(
|
218
|
+
{
|
219
|
+
"action": "single_scenario_help",
|
220
|
+
"scenario": scenario_key,
|
221
|
+
"simplified_messaging_used": True,
|
222
|
+
"timestamp": time.time(),
|
223
|
+
}
|
224
|
+
)
|
222
225
|
|
223
226
|
def _display_all_scenarios_help(self) -> None:
|
224
227
|
"""Display overview of all scenarios with parameter summaries."""
|
@@ -226,7 +229,7 @@ class ScenarioCliHelper:
|
|
226
229
|
table = Table(
|
227
230
|
title="🎯 Business Scenarios with Intelligent Parameter Defaults",
|
228
231
|
show_header=True,
|
229
|
-
header_style="bold cyan"
|
232
|
+
header_style="bold cyan",
|
230
233
|
)
|
231
234
|
|
232
235
|
table.add_column("Scenario", style="bold white", width=15)
|
@@ -240,26 +243,20 @@ class ScenarioCliHelper:
|
|
240
243
|
|
241
244
|
# Tier classification for display
|
242
245
|
tier_mapping = {
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
246
|
+
"workspaces": "Tier 1",
|
247
|
+
"nat-gateway": "Tier 1",
|
248
|
+
"rds-snapshots": "Tier 1",
|
249
|
+
"ebs-optimization": "Tier 2",
|
250
|
+
"vpc-cleanup": "Tier 2",
|
251
|
+
"elastic-ip": "Tier 2",
|
252
|
+
"backup-investigation": "Tier 3",
|
250
253
|
}
|
251
254
|
|
252
255
|
for scenario_key, scenario in self.business_config.get_all_scenarios().items():
|
253
256
|
parameter_summary = scenario_summaries.get(scenario_key, "Standard")
|
254
257
|
tier = tier_mapping.get(scenario_key, "Standard")
|
255
258
|
|
256
|
-
table.add_row(
|
257
|
-
scenario_key,
|
258
|
-
scenario.display_name,
|
259
|
-
scenario.savings_range_display,
|
260
|
-
parameter_summary,
|
261
|
-
tier
|
262
|
-
)
|
259
|
+
table.add_row(scenario_key, scenario.display_name, scenario.savings_range_display, parameter_summary, tier)
|
263
260
|
|
264
261
|
self.console.print(table)
|
265
262
|
|
@@ -282,7 +279,7 @@ class ScenarioCliHelper:
|
|
282
279
|
• runbooks finops --help-scenarios # All scenarios overview
|
283
280
|
""",
|
284
281
|
title="📚 Scenario Usage Guide",
|
285
|
-
style="cyan"
|
282
|
+
style="cyan",
|
286
283
|
)
|
287
284
|
self.console.print(usage_panel)
|
288
285
|
|
@@ -298,7 +295,7 @@ class ScenarioCliHelper:
|
|
298
295
|
self.console.print(f" [dim]→ {param.business_justification}[/dim]")
|
299
296
|
|
300
297
|
if param.alternative_values:
|
301
|
-
alternatives =
|
298
|
+
alternatives = ", ".join(str(v) for v in param.alternative_values)
|
302
299
|
self.console.print(f" [dim]Alternatives: {alternatives}[/dim]")
|
303
300
|
self.console.print()
|
304
301
|
|
@@ -318,22 +315,24 @@ class ScenarioCliHelper:
|
|
318
315
|
"""
|
319
316
|
Validate and provide suggestions using simplified messaging.
|
320
317
|
|
321
|
-
|
318
|
+
Phase 2 Enhancement: Uses simplified messaging to consolidate suggestion display.
|
322
319
|
"""
|
323
320
|
suggestions = self.scenario_matrix.validate_parameters_for_scenario(scenario_key, provided_params)
|
324
321
|
|
325
322
|
if suggestions:
|
326
|
-
#
|
323
|
+
# Phase 2: Use simplified messaging for suggestions
|
327
324
|
self.simplified_messaging.display_optimization_suggestions(scenario_key, suggestions)
|
328
325
|
|
329
326
|
# Audit trail
|
330
|
-
self.audit_trail.append(
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
327
|
+
self.audit_trail.append(
|
328
|
+
{
|
329
|
+
"action": "parameter_validation",
|
330
|
+
"scenario": scenario_key,
|
331
|
+
"suggestions_count": len(suggestions),
|
332
|
+
"simplified_messaging_used": True,
|
333
|
+
"timestamp": time.time(),
|
334
|
+
}
|
335
|
+
)
|
337
336
|
|
338
337
|
def get_scenario_cli_choices(self) -> List[str]:
|
339
338
|
"""Get list of valid scenario choices for Click options."""
|
@@ -344,9 +343,9 @@ class ScenarioCliHelper:
|
|
344
343
|
base_help = self.business_config.get_scenario_help_text()
|
345
344
|
return f"{base_help}\n\nUse --scenario [scenario-name] for specific optimization analysis."
|
346
345
|
|
347
|
-
def
|
346
|
+
def get_console_performance_metrics(self) -> Dict[str, Any]:
|
348
347
|
"""
|
349
|
-
Get
|
348
|
+
Get Phase 2 performance metrics for enterprise audit compliance.
|
350
349
|
|
351
350
|
Returns consolidated metrics for:
|
352
351
|
- Message simplification efficiency (75% target)
|
@@ -356,25 +355,25 @@ class ScenarioCliHelper:
|
|
356
355
|
messaging_metrics = self.simplified_messaging.get_consolidation_metrics()
|
357
356
|
|
358
357
|
return {
|
359
|
-
"
|
358
|
+
"console_enhancement": "Console log improvements with message simplification",
|
360
359
|
"message_consolidation": messaging_metrics,
|
361
360
|
"audit_trail": {
|
362
361
|
"total_operations": len(self.audit_trail),
|
363
362
|
"operations_with_simplified_messaging": sum(
|
364
363
|
1 for op in self.audit_trail if op.get("simplified_messaging_used", False)
|
365
364
|
),
|
366
|
-
"audit_compliance": "enterprise_ready"
|
365
|
+
"audit_compliance": "enterprise_ready",
|
367
366
|
},
|
368
367
|
"target_achievements": {
|
369
368
|
"message_simplification_target": 75.0,
|
370
369
|
"achieved_efficiency": messaging_metrics.get("efficiency_percentage", 0.0),
|
371
|
-
"target_met": messaging_metrics.get("target_achieved", False)
|
370
|
+
"target_met": messaging_metrics.get("target_achieved", False),
|
372
371
|
},
|
373
372
|
"performance_improvements": {
|
374
373
|
"console_operations_reduced": messaging_metrics.get("operations_saved", 0),
|
375
374
|
"template_consolidation": "Rich panel integration implemented",
|
376
|
-
"information_preservation": "100% content maintained"
|
377
|
-
}
|
375
|
+
"information_preservation": "100% content maintained",
|
376
|
+
},
|
378
377
|
}
|
379
378
|
|
380
379
|
|
@@ -417,21 +416,21 @@ def get_scenario_parameter_defaults(scenario_key: str) -> Dict[str, Any]:
|
|
417
416
|
defaults = {}
|
418
417
|
|
419
418
|
for param_key, param in recommendations.items():
|
420
|
-
if param.name ==
|
421
|
-
defaults[
|
422
|
-
elif param.name ==
|
423
|
-
defaults[
|
424
|
-
elif param.name ==
|
425
|
-
defaults[
|
426
|
-
elif param.name ==
|
427
|
-
defaults[
|
428
|
-
elif param.name ==
|
429
|
-
defaults[
|
430
|
-
elif param.name ==
|
431
|
-
defaults[
|
432
|
-
elif param.name ==
|
433
|
-
defaults[
|
434
|
-
elif param.name ==
|
435
|
-
defaults[
|
436
|
-
|
437
|
-
return defaults
|
419
|
+
if param.name == "--time-range":
|
420
|
+
defaults["time_range"] = param.optimal_value
|
421
|
+
elif param.name == "--unblended":
|
422
|
+
defaults["unblended"] = True
|
423
|
+
elif param.name == "--amortized":
|
424
|
+
defaults["amortized"] = True
|
425
|
+
elif param.name == "--dual-metrics":
|
426
|
+
defaults["dual_metrics"] = True
|
427
|
+
elif param.name == "--pdf":
|
428
|
+
defaults["pdf"] = True
|
429
|
+
elif param.name == "--csv":
|
430
|
+
defaults["csv"] = True
|
431
|
+
elif param.name == "--json":
|
432
|
+
defaults["json"] = True
|
433
|
+
elif param.name == "--markdown":
|
434
|
+
defaults["export_markdown"] = True
|
435
|
+
|
436
|
+
return defaults
|