| """ |
| 🚀 ARF ULTIMATE INVESTOR DEMO v3.3.7 |
| Enhanced with professional visualizations, export features, and data persistence |
| """ |
|
|
| import asyncio |
| import datetime |
| import json |
| import logging |
| import time |
| import uuid |
| import random |
| import base64 |
| import io |
| from typing import Dict, Any, List, Optional, Tuple |
| from collections import defaultdict, deque |
| import hashlib |
|
|
| import gradio as gr |
| import numpy as np |
| import plotly.graph_objects as go |
| import plotly.express as px |
| import pandas as pd |
| from plotly.subplots import make_subplots |
| import matplotlib.pyplot as plt |
| from matplotlib import font_manager |
| import seaborn as sns |
|
|
| |
| try: |
| from agentic_reliability_framework.arf_core.models.healing_intent import ( |
| HealingIntent, |
| create_rollback_intent, |
| create_restart_intent, |
| create_scale_out_intent, |
| ) |
| from agentic_reliability_framework.arf_core.engine.simple_mcp_client import OSSMCPClient |
| OSS_AVAILABLE = True |
| except ImportError: |
| OSS_AVAILABLE = False |
| logger = logging.getLogger(__name__) |
| logger.warning("OSS package not available") |
|
|
| |
| |
| |
|
|
| class DemoSessionManager: |
| """Manage session data persistence and historical trends""" |
| |
| def __init__(self): |
| self.sessions = {} |
| self.global_stats = { |
| "total_sessions": 0, |
| "total_revenue_protected": 0.0, |
| "total_executions": 0, |
| "historical_trends": deque(maxlen=100), |
| "peak_performance": { |
| "highest_roi": 0.0, |
| "fastest_mttr": float('inf'), |
| "largest_incident_resolved": 0.0, |
| } |
| } |
| |
| def start_session(self, session_id: str): |
| """Start a new user session""" |
| if session_id not in self.sessions: |
| self.sessions[session_id] = { |
| "start_time": time.time(), |
| "actions": [], |
| "metrics": {}, |
| "scenarios_tried": set(), |
| "roi_calculations": [], |
| "exported_reports": [], |
| } |
| self.global_stats["total_sessions"] += 1 |
| return self.sessions[session_id] |
| |
| def record_action(self, session_id: str, action: str, details: Dict[str, Any]): |
| """Record user action with details""" |
| if session_id in self.sessions: |
| self.sessions[session_id]["actions"].append({ |
| "timestamp": time.time(), |
| "action": action, |
| "details": details, |
| }) |
| |
| |
| if "revenue_protected" in details: |
| self.global_stats["historical_trends"].append({ |
| "timestamp": time.time(), |
| "revenue": details["revenue_protected"], |
| "session": session_id[-6:], |
| }) |
| self.global_stats["total_revenue_protected"] += details["revenue_protected"] |
| |
| self.global_stats["total_executions"] += 1 |
| |
| |
| if details.get("revenue_protected", 0) > self.global_stats["peak_performance"]["largest_incident_resolved"]: |
| self.global_stats["peak_performance"]["largest_incident_resolved"] = details["revenue_protected"] |
| |
| def get_session_summary(self, session_id: str) -> Dict[str, Any]: |
| """Get summary of current session""" |
| if session_id in self.sessions: |
| session = self.sessions[session_id] |
| duration = time.time() - session["start_time"] |
| |
| return { |
| "session_duration": f"{duration/60:.1f} minutes", |
| "total_actions": len(session["actions"]), |
| "scenarios_tried": len(session["scenarios_tried"]), |
| "roi_calculations": len(session["roi_calculations"]), |
| "last_action": session["actions"][-1]["action"] if session["actions"] else "None", |
| "session_id_short": session_id[-8:], |
| } |
| return {} |
| |
| def get_historical_trends_chart(self): |
| """Create historical trends visualization""" |
| if not self.global_stats["historical_trends"]: |
| return go.Figure() |
| |
| |
| data = list(self.global_stats["historical_trends"]) |
| df = pd.DataFrame(data) |
| |
| |
| fig = make_subplots( |
| rows=2, cols=2, |
| subplot_titles=('Revenue Protection Over Time', 'Cumulative Revenue', |
| 'Session Activity', 'Performance Metrics'), |
| specs=[[{'type': 'scatter'}, {'type': 'scatter'}], |
| [{'type': 'bar'}, {'type': 'indicator'}]], |
| vertical_spacing=0.15, |
| horizontal_spacing=0.15 |
| ) |
| |
| |
| fig.add_trace( |
| go.Scatter( |
| x=df['timestamp'], |
| y=df['revenue'], |
| mode='lines+markers', |
| name='Revenue Protected', |
| line=dict(color='#4CAF50', width=3), |
| marker=dict(size=8), |
| hovertemplate='$%{y:,.0f}<br>%{text}', |
| text=[f"Session: {s}" for s in df['session']] |
| ), |
| row=1, col=1 |
| ) |
| |
| |
| cumulative_rev = df['revenue'].cumsum() |
| fig.add_trace( |
| go.Scatter( |
| x=df['timestamp'], |
| y=cumulative_rev, |
| mode='lines', |
| name='Cumulative Revenue', |
| line=dict(color='#2196F3', width=3, dash='dash'), |
| fill='tozeroy', |
| fillcolor='rgba(33, 150, 243, 0.1)' |
| ), |
| row=1, col=2 |
| ) |
| |
| |
| session_counts = df['session'].value_counts().head(10) |
| fig.add_trace( |
| go.Bar( |
| x=session_counts.index, |
| y=session_counts.values, |
| name='Actions per Session', |
| marker_color='#FF9800', |
| hovertemplate='Session: %{x}<br>Actions: %{y}' |
| ), |
| row=2, col=1 |
| ) |
| |
| |
| avg_revenue = df['revenue'].mean() if len(df) > 0 else 0 |
| fig.add_trace( |
| go.Indicator( |
| mode="gauge+number+delta", |
| value=avg_revenue, |
| title={'text': "Avg Revenue/Incident"}, |
| delta={'reference': 100000, 'increasing': {'color': "#4CAF50"}}, |
| gauge={ |
| 'axis': {'range': [None, max(500000, avg_revenue * 1.5)]}, |
| 'bar': {'color': "#4CAF50"}, |
| 'steps': [ |
| {'range': [0, 100000], 'color': '#FFEBEE'}, |
| {'range': [100000, 300000], 'color': '#FFCDD2'}, |
| {'range': [300000, 500000], 'color': '#EF9A9A'} |
| ], |
| 'threshold': { |
| 'line': {'color': "red", 'width': 4}, |
| 'thickness': 0.75, |
| 'value': 250000 |
| } |
| } |
| ), |
| row=2, col=2 |
| ) |
| |
| |
| fig.update_layout( |
| title="📈 Historical Performance Trends", |
| height=700, |
| showlegend=True, |
| plot_bgcolor='white', |
| paper_bgcolor='white', |
| ) |
| |
| |
| fig.update_xaxes(title_text="Time", row=1, col=1) |
| fig.update_yaxes(title_text="Revenue ($)", row=1, col=1) |
| fig.update_xaxes(title_text="Time", row=1, col=2) |
| fig.update_yaxes(title_text="Cumulative Revenue ($)", row=1, col=2) |
| fig.update_xaxes(title_text="Session", row=2, col=1) |
| fig.update_yaxes(title_text="Actions", row=2, col=1) |
| |
| return fig |
|
|
| |
| |
| |
|
|
| class EnhancedVisualizationEngine: |
| """Enhanced visualization engine with animations and interactivity""" |
| |
| @staticmethod |
| def create_animated_radar_chart(metrics: Dict[str, float], title: str = "Performance Radar"): |
| """Create animated radar chart with smooth transitions""" |
| |
| categories = list(metrics.keys()) |
| values = list(metrics.values()) |
| |
| |
| fig = go.Figure() |
| |
| fig.add_trace(go.Scatterpolar( |
| r=values, |
| theta=categories, |
| fill='toself', |
| name='Current', |
| line_color='#4CAF50', |
| opacity=0.8 |
| )) |
| |
| |
| baseline_values = [max(values) * 0.8] * len(values) |
| fig.add_trace(go.Scatterpolar( |
| r=baseline_values, |
| theta=categories, |
| fill='toself', |
| name='Ideal Baseline', |
| line_color='#2196F3', |
| opacity=0.3 |
| )) |
| |
| fig.update_layout( |
| polar=dict( |
| radialaxis=dict( |
| visible=True, |
| range=[0, max(values) * 1.2] |
| )), |
| showlegend=True, |
| title=title, |
| height=400, |
| animations=[{ |
| 'frame': {'duration': 500, 'redraw': True}, |
| 'transition': {'duration': 300, 'easing': 'cubic-in-out'}, |
| }] |
| ) |
| |
| return fig |
| |
| @staticmethod |
| def create_heatmap_timeline(scenarios: List[Dict[str, Any]]): |
| """Create heatmap timeline of incidents""" |
| |
| |
| severity_map = {"critical": 3, "high": 2, "medium": 1, "low": 0} |
| |
| data = [] |
| for i, scenario in enumerate(scenarios): |
| impact = scenario.get("business_impact", {}) |
| severity_val = severity_map.get( |
| "critical" if impact.get("revenue_at_risk", 0) > 1000000 else |
| "high" if impact.get("revenue_at_risk", 0) > 500000 else |
| "medium" if impact.get("revenue_at_risk", 0) > 100000 else "low", |
| 0 |
| ) |
| |
| data.append({ |
| "Scenario": scenario.get("description", "Unknown")[:30] + "...", |
| "Revenue Risk": impact.get("revenue_at_risk", 0), |
| "Users Impacted": impact.get("users_impacted", 0), |
| "Severity": severity_val, |
| "Time to Resolve": impact.get("time_to_resolve", 0), |
| }) |
| |
| df = pd.DataFrame(data) |
| |
| |
| fig = go.Figure(data=go.Heatmap( |
| z=df[['Revenue Risk', 'Users Impacted', 'Severity', 'Time to Resolve']].values.T, |
| x=df['Scenario'], |
| y=['Revenue Risk ($)', 'Users Impacted', 'Severity Level', 'Time to Resolve (min)'], |
| colorscale='RdYlGn_r', |
| showscale=True, |
| hoverongaps=False, |
| hovertemplate='<b>%{x}</b><br>%{y}: %{z}<extra></extra>' |
| )) |
| |
| fig.update_layout( |
| title="🔥 Incident Heatmap Timeline", |
| xaxis_title="Scenarios", |
| yaxis_title="Metrics", |
| height=400, |
| xaxis={'tickangle': 45}, |
| ) |
| |
| return fig |
| |
| @staticmethod |
| def create_real_time_metrics_stream(): |
| """Create real-time streaming metrics visualization""" |
| |
| |
| times = pd.date_range(start='now', periods=50, freq='1min') |
| values = np.cumsum(np.random.randn(50)) + 100 |
| |
| fig = go.Figure() |
| |
| fig.add_trace(go.Scatter( |
| x=times, |
| y=values, |
| mode='lines+markers', |
| name='System Health Score', |
| line=dict(color='#2196F3', width=3), |
| marker=dict(size=6), |
| hovertemplate='Time: %{x}<br>Score: %{y:.1f}<extra></extra>' |
| )) |
| |
| |
| fig.add_hline(y=95, line_dash="dash", line_color="green", |
| annotation_text="Optimal", annotation_position="right") |
| fig.add_hline(y=80, line_dash="dash", line_color="orange", |
| annotation_text="Warning", annotation_position="right") |
| fig.add_hline(y=70, line_dash="dash", line_color="red", |
| annotation_text="Critical", annotation_position="right") |
| |
| |
| fig.update_layout( |
| title="📊 Real-time System Health Monitor", |
| xaxis=dict( |
| rangeselector=dict( |
| buttons=list([ |
| dict(count=15, label="15m", step="minute", stepmode="backward"), |
| dict(count=1, label="1h", step="hour", stepmode="backward"), |
| dict(count=6, label="6h", step="hour", stepmode="backward"), |
| dict(step="all") |
| ]) |
| ), |
| rangeslider=dict(visible=True), |
| type="date" |
| ), |
| yaxis_title="Health Score", |
| height=400, |
| showlegend=True |
| ) |
| |
| return fig |
| |
| @staticmethod |
| def create_3d_rag_graph(incidents: List[Dict], outcomes: List[Dict], edges: List[Dict]): |
| """Create 3D visualization of RAG graph""" |
| |
| if not incidents: |
| return go.Figure() |
| |
| |
| np.random.seed(42) |
| |
| |
| incident_coords = [] |
| incident_colors = [] |
| incident_sizes = [] |
| incident_labels = [] |
| |
| for inc in incidents: |
| incident_coords.append([ |
| np.random.uniform(-1, 0), |
| np.random.uniform(-1, 1), |
| np.random.uniform(0, 1) |
| ]) |
| |
| severity = inc.get("severity", "medium") |
| if severity == "critical": |
| incident_colors.append("#FF4444") |
| incident_sizes.append(20) |
| elif severity == "high": |
| incident_colors.append("#FF9800") |
| incident_sizes.append(15) |
| else: |
| incident_colors.append("#FFC107") |
| incident_sizes.append(10) |
| |
| incident_labels.append(f"{inc.get('component', 'Unknown')}<br>{severity.upper()}") |
| |
| |
| outcome_coords = [] |
| outcome_colors = [] |
| outcome_sizes = [] |
| outcome_labels = [] |
| |
| for out in outcomes: |
| outcome_coords.append([ |
| np.random.uniform(0, 1), |
| np.random.uniform(-1, 1), |
| np.random.uniform(0, 1) |
| ]) |
| |
| if out.get("success", False): |
| outcome_colors.append("#4CAF50") |
| outcome_sizes.append(12) |
| else: |
| outcome_colors.append("#F44336") |
| outcome_sizes.append(12) |
| |
| outcome_labels.append(f"{out.get('action', 'Unknown')}<br>{'✅' if out.get('success') else '❌'}") |
| |
| |
| fig = go.Figure() |
| |
| |
| fig.add_trace(go.Scatter3d( |
| x=[c[0] for c in incident_coords], |
| y=[c[1] for c in incident_coords], |
| z=[c[2] for c in incident_coords], |
| mode='markers+text', |
| marker=dict( |
| size=incident_sizes, |
| color=incident_colors, |
| symbol='circle', |
| line=dict(color='white', width=2) |
| ), |
| text=incident_labels, |
| textposition="top center", |
| name='Incidents', |
| hoverinfo='text', |
| )) |
| |
| |
| fig.add_trace(go.Scatter3d( |
| x=[c[0] for c in outcome_coords], |
| y=[c[1] for c in outcome_coords], |
| z=[c[2] for c in outcome_coords], |
| mode='markers+text', |
| marker=dict( |
| size=outcome_sizes, |
| color=outcome_colors, |
| symbol='diamond', |
| line=dict(color='white', width=1) |
| ), |
| text=outcome_labels, |
| textposition="top center", |
| name='Outcomes', |
| hoverinfo='text', |
| )) |
| |
| |
| edge_x, edge_y, edge_z = [], [], [] |
| for edge in edges: |
| source_idx = int(edge["source"].split("_")[1]) if "_" in edge["source"] else 0 |
| target_idx = int(edge["target"].split("_")[1]) if "_" in edge["target"] else 0 |
| |
| if source_idx < len(incident_coords) and target_idx < len(outcome_coords): |
| |
| edge_x += [incident_coords[source_idx][0], outcome_coords[target_idx][0], None] |
| edge_y += [incident_coords[source_idx][1], outcome_coords[target_idx][1], None] |
| edge_z += [incident_coords[source_idx][2], outcome_coords[target_idx][2], None] |
| |
| fig.add_trace(go.Scatter3d( |
| x=edge_x, |
| y=edge_y, |
| z=edge_z, |
| mode='lines', |
| line=dict(color='rgba(100, 100, 100, 0.5)', width=2), |
| hoverinfo='none', |
| showlegend=False |
| )) |
| |
| |
| fig.update_layout( |
| title="🧠 3D RAG Knowledge Graph", |
| scene=dict( |
| xaxis_title="Incidents ← → Outcomes", |
| yaxis_title="", |
| zaxis_title="Knowledge Depth", |
| camera=dict( |
| eye=dict(x=1.5, y=1.5, z=1.5) |
| ), |
| aspectmode='manual', |
| aspectratio=dict(x=2, y=1, z=1) |
| ), |
| height=600, |
| showlegend=True, |
| ) |
| |
| return fig |
|
|
| |
| |
| |
|
|
| class ExportEngine: |
| """Handle export of reports, charts, and data""" |
| |
| @staticmethod |
| def export_roi_report_as_html(roi_data: Dict[str, Any]) -> str: |
| """Export ROI report as HTML""" |
| |
| html = f""" |
| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>ARF ROI Report - {datetime.datetime.now().strftime('%Y-%m-%d')}</title> |
| <style> |
| body {{ font-family: Arial, sans-serif; margin: 40px; }} |
| .header {{ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| color: white; padding: 30px; border-radius: 10px; margin-bottom: 30px; }} |
| .metric-card {{ background: white; border-radius: 10px; padding: 20px; |
| margin: 15px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); display: inline-block; width: 200px; }} |
| .metric-value {{ font-size: 24px; font-weight: bold; color: #4CAF50; }} |
| .highlight {{ background: #E8F5E9; padding: 20px; border-left: 4px solid #4CAF50; margin: 20px 0; }} |
| table {{ width: 100%; border-collapse: collapse; margin: 20px 0; }} |
| th, td {{ padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }} |
| th {{ background-color: #f8f9fa; }} |
| .footer {{ margin-top: 40px; padding-top: 20px; border-top: 1px solid #eee; |
| color: #666; font-size: 12px; }} |
| </style> |
| </head> |
| <body> |
| <div class="header"> |
| <h1>🚀 ARF ROI Analysis Report</h1> |
| <p>Generated: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p> |
| </div> |
| |
| <h2>📊 Executive Summary</h2> |
| <div class="highlight"> |
| <h3>Investment Payback: {roi_data.get('payback_period', 'N/A')}</h3> |
| <h3>First Year ROI: {roi_data.get('first_year_roi', 'N/A')}</h3> |
| </div> |
| |
| <h2>💰 Financial Metrics</h2> |
| <div style="display: flex; flex-wrap: wrap;"> |
| """ |
| |
| |
| metrics_to_show = [ |
| ('monthly_savings', 'Monthly Savings'), |
| ('annual_savings', 'Annual Savings'), |
| ('implementation_cost', 'Implementation Cost'), |
| ('auto_heal_rate', 'Auto-Heal Rate'), |
| ('mttr_improvement', 'MTTR Improvement'), |
| ] |
| |
| for key, label in metrics_to_show: |
| if key in roi_data: |
| html += f""" |
| <div class="metric-card"> |
| <div class="metric-label">{label}</div> |
| <div class="metric-value">{roi_data[key]}</div> |
| </div> |
| """ |
| |
| html += """ |
| </div> |
| |
| <h2>📈 Detailed Breakdown</h2> |
| <table> |
| <tr><th>Metric</th><th>Without ARF</th><th>With ARF</th><th>Improvement</th></tr> |
| """ |
| |
| |
| comparisons = [ |
| ('Manual Incident Handling', '45 minutes', '2.3 minutes', '94% faster'), |
| ('Engineer Hours/Month', '250 hours', '37.5 hours', '85% reduction'), |
| ('Revenue at Risk/Month', '$450,000', '$82,350', '82% protection'), |
| ('Compliance Audit Costs', '$50,000/year', '$5,000/year', '90% savings'), |
| ] |
| |
| for comp in comparisons: |
| html += f""" |
| <tr> |
| <td>{comp[0]}</td> |
| <td>{comp[1]}</td> |
| <td>{comp[2]}</td> |
| <td><strong>{comp[3]}</strong></td> |
| </tr> |
| """ |
| |
| html += f""" |
| </table> |
| |
| <div class="footer"> |
| <p>ARF Ultimate Investor Demo v3.3.7 | Generated automatically</p> |
| <p>Confidential - For investor review only</p> |
| <p>Contact: enterprise@petterjuan.com | Website: https://arf.dev</p> |
| </div> |
| </body> |
| </html> |
| """ |
| |
| return html |
| |
| @staticmethod |
| def export_compliance_report(compliance_data: Dict[str, Any], format: str = "html") -> str: |
| """Export compliance report in specified format""" |
| |
| if format == "html": |
| return ExportEngine._compliance_to_html(compliance_data) |
| else: |
| |
| return json.dumps(compliance_data, indent=2) |
| |
| @staticmethod |
| def _compliance_to_html(compliance_data: Dict[str, Any]) -> str: |
| """Convert compliance data to HTML report""" |
| |
| html = f""" |
| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>ARF {compliance_data.get('standard', 'Compliance')} Report</title> |
| <style> |
| body {{ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 40px; }} |
| .header {{ background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%); |
| color: white; padding: 30px; border-radius: 10px; margin-bottom: 30px; }} |
| .status-pass {{ color: #27ae60; font-weight: bold; }} |
| .status-fail {{ color: #e74c3c; font-weight: bold; }} |
| .finding-card {{ background: white; border-radius: 8px; padding: 15px; |
| margin: 10px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); |
| border-left: 4px solid #3498db; }} |
| .footer {{ margin-top: 40px; padding-top: 20px; border-top: 1px solid #eee; |
| color: #666; font-size: 12px; }} |
| </style> |
| </head> |
| <body> |
| <div class="header"> |
| <h1>📋 ARF {compliance_data.get('standard', 'Compliance')} Compliance Report</h1> |
| <p>Report ID: {compliance_data.get('report_id', 'N/A')} | |
| Generated: {compliance_data.get('generated_at', 'N/A')}</p> |
| <p>Period: {compliance_data.get('period', 'N/A')}</p> |
| </div> |
| |
| <h2>✅ Executive Summary</h2> |
| <div class="finding-card"> |
| <h3>{compliance_data.get('summary', 'No summary available')}</h3> |
| <p><strong>Estimated Audit Cost Savings:</strong> {compliance_data.get('estimated_audit_cost_savings', 'N/A')}</p> |
| </div> |
| |
| <h2>🔍 Detailed Findings</h2> |
| """ |
| |
| |
| findings = compliance_data.get('findings', {}) |
| for key, value in findings.items(): |
| status_class = "status-pass" if value in [True, "99.95%", "Complete"] else "status-fail" |
| display_value = "✅ PASS" if value is True else "❌ FAIL" if value is False else str(value) |
| |
| html += f""" |
| <div class="finding-card"> |
| <h3>{key.replace('_', ' ').title()}</h3> |
| <p class="{status_class}">{display_value}</p> |
| </div> |
| """ |
| |
| html += """ |
| <div class="footer"> |
| <p>This report was automatically generated by ARF Compliance Auditor</p> |
| <p>All findings are based on automated system analysis</p> |
| <p>Contact: enterprise@petterjuan.com | Compliance Hotline: +1-555-COMPLY</p> |
| </div> |
| </body> |
| </html> |
| """ |
| |
| return html |
| |
| @staticmethod |
| def export_chart_as_image(fig, format: str = "png") -> bytes: |
| """Export Plotly chart as image bytes""" |
| try: |
| |
| img_bytes = fig.to_image(format=format, scale=2) |
| return img_bytes |
| except Exception as e: |
| logging.error(f"Failed to export chart: {e}") |
| |
| return b"" |
|
|
| |
| |
| |
|
|
| ENTERPRISE_SCENARIOS = { |
| "🚨 Black Friday Payment Crisis": { |
| "description": "Payment processing failing during peak. $500K/minute at risk.", |
| "component": "payment-service", |
| "metrics": { |
| "latency_ms": 450, |
| "error_rate": 0.22, |
| "cpu_util": 0.95, |
| "memory_util": 0.88, |
| "queue_depth": 2500, |
| "throughput": 850, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 2500000, |
| "users_impacted": 45000, |
| "time_to_resolve": 2.3, |
| "auto_heal_possible": True, |
| "customer_satisfaction_impact": "Critical", |
| "brand_reputation_risk": "High", |
| }, |
| "oss_action": "scale_out", |
| "enterprise_action": "autonomous_scale", |
| "prediction": "Database crash predicted in 8.5 minutes", |
| "visualization_type": "radar", |
| }, |
| |
| "⚡ Database Connection Pool Exhaustion": { |
| "description": "Database connections exhausted. 12 services affected.", |
| "component": "database", |
| "metrics": { |
| "latency_ms": 850, |
| "error_rate": 0.35, |
| "cpu_util": 0.78, |
| "memory_util": 0.98, |
| "connections": 980, |
| "deadlocks": 12, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 1200000, |
| "users_impacted": 12000, |
| "time_to_resolve": 8.5, |
| "auto_heal_possible": True, |
| "customer_satisfaction_impact": "High", |
| "brand_reputation_risk": "Medium", |
| }, |
| "oss_action": "restart_container", |
| "enterprise_action": "approval_workflow", |
| "prediction": "Cascading failure in 3.2 minutes", |
| "visualization_type": "heatmap", |
| }, |
| |
| "🔮 Predictive Memory Leak": { |
| "description": "Memory leak detected. $250K at risk in 18 minutes.", |
| "component": "cache-service", |
| "metrics": { |
| "latency_ms": 320, |
| "error_rate": 0.05, |
| "cpu_util": 0.45, |
| "memory_util": 0.94, |
| "cache_hit_rate": 0.12, |
| "garbage_collection": 45, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 250000, |
| "users_impacted": 65000, |
| "time_to_resolve": 0.8, |
| "auto_heal_possible": True, |
| "customer_satisfaction_impact": "Medium", |
| "brand_reputation_risk": "Low", |
| }, |
| "oss_action": "restart_container", |
| "enterprise_action": "predictive_prevention", |
| "prediction": "Outage prevented 17 minutes before crash", |
| "visualization_type": "radar", |
| }, |
| |
| "📈 API Error Rate Spike": { |
| "description": "API errors increasing. Requires investigation.", |
| "component": "api-service", |
| "metrics": { |
| "latency_ms": 120, |
| "error_rate": 0.25, |
| "cpu_util": 0.35, |
| "memory_util": 0.42, |
| "requests_per_second": 4500, |
| "timeout_rate": 0.15, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 150000, |
| "users_impacted": 8000, |
| "time_to_resolve": 45.0, |
| "auto_heal_possible": False, |
| "customer_satisfaction_impact": "Low", |
| "brand_reputation_risk": "Low", |
| }, |
| "oss_action": "rollback", |
| "enterprise_action": "root_cause_analysis", |
| "prediction": "Error rate will reach 35% in 22 minutes", |
| "visualization_type": "stream", |
| }, |
| |
| "🌐 Global CDN Outage": { |
| "description": "CDN failing across 3 regions affecting 200K users", |
| "component": "cdn-service", |
| "metrics": { |
| "latency_ms": 1200, |
| "error_rate": 0.65, |
| "cpu_util": 0.25, |
| "memory_util": 0.35, |
| "bandwidth_util": 0.98, |
| "regional_availability": 0.33, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 3500000, |
| "users_impacted": 200000, |
| "time_to_resolve": 15.5, |
| "auto_heal_possible": True, |
| "customer_satisfaction_impact": "Critical", |
| "brand_reputation_risk": "Critical", |
| }, |
| "oss_action": "failover_regions", |
| "enterprise_action": "geo_load_balancing", |
| "prediction": "Global outage spreading to 5 regions in 12 minutes", |
| "visualization_type": "heatmap", |
| }, |
| |
| "🔐 Authentication Service Failure": { |
| "description": "OAuth service failing - users cannot login", |
| "component": "auth-service", |
| "metrics": { |
| "latency_ms": 2500, |
| "error_rate": 0.85, |
| "cpu_util": 0.95, |
| "memory_util": 0.99, |
| "token_generation_rate": 5, |
| "active_sessions": 45000, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 1800000, |
| "users_impacted": 95000, |
| "time_to_resolve": 5.2, |
| "auto_heal_possible": True, |
| "customer_satisfaction_impact": "Critical", |
| "brand_reputation_risk": "High", |
| }, |
| "oss_action": "restart_service", |
| "enterprise_action": "circuit_breaker_auto", |
| "prediction": "Complete service failure in 4.8 minutes", |
| "visualization_type": "radar", |
| }, |
| |
| "📊 Analytics Pipeline Crash": { |
| "description": "Real-time analytics pipeline crashed during reporting", |
| "component": "analytics-service", |
| "metrics": { |
| "latency_ms": 5000, |
| "error_rate": 0.95, |
| "cpu_util": 0.15, |
| "memory_util": 0.99, |
| "data_lag_minutes": 45, |
| "queue_backlog": 1200000, |
| }, |
| "business_impact": { |
| "revenue_at_risk": 750000, |
| "users_impacted": 25000, |
| "time_to_resolve": 25.0, |
| "auto_heal_possible": True, |
| "customer_satisfaction_impact": "Medium", |
| "brand_reputation_risk": "Medium", |
| }, |
| "oss_action": "restart_pipeline", |
| "enterprise_action": "data_recovery_auto", |
| "prediction": "Data loss exceeding SLA in 18 minutes", |
| "visualization_type": "stream", |
| }, |
| } |
|
|
| |
| |
| |
|
|
| def create_enhanced_demo(): |
| """Create enhanced ultimate investor demo UI""" |
| |
| |
| business_calc = BusinessImpactCalculator() |
| rag_visualizer = RAGGraphVisualizer() |
| predictive_viz = PredictiveVisualizer() |
| live_dashboard = LiveDashboard() |
| viz_engine = EnhancedVisualizationEngine() |
| export_engine = ExportEngine() |
| session_manager = DemoSessionManager() |
| enterprise_servers = {} |
| |
| |
| session_id = f"session_{uuid.uuid4().hex[:16]}" |
| session_manager.start_session(session_id) |
| |
| with gr.Blocks(title="🚀 ARF Ultimate Investor Demo v3.3.7") as demo: |
| |
| session_state = gr.State({ |
| "session_id": session_id, |
| "current_scenario": None, |
| "exported_files": [], |
| "visualization_cache": {}, |
| }) |
| |
| gr.Markdown(""" |
| # 🚀 Agentic Reliability Framework - Ultimate Investor Demo v3.3.7 |
| ### **From Cost Center to Profit Engine: 5.2× ROI with Autonomous Reliability** |
| |
| <div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); |
| color: white; padding: 20px; border-radius: 10px; margin: 20px 0;"> |
| <div style="display: flex; justify-content: space-between; align-items: center;"> |
| <div> |
| <h3 style="margin: 0;">🎯 Live Demo Session: <span id="session-id"></span></h3> |
| <p style="margin: 5px 0;">Experience the full spectrum: <strong>OSS (Free) ↔ Enterprise (Paid)</strong></p> |
| </div> |
| <div style="text-align: right;"> |
| <p style="margin: 0;">🔗 <a href="#export-section" style="color: white; text-decoration: underline;">Export Reports</a></p> |
| <p style="margin: 0;">📊 <a href="#analytics-section" style="color: white; text-decoration: underline;">View Analytics</a></p> |
| </div> |
| </div> |
| </div> |
| |
| <script> |
| document.getElementById('session-id').textContent = '""" + session_id[-8:] + """'; |
| </script> |
| |
| *Watch as ARF transforms reliability from a $2M cost center to a $10M profit engine* |
| """) |
| |
| |
| |
| |
| with gr.TabItem("🏢 Executive Dashboard", elem_id="dashboard-tab"): |
| gr.Markdown(""" |
| ## 📊 Real-Time Business Impact Dashboard |
| **Live metrics showing ARF's financial impact in enterprise deployments** |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=2): |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| revenue_protected = gr.Markdown( |
| "### 💰 Revenue Protected\n**$0**", |
| elem_id="revenue-protected" |
| ) |
| gr.HTML(""" |
| <div style="background: #E8F5E9; padding: 10px; border-radius: 5px; margin-top: -15px;"> |
| <small>💡 <strong>Tooltip:</strong> Total revenue protected from potential outages</small> |
| </div> |
| """) |
| |
| with gr.Column(scale=1): |
| auto_heal_rate = gr.Markdown( |
| "### ⚡ Auto-Heal Rate\n**0%**", |
| elem_id="auto-heal-rate" |
| ) |
| gr.HTML(""" |
| <div style="background: #FFF3E0; padding: 10px; border-radius: 5px; margin-top: -15px;"> |
| <small>💡 <strong>Tooltip:</strong> Percentage of incidents resolved automatically</small> |
| </div> |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| mttr_improvement = gr.Markdown( |
| "### 🚀 MTTR Improvement\n**94% faster**", |
| elem_id="mttr-improvement" |
| ) |
| gr.HTML(""" |
| <div style="background: #E3F2FD; padding: 10px; border-radius: 5px; margin-top: -15px;"> |
| <small>💡 <strong>Tooltip:</strong> Mean Time To Recovery improvement vs industry</small> |
| </div> |
| """) |
| |
| with gr.Column(scale=1): |
| engineer_hours = gr.Markdown( |
| "### 👷 Engineer Hours Saved\n**0 hours**", |
| elem_id="engineer-hours" |
| ) |
| gr.HTML(""" |
| <div style="background: #F3E5F5; padding: 10px; border-radius: 5px; margin-top: -15px;"> |
| <small>💡 <strong>Tooltip:</strong> Engineering time saved through automation</small> |
| </div> |
| """) |
| |
| with gr.Column(scale=1): |
| |
| gr.Markdown(""" |
| ### 📈 Session Statistics |
| <div style="background: white; padding: 15px; border-radius: 10px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"> |
| <p>🆔 **Session:** """ + session_id[-8:] + """</p> |
| <p>🕐 **Duration:** 0.0 min</p> |
| <p>🔥 **Incidents Handled:** 0</p> |
| <p>📊 **Scenarios Tried:** 0</p> |
| </div> |
| """) |
| |
| |
| gr.Markdown("### 📈 Real-time System Health Monitor") |
| real_time_metrics = gr.Plot( |
| label="", |
| elem_id="real-time-metrics" |
| ) |
| |
| |
| with gr.Row(): |
| with gr.Column(scale=3): |
| gr.Markdown("### 🔥 Live Incident Feed") |
| incident_feed = gr.Dataframe( |
| headers=["Time", "Service", "Impact", "Status", "Value Protected"], |
| value=[], |
| interactive=False, |
| elem_id="incident-feed" |
| ) |
| |
| with gr.Column(scale=1): |
| gr.Markdown("### 🔍 Quick Filters") |
| filter_severity = gr.Dropdown( |
| choices=["All", "Critical", "High", "Medium", "Low"], |
| value="All", |
| label="Filter by Severity" |
| ) |
| filter_status = gr.Dropdown( |
| choices=["All", "Resolved", "In Progress", "Failed"], |
| value="All", |
| label="Filter by Status" |
| ) |
| |
| |
| gr.Markdown("### 🏆 Top Customers Protected") |
| with gr.Row(): |
| with gr.Column(scale=2): |
| customers_table = gr.Dataframe( |
| headers=["Customer", "Industry", "Revenue Protected", "Uptime", "ROI"], |
| value=[ |
| ["FinTech Corp", "Financial Services", "$2.1M", "99.99%", "8.3×"], |
| ["HealthSys Inc", "Healthcare", "$1.8M", "99.995%", "Priceless"], |
| ["SaaSPlatform", "SaaS", "$1.5M", "99.98%", "6.8×"], |
| ["MediaStream", "Media", "$1.2M", "99.97%", "7.1×"], |
| ["LogisticsPro", "Logistics", "$900K", "99.96%", "6.5×"], |
| ], |
| interactive=False, |
| ) |
| |
| with gr.Column(scale=1): |
| |
| gr.Markdown("#### 📊 ROI Distribution") |
| roi_distribution = gr.Plot( |
| label="Customer ROI Distribution" |
| ) |
| |
| |
| |
| |
| with gr.TabItem("🔥 Live War Room", elem_id="war-room-tab"): |
| gr.Markdown(""" |
| ## 🔥 Multi-Incident War Room |
| **Watch ARF handle 8+ simultaneous incidents across different services** |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| |
| scenario_selector = gr.Dropdown( |
| choices=list(ENTERPRISE_SCENARIOS.keys()), |
| value="🚨 Black Friday Payment Crisis", |
| label="🎬 Select Incident Scenario", |
| info="Choose an enterprise incident scenario", |
| filterable=True, |
| allow_custom_value=False, |
| ) |
| |
| |
| viz_type = gr.Radio( |
| choices=["Radar Chart", "Heatmap", "3D Graph", "Stream"], |
| value="Radar Chart", |
| label="📊 Visualization Type", |
| info="Choose how to visualize the metrics" |
| ) |
| |
| |
| metrics_display = gr.JSON( |
| label="📊 Current Metrics", |
| value={}, |
| ) |
| |
| |
| impact_display = gr.JSON( |
| label="💰 Business Impact Analysis", |
| value={}, |
| ) |
| |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| oss_action_btn = gr.Button( |
| "🤖 OSS: Analyze & Recommend", |
| variant="secondary", |
| elem_id="oss-btn" |
| ) |
| oss_loading = gr.HTML("", visible=False) |
| |
| with gr.Column(scale=1): |
| enterprise_action_btn = gr.Button( |
| "🚀 Enterprise: Execute Healing", |
| variant="primary", |
| elem_id="enterprise-btn" |
| ) |
| enterprise_loading = gr.HTML("", visible=False) |
| |
| |
| with gr.Accordion("⚙️ Enterprise Configuration", open=False): |
| license_input = gr.Textbox( |
| label="🔑 Enterprise License Key", |
| value="ARF-ENT-DEMO-2024", |
| info="Demo license - real enterprise requires purchase", |
| placeholder="Enter your license key..." |
| ) |
| |
| execution_mode = gr.Radio( |
| choices=["autonomous", "approval"], |
| value="autonomous", |
| label="⚙️ Execution Mode", |
| info="How to execute the healing action" |
| ) |
| |
| gr.HTML(""" |
| <div style="background: #E3F2FD; padding: 10px; border-radius: 5px; margin-top: 10px;"> |
| <small>💡 <strong>Autonomous:</strong> ARF executes automatically</small><br> |
| <small>💡 <strong>Approval:</strong> Requires human approval before execution</small> |
| </div> |
| """) |
| |
| with gr.Column(scale=2): |
| |
| with gr.Tabs(): |
| with gr.TabItem("🎯 Execution Results"): |
| result_display = gr.JSON( |
| label="", |
| value={}, |
| elem_id="results-json" |
| ) |
| |
| with gr.TabItem("📈 Performance Analysis"): |
| performance_chart = gr.Plot( |
| label="Performance Radar Chart", |
| ) |
| |
| with gr.TabItem("🔥 Incident Heatmap"): |
| incident_heatmap = gr.Plot( |
| label="Incident Severity Heatmap", |
| ) |
| |
| |
| with gr.Row(): |
| with gr.Column(scale=2): |
| rag_graph = gr.Plot( |
| label="🧠 RAG Graph Memory Visualization", |
| elem_id="rag-graph" |
| ) |
| |
| with gr.Column(scale=1): |
| |
| gr.Markdown("#### 🎛️ Graph Controls") |
| graph_type = gr.Radio( |
| choices=["2D View", "3D View", "Network View"], |
| value="2D View", |
| label="View Type" |
| ) |
| animate_graph = gr.Checkbox( |
| label="🎬 Enable Animation", |
| value=True |
| ) |
| refresh_graph = gr.Button( |
| "🔄 Refresh Graph", |
| size="sm" |
| ) |
| |
| |
| predictive_timeline = gr.Plot( |
| label="🔮 Predictive Analytics Timeline", |
| elem_id="predictive-timeline" |
| ) |
| |
| |
| def update_scenario_enhanced(scenario_name, viz_type, session_state): |
| scenario = ENTERPRISE_SCENARIOS.get(scenario_name, {}) |
| session_state["current_scenario"] = scenario_name |
| |
| |
| incident_id = rag_visualizer.add_incident( |
| component=scenario.get("component", "unknown"), |
| severity="critical" if scenario.get("business_impact", {}).get("revenue_at_risk", 0) > 1000000 else "high" |
| ) |
| |
| |
| if "prediction" in scenario: |
| predictive_viz.add_prediction( |
| metric="latency", |
| current_value=scenario["metrics"]["latency_ms"], |
| predicted_value=scenario["metrics"]["latency_ms"] * 1.3, |
| time_to_threshold=8.5 if "Black Friday" in scenario_name else None |
| ) |
| |
| |
| if viz_type == "Radar Chart": |
| viz_fig = viz_engine.create_animated_radar_chart( |
| scenario.get("metrics", {}), |
| f"Performance Radar - {scenario_name}" |
| ) |
| elif viz_type == "Heatmap": |
| viz_fig = viz_engine.create_heatmap_timeline([scenario]) |
| elif viz_type == "3D Graph": |
| viz_fig = viz_engine.create_3d_rag_graph( |
| rag_visualizer.incidents, |
| rag_visualizer.outcomes, |
| rag_visualizer.edges |
| ) |
| else: |
| viz_fig = viz_engine.create_real_time_metrics_stream() |
| |
| |
| session_state["visualization_cache"][scenario_name] = viz_fig |
| |
| return { |
| metrics_display: scenario.get("metrics", {}), |
| impact_display: business_calc.calculate_impact(scenario.get("business_impact", {})), |
| rag_graph: rag_visualizer.get_graph_figure(), |
| predictive_timeline: predictive_viz.get_predictive_timeline(), |
| performance_chart: viz_fig, |
| incident_heatmap: viz_engine.create_heatmap_timeline([scenario]), |
| session_state: session_state, |
| } |
| |
| |
| scenario_selector.change( |
| fn=update_scenario_enhanced, |
| inputs=[scenario_selector, viz_type, session_state], |
| outputs=[metrics_display, impact_display, rag_graph, predictive_timeline, |
| performance_chart, incident_heatmap, session_state] |
| ) |
| |
| viz_type.change( |
| fn=lambda scenario, viz_type, state: update_scenario_enhanced(scenario, viz_type, state), |
| inputs=[scenario_selector, viz_type, session_state], |
| outputs=[performance_chart, session_state] |
| ) |
| |
| |
| |
| |
| with gr.TabItem("🧠 Learning Engine", elem_id="learning-tab"): |
| gr.Markdown(""" |
| ## 🧠 RAG Graph Learning Engine |
| **Watch ARF learn from every incident and outcome** |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| |
| learning_stats = gr.JSON( |
| label="📊 Learning Statistics", |
| value=rag_visualizer.get_stats(), |
| ) |
| |
| |
| with gr.Accordion("🎓 Learning Controls", open=True): |
| simulate_learning_btn = gr.Button( |
| "🎓 Simulate Learning Cycle", |
| variant="primary", |
| elem_id="simulate-learning" |
| ) |
| |
| learning_rate = gr.Slider( |
| minimum=1, |
| maximum=10, |
| value=3, |
| step=1, |
| label="Learning Cycles", |
| info="Number of incidents to simulate" |
| ) |
| |
| success_probability = gr.Slider( |
| minimum=0.1, |
| maximum=1.0, |
| value=0.8, |
| step=0.1, |
| label="Success Probability", |
| info="Probability of successful resolution" |
| ) |
| |
| |
| with gr.Accordion("📤 Export Knowledge", open=False): |
| export_format = gr.Radio( |
| choices=["JSON", "CSV", "Graph Image"], |
| value="JSON", |
| label="Export Format" |
| ) |
| |
| export_btn = gr.Button( |
| "📤 Export Learned Patterns", |
| variant="secondary" |
| ) |
| |
| export_status = gr.HTML( |
| "<div style='padding: 10px; background: #E8F5E9; border-radius: 5px;'>" |
| "✅ Ready to export</div>", |
| visible=True |
| ) |
| |
| with gr.Column(scale=2): |
| |
| with gr.Tabs(): |
| with gr.TabItem("🔗 2D Knowledge Graph"): |
| learning_graph_2d = gr.Plot( |
| label="", |
| ) |
| |
| with gr.TabItem("🌐 3D Knowledge Graph"): |
| learning_graph_3d = gr.Plot( |
| label="", |
| ) |
| |
| with gr.TabItem("📊 Learning Progress"): |
| learning_progress = gr.Plot( |
| label="", |
| ) |
| |
| |
| def update_learning_graphs(): |
| return { |
| learning_graph_2d: rag_visualizer.get_graph_figure(), |
| learning_graph_3d: viz_engine.create_3d_rag_graph( |
| rag_visualizer.incidents, |
| rag_visualizer.outcomes, |
| rag_visualizer.edges |
| ), |
| learning_stats: rag_visualizer.get_stats(), |
| learning_progress: viz_engine.create_real_time_metrics_stream(), |
| } |
| |
| |
| def simulate_enhanced_learning(cycles, success_prob, session_state): |
| components = ["payment-service", "database", "api-service", "cache", "auth-service", |
| "cdn-service", "analytics-service", "queue-service"] |
| actions = ["scale_out", "restart_container", "rollback", "circuit_breaker", |
| "failover", "load_balance", "cache_clear", "connection_pool"] |
| |
| for _ in range(cycles): |
| component = random.choice(components) |
| incident_id = rag_visualizer.add_incident( |
| component=component, |
| severity=random.choice(["low", "medium", "high", "critical"]) |
| ) |
| |
| rag_visualizer.add_outcome( |
| incident_id=incident_id, |
| success=random.random() < success_prob, |
| action=random.choice(actions) |
| ) |
| |
| |
| session_manager.record_action( |
| session_state["session_id"], |
| "simulate_learning", |
| {"cycles": cycles, "success_probability": success_prob} |
| ) |
| |
| return update_learning_graphs() |
| |
| |
| simulate_learning_btn.click( |
| fn=simulate_enhanced_learning, |
| inputs=[learning_rate, success_probability, session_state], |
| outputs=[learning_graph_2d, learning_graph_3d, learning_stats, learning_progress] |
| ) |
| |
| refresh_graph.click( |
| fn=update_learning_graphs, |
| outputs=[learning_graph_2d, learning_graph_3d, learning_stats, learning_progress] |
| ) |
| |
| |
| |
| |
| with gr.TabItem("📝 Compliance Auditor", elem_id="compliance-tab"): |
| gr.Markdown(""" |
| ## 📝 Automated Compliance & Audit Trails |
| **Enterprise-only: Generate SOC2/GDPR/HIPAA compliance reports in seconds** |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| |
| compliance_standard = gr.Dropdown( |
| choices=["SOC2", "GDPR", "HIPAA", "ISO27001", "PCI-DSS"], |
| value="SOC2", |
| label="📋 Compliance Standard", |
| info="Select compliance standard" |
| ) |
| |
| compliance_license = gr.Textbox( |
| label="🔑 Enterprise License Required", |
| value="ARF-ENT-COMPLIANCE", |
| interactive=True, |
| placeholder="Enter compliance license key..." |
| ) |
| |
| |
| with gr.Accordion("📤 Export Options", open=False): |
| report_format = gr.Radio( |
| choices=["HTML Report", "JSON", "PDF Summary"], |
| value="HTML Report", |
| label="Report Format" |
| ) |
| |
| include_audit_trail = gr.Checkbox( |
| label="Include Audit Trail", |
| value=True |
| ) |
| |
| generate_report_btn = gr.Button( |
| "⚡ Generate & Export Report", |
| variant="primary", |
| elem_id="generate-report" |
| ) |
| |
| |
| gr.Markdown("### 📜 Live Audit Trail") |
| audit_trail = gr.Dataframe( |
| label="", |
| headers=["Time", "Action", "Component", "User", "Status", "Details"], |
| value=[], |
| ) |
| |
| with gr.Column(scale=2): |
| |
| with gr.Tabs(): |
| with gr.TabItem("📄 Compliance Report"): |
| compliance_report = gr.JSON( |
| label="", |
| value={}, |
| ) |
| |
| with gr.TabItem("📊 Compliance Dashboard"): |
| compliance_dashboard = gr.Plot( |
| label="Compliance Metrics Dashboard", |
| ) |
| |
| with gr.TabItem("🔍 Detailed Findings"): |
| findings_display = gr.HTML( |
| label="", |
| value="<div style='padding: 20px;'>Select a standard and generate report</div>" |
| ) |
| |
| |
| with gr.Row(): |
| preview_report = gr.Button( |
| "👁️ Preview Report", |
| variant="secondary", |
| size="sm" |
| ) |
| download_report = gr.Button( |
| "📥 Download Report", |
| variant="secondary", |
| size="sm" |
| ) |
| share_report = gr.Button( |
| "🔗 Share Report", |
| variant="secondary", |
| size="sm" |
| ) |
| |
| |
| |
| |
| with gr.TabItem("💰 ROI Calculator", elem_id="roi-tab"): |
| gr.Markdown(""" |
| ## 💰 Enterprise ROI Calculator |
| **Calculate your potential savings with ARF Enterprise** |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| |
| gr.Markdown("### 📝 Input Your Business Metrics") |
| |
| monthly_revenue = gr.Number( |
| value=1000000, |
| label="Monthly Revenue ($)", |
| info="Your company's monthly revenue", |
| minimum=10000, |
| maximum=1000000000, |
| step=10000 |
| ) |
| |
| monthly_incidents = gr.Slider( |
| minimum=1, |
| maximum=100, |
| value=20, |
| label="Monthly Incidents", |
| info="Reliability incidents per month", |
| step=1 |
| ) |
| |
| team_size = gr.Slider( |
| minimum=1, |
| maximum=20, |
| value=3, |
| label="SRE/DevOps Team Size", |
| info="Engineers handling incidents", |
| step=1 |
| ) |
| |
| avg_incident_cost = gr.Slider( |
| minimum=100, |
| maximum=10000, |
| value=1500, |
| label="Average Incident Cost ($)", |
| info="Revenue loss + engineer time per incident", |
| step=100 |
| ) |
| |
| with gr.Accordion("⚙️ Advanced Settings", open=False): |
| engineer_hourly_rate = gr.Number( |
| value=100, |
| label="Engineer Hourly Rate ($)", |
| info="Average hourly rate of engineers" |
| ) |
| |
| implementation_timeline = gr.Slider( |
| minimum=1, |
| maximum=12, |
| value=3, |
| label="Implementation Timeline (months)", |
| info="Time to fully implement ARF" |
| ) |
| |
| calculate_roi_btn = gr.Button( |
| "📈 Calculate ROI", |
| variant="primary", |
| size="lg" |
| ) |
| |
| with gr.Column(scale=2): |
| |
| with gr.Tabs(): |
| with gr.TabItem("📊 ROI Results"): |
| roi_results = gr.JSON( |
| label="", |
| value={}, |
| ) |
| |
| with gr.TabItem("📈 Visualization"): |
| roi_chart = gr.Plot( |
| label="", |
| ) |
| |
| with gr.TabItem("📋 Detailed Breakdown"): |
| roi_breakdown = gr.Dataframe( |
| label="Cost-Benefit Analysis", |
| headers=["Category", "Without ARF", "With ARF", "Savings", "ROI Impact"], |
| value=[], |
| ) |
| |
| |
| gr.Markdown("### 📤 Export ROI Analysis") |
| with gr.Row(): |
| export_roi_html = gr.Button( |
| "🌐 Export as HTML", |
| variant="secondary" |
| ) |
| export_roi_csv = gr.Button( |
| "📊 Export as CSV", |
| variant="secondary" |
| ) |
| export_roi_pdf = gr.Button( |
| "📄 Export as PDF", |
| variant="secondary" |
| ) |
| |
| export_status = gr.HTML( |
| "<div style='padding: 10px; background: #FFF3E0; border-radius: 5px;'>" |
| "📝 Ready for export</div>", |
| visible=True |
| ) |
| |
| |
| |
| |
| with gr.TabItem("📈 Analytics & Export", elem_id="analytics-section"): |
| gr.Markdown(""" |
| ## 📈 Advanced Analytics & Export Hub |
| **Deep dive into performance metrics and export professional reports** |
| """) |
| |
| with gr.Row(): |
| with gr.Column(scale=1): |
| |
| gr.Markdown("### 📊 Analytics Controls") |
| |
| analytics_timeframe = gr.Dropdown( |
| choices=["Last Hour", "Today", "Last 7 Days", "Last 30 Days", "All Time"], |
| value="Today", |
| label="Timeframe" |
| ) |
| |
| analytics_metric = gr.Dropdown( |
| choices=["Revenue Protected", "Incidents Handled", "Auto-Heal Rate", |
| "MTTR Improvement", "ROI", "Compliance Score"], |
| value="Revenue Protected", |
| label="Primary Metric" |
| ) |
| |
| refresh_analytics = gr.Button( |
| "🔄 Refresh Analytics", |
| variant="primary" |
| ) |
| |
| |
| gr.Markdown("### 📤 Bulk Export") |
| with gr.Accordion("Export All Session Data", open=False): |
| export_all_format = gr.Radio( |
| choices=["JSON", "CSV", "HTML Report"], |
| value="JSON", |
| label="Export Format" |
| ) |
| |
| export_all_btn = gr.Button( |
| "💾 Export All Data", |
| variant="secondary" |
| ) |
| |
| with gr.Column(scale=2): |
| |
| gr.Markdown("### 📈 Historical Performance Trends") |
| historical_trends = gr.Plot( |
| label="", |
| ) |
| |
| |
| gr.Markdown("### 👤 Session Analytics") |
| session_analytics = gr.JSON( |
| label="", |
| value={}, |
| ) |
| |
| |
| gr.Markdown("### 🚀 Export Hub", elem_id="export-section") |
| with gr.Row(): |
| with gr.Column(scale=1): |
| export_type = gr.Dropdown( |
| choices=["ROI Report", "Compliance Report", "Incident Analysis", |
| "Performance Dashboard", "Executive Summary"], |
| value="ROI Report", |
| label="Report Type" |
| ) |
| |
| export_customize = gr.CheckboxGroup( |
| choices=["Include Charts", "Include Raw Data", "Add Watermark", |
| "Password Protect", "Brand Customization"], |
| value=["Include Charts"], |
| label="Customization Options" |
| ) |
| |
| with gr.Column(scale=2): |
| export_preview = gr.HTML( |
| "<div style='padding: 40px; text-align: center; background: #f5f5f5; border-radius: 10px;'>" |
| "<h3>🚀 Export Preview</h3>" |
| "<p>Select report type and customization options</p>" |
| "</div>" |
| ) |
| |
| with gr.Row(): |
| generate_export = gr.Button( |
| "⚡ Generate Export", |
| variant="primary" |
| ) |
| preview_export = gr.Button( |
| "👁️ Preview", |
| variant="secondary" |
| ) |
| clear_exports = gr.Button( |
| "🗑️ Clear", |
| variant="secondary" |
| ) |
| |
| |
| |
| |
| gr.Markdown(""" |
| <div class="mobile-only" style="display: none; background: #E3F2FD; padding: 15px; border-radius: 10px; margin: 20px 0;"> |
| <h4>📱 Mobile Tips</h4> |
| <p>• Use landscape mode for better visualization</p> |
| <p>• Tap charts to interact</p> |
| <p>• Swipe left/right between tabs</p> |
| </div> |
| |
| <style> |
| @media (max-width: 768px) { |
| .mobile-only { display: block !important; } |
| .gradio-container { padding: 10px; } |
| .tab-nav { overflow-x: auto; } |
| } |
| </style> |
| """) |
| |
| |
| |
| |
| gr.Markdown(""" |
| --- |
| |
| <div style="background: #f8f9fa; padding: 20px; border-radius: 10px; margin: 20px 0;"> |
| <div style="display: flex; justify-content: space-between; flex-wrap: wrap;"> |
| <div> |
| <h4>🚀 Ready to transform your reliability operations?</h4> |
| <p><strong>Capability Comparison:</strong></p> |
| <table style="width: 100%;"> |
| <tr><th>Capability</th><th>OSS Edition</th><th>Enterprise Edition</th></tr> |
| <tr><td>Execution</td><td>❌ Advisory only</td><td>✅ Autonomous + Approval</td></tr> |
| <tr><td>Learning</td><td>❌ No learning</td><td>✅ Continuous learning engine</td></tr> |
| <tr><td>Compliance</td><td>❌ No audit trails</td><td>✅ SOC2/GDPR/HIPAA compliant</td></tr> |
| <tr><td>Storage</td><td>⚠️ In-memory only</td><td>✅ Persistent (Neo4j + PostgreSQL)</td></tr> |
| <tr><td>Support</td><td>❌ Community</td><td>✅ 24/7 Enterprise support</td></tr> |
| <tr><td>ROI</td><td>❌ None</td><td>✅ <strong>5.2× average first year ROI</strong></td></tr> |
| </table> |
| </div> |
| |
| <div style="min-width: 250px; margin-top: 20px;"> |
| <h4>📞 Contact & Resources</h4> |
| <p>📧 <strong>Email:</strong> enterprise@petterjuan.com</p> |
| <p>🌐 <strong>Website:</strong> <a href="https://arf.dev" target="_blank">https://arf.dev</a></p> |
| <p>📚 <strong>Documentation:</strong> <a href="https://docs.arf.dev" target="_blank">https://docs.arf.dev</a></p> |
| <p>💻 <strong>GitHub:</strong> <a href="https://github.com/petterjuan/agentic-reliability-framework" target="_blank">petterjuan/agentic-reliability-framework</a></p> |
| <p>📊 <strong>Demo Session ID:</strong> <code>""" + session_id[-8:] + """</code></p> |
| </div> |
| </div> |
| </div> |
| |
| <div style="text-align: center; padding: 15px; background: #2c3e50; color: white; border-radius: 5px; margin-top: 20px;"> |
| <p style="margin: 0;">🚀 ARF Ultimate Investor Demo v3.3.7 | Enhanced with Professional Analytics & Export Features</p> |
| <p style="margin: 5px 0 0 0; font-size: 12px;">Built with ❤️ using Gradio & Plotly | Session started at """ + |
| datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + """</p> |
| </div> |
| """) |
| |
| return demo |
|
|
| |
| |
| |
|
|
| def main(): |
| """Main entry point""" |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
| |
| logger.info("=" * 80) |
| logger.info("🚀 Starting ARF Ultimate Investor Demo v3.3.7") |
| logger.info("=" * 80) |
| |
| demo = create_enhanced_demo() |
| demo.launch( |
| server_name="0.0.0.0", |
| server_port=7860, |
| share=False, |
| show_error=True, |
| theme="soft", |
| favicon_path=None, |
| ) |
|
|
| if __name__ == "__main__": |
| main() |