""" 🚀 ARF Ultimate Investor Demo v3.6.0 - Main Application Enhanced with best practices, Pythonic code, and investor-grade UX """ import logging from typing import Dict, Any, List, Optional import gradio as gr # Import modules from core.data_models import IncidentDatabase, IncidentScenario, DemoMode from core.visualizations import EnhancedVisualizationEngine from core.calculators import EnhancedROICalculator from demo.orchestrator import DemoOrchestrator from ui.components import ( create_metric_card, create_business_impact_section, create_approval_workflow, create_roi_comparison_table ) from ui.styles import CUSTOM_CSS, THEME # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # =========================================== # APPLICATION STATE # =========================================== class ARFDemoState: """Maintain application state""" def __init__(self): self.scenario_db = IncidentDatabase() self.viz_engine = EnhancedVisualizationEngine() self.roi_calculator = EnhancedROICalculator() self.demo_orchestrator = DemoOrchestrator(DemoMode.INVESTOR) self.current_scenario = None self.approval_required = True def get_scenario(self, name: str) -> Optional[IncidentScenario]: """Get scenario by name""" scenarios = self.scenario_db.get_scenarios() return scenarios.get(name) def get_scenario_names(self) -> List[str]: """Get all scenario names""" scenarios = self.scenario_db.get_scenarios() return list(scenarios.keys()) # =========================================== # EVENT HANDLERS # =========================================== class EventHandlers: """Handle all application events""" def __init__(self, state: ARFDemoState): self.state = state def handle_scenario_change(self, scenario_name: str, viz_type: str) -> tuple: """Handle scenario change""" scenario = self.state.get_scenario(scenario_name) if not scenario: return {}, {}, self.state.viz_engine.create_interactive_timeline(None) self.state.current_scenario = scenario # Create visualization if viz_type == "Interactive Timeline": viz = self.state.viz_engine.create_interactive_timeline(scenario) else: viz = self.state.viz_engine.create_executive_dashboard() return scenario.metrics, scenario.impact, viz def handle_oss_analysis(self, scenario_name: str) -> Dict: """Handle OSS analysis""" scenario = self.state.get_scenario(scenario_name) if not scenario or not scenario.oss_analysis: return {"status": "❌ No analysis available"} return scenario.oss_analysis.to_dict() def handle_enterprise_execution(self, scenario_name: str, approval_required: bool) -> tuple: """Handle enterprise execution""" self.state.approval_required = approval_required scenario = self.state.get_scenario(scenario_name) if not scenario or not scenario.enterprise_results: # Default results results = { "actions_completed": ["✅ Auto-scaled resources", "✅ Optimized configuration"], "metrics_improvement": {"Recovery": "Complete"}, "business_impact": {"Cost Saved": "$5,000"} } else: results = scenario.enterprise_results.to_dict() # Update approval in results if approval_required: results["status"] = "✅ Approved and Executed" else: results["status"] = "✅ Auto-Executed" # Create approval workflow display approval_display = create_approval_workflow(approval_required) # Configuration config = {"approval_required": approval_required, "compliance_mode": "strict"} return approval_display, config, results def handle_roi_calculation(self, monthly_incidents: int, avg_impact: int, team_size: int) -> Dict: """Handle ROI calculation""" try: return self.state.roi_calculator.calculate_comprehensive_roi( monthly_incidents, avg_impact, team_size ) except Exception as e: logger.error(f"ROI calculation error: {e}") return {"error": "Calculation failed"} def handle_next_demo_step(self) -> Dict: """Get next demo step guidance""" return self.state.demo_orchestrator.get_next_guidance() # =========================================== # MAIN INTERFACE # =========================================== def create_main_interface(): """Create the main Gradio interface""" state = ARFDemoState() handlers = EventHandlers(state) with gr.Blocks( title="🚀 ARF Investor Demo v3.6.0", theme=THEME, css=CUSTOM_CSS ) as demo: # ============ HEADER ============ gr.Markdown(""" # 🚀 Agentic Reliability Framework - Investor Demo v3.6.0 ## From Cost Center to Profit Engine: 5.2× ROI with Autonomous Reliability
Experience the transformation: OSS (Advisory)Enterprise (Autonomous)
""") # ============ PRESENTER GUIDANCE ============ gr.Markdown("### 🎯 Presenter Guidance") next_step_btn = gr.Button("🎬 Next Demo Step", variant="secondary", size="sm") guidance_display = gr.HTML( value="
Click 'Next Demo Step' for guidance
" ) # ============ MAIN TABS ============ with gr.Tabs(): # TAB 1: LIVE INCIDENT DEMO with gr.TabItem("🔥 Live Incident Demo", id="live-demo"): with gr.Row(): # Left Panel - Incident Details with gr.Column(scale=1): gr.Markdown("### 🎬 Incident Scenario") scenario_dropdown = gr.Dropdown( choices=state.get_scenario_names(), value="Cache Miss Storm", label="Select critical incident:", interactive=True ) gr.Markdown("### 📊 Current Crisis Metrics") metrics_display = gr.JSON( value=state.get_scenario("Cache Miss Storm").metrics ) gr.Markdown("### 💰 Business Impact") impact_display = gr.JSON( value=state.get_scenario("Cache Miss Storm").impact ) # Right Panel - Visualization & Actions with gr.Column(scale=2): # Visualization Selector gr.Markdown("### 📈 Incident Visualization") viz_radio = gr.Radio( choices=["Interactive Timeline", "Executive Dashboard"], value="Interactive Timeline", label="Choose visualization:" ) # Visualization Output timeline_output = gr.Plot( label="Visualization", show_label=False ) # Action Section with gr.Row(): oss_btn = gr.Button("🆓 Run OSS Analysis", variant="secondary") enterprise_btn = gr.Button("🚀 Execute Enterprise Healing", variant="primary") # Approval Controls with gr.Row(): approval_toggle = gr.Checkbox( label="🔐 Require Manual Approval", value=True, info="Toggle to show approval workflow vs auto-execution" ) demo_mode_btn = gr.Button("🎯 Auto-Demo Mode", variant="secondary", size="sm") # Approval Workflow Display approval_display = gr.HTML() # Configuration config_display = gr.JSON( label="⚙️ Enterprise Configuration", value={"approval_required": True, "compliance_mode": "strict"} ) # Results results_display = gr.JSON( label="🎯 Execution Results", value={"status": "Ready for execution..."} ) # TAB 2: BUSINESS IMPACT & ROI with gr.TabItem("💰 Business Impact & ROI", id="business-roi"): with gr.Column(): # Business Dashboard gr.Markdown("### 📊 Executive Business Dashboard") dashboard_output = gr.Plot() # ROI Calculator gr.Markdown("### 🧮 Interactive ROI Calculator") with gr.Row(): with gr.Column(scale=1): monthly_slider = gr.Slider( 1, 100, value=15, step=1, label="Monthly incidents", info="Typical range: 10-50 incidents/month" ) impact_slider = gr.Slider( 1000, 50000, value=8500, step=500, label="Average incident impact ($)", info="Includes revenue loss, engineer time, customer impact" ) team_slider = gr.Slider( 1, 20, value=5, step=1, label="Reliability team size", info="SREs, DevOps engineers managing incidents" ) calculate_btn = gr.Button("Calculate My ROI", variant="primary") with gr.Column(scale=2): roi_output = gr.JSON( label="Your ROI Analysis", value={"status": "Adjust sliders and click Calculate"} ) # Capability Comparison comparison_table = create_roi_comparison_table() # ============ FOOTER ============ gr.Markdown("---") with gr.Row(): with gr.Column(scale=2): gr.Markdown(""" **📞 Contact & Resources**
📧 Email: enterprise@arf.dev
🌐 Website: https://arf.dev
📚 Documentation: https://docs.arf.dev
💻 GitHub: petterjuan/agentic-reliability-framework
""") with gr.Column(scale=1): gr.Markdown(""" **🎯 Schedule a Demo**
Schedule 30-min Demo →
""") # ============ EVENT HANDLERS ============ # Scenario changes scenario_dropdown.change( handlers.handle_scenario_change, inputs=[scenario_dropdown, viz_radio], outputs=[metrics_display, impact_display, timeline_output] ) viz_radio.change( handlers.handle_scenario_change, inputs=[scenario_dropdown, viz_radio], outputs=[metrics_display, impact_display, timeline_output] ) # OSS Analysis oss_btn.click( handlers.handle_oss_analysis, inputs=[scenario_dropdown], outputs=[results_display] ) # Enterprise Execution enterprise_btn.click( handlers.handle_enterprise_execution, inputs=[scenario_dropdown, approval_toggle], outputs=[approval_display, config_display, results_display] ) # Approval toggle updates config approval_toggle.change( lambda approval: {"approval_required": approval, "compliance_mode": "strict"}, inputs=[approval_toggle], outputs=[config_display] ) # ROI Calculation calculate_btn.click( handlers.handle_roi_calculation, inputs=[monthly_slider, impact_slider, team_slider], outputs=[roi_output] ) # Next demo step guidance next_step_btn.click( handlers.handle_next_demo_step, outputs=[guidance_display] ) # Demo mode button demo_mode_btn.click( lambda: ( {"approval_required": False, "compliance_mode": "strict"}, create_approval_workflow(False) ), outputs=[config_display, approval_display] ) # ============ INITIAL LOAD ============ def load_initial_state(): """Load initial visualizations and data""" # Get initial scenario scenario = state.get_scenario("Cache Miss Storm") # Create visualizations timeline_viz = state.viz_engine.create_interactive_timeline(scenario) dashboard_viz = state.viz_engine.create_executive_dashboard() # Get initial guidance guidance = state.demo_orchestrator.get_next_guidance() return ( scenario.metrics if scenario else {}, scenario.impact if scenario else {}, timeline_viz, dashboard_viz, guidance["html"] ) demo.load( load_initial_state, outputs=[ metrics_display, impact_display, timeline_output, dashboard_output, guidance_display ] ) # ============ INSTRUCTIONS ============ gr.Markdown(""" """) return demo # =========================================== # APPLICATION ENTRY POINT # =========================================== def main(): """Main entry point""" logger.info("🚀 Launching ARF Investor Demo v3.6.0") logger.info("✅ Best practices applied") logger.info("✅ Pythonic code structure") logger.info("✅ Investor-grade UX") logger.info("✅ Enhanced visualizations") demo = create_main_interface() demo.launch( server_name="0.0.0.0", server_port=7860, share=False, debug=False, show_error=True ) if __name__ == "__main__": main()