diff --git "a/app.py" "b/app.py"
--- "a/app.py"
+++ "b/app.py"
@@ -34,1525 +34,1103 @@ try:
)
from agentic_reliability_framework.arf_core.engine.simple_mcp_client import OSSMCPClient
OSS_AVAILABLE = True
-except ImportError:
+except ImportError as e:
+ logging.warning(f"OSS components not available: {e}")
OSS_AVAILABLE = False
- logger = logging.getLogger(__name__)
- logger.warning("OSS package not available")
-# ============================================================================
-# BUSINESS IMPACT CALCULATIONS (Based on business.py)
-# ============================================================================
+# Enhanced logging
+logging.basicConfig(level=logging.INFO)
+logger = logging.getLogger(__name__)
-class BusinessImpactCalculator:
- """Enterprise-scale business impact calculation"""
+# ===========================================
+# ENHANCED VISUALIZATION ENGINE v3.4.0
+# ===========================================
+
+class VisualizationEngine:
+ """Enhanced visualization engine with all visualizations working"""
def __init__(self):
- # Enterprise-scale constants
- self.BASE_REVENUE_PER_MINUTE = 5000.0 # $5K/min for enterprise
- self.BASE_USERS = 10000 # 10K active users
-
- def calculate_impact(self, scenario: Dict[str, Any]) -> Dict[str, Any]:
- """Calculate business impact for demo scenarios"""
- revenue_at_risk = scenario.get("revenue_at_risk", 0)
- users_impacted = scenario.get("users_impacted", 0)
+ self.performance_data = deque(maxlen=100)
+ self.incident_history = []
+ self.color_palette = px.colors.qualitative.Set3
- if revenue_at_risk > 1000000:
- severity = "🚨 CRITICAL"
- impact_color = "#ff4444"
- elif revenue_at_risk > 500000:
- severity = "⚠️ HIGH"
- impact_color = "#ffaa00"
- elif revenue_at_risk > 100000:
- severity = "📈 MEDIUM"
- impact_color = "#ffdd00"
- else:
- severity = "✅ LOW"
- impact_color = "#44ff44"
+ def create_performance_radar(self, metrics: Dict[str, float]) -> go.Figure:
+ """Create performance radar chart"""
+ categories = list(metrics.keys())
+ values = list(metrics.values())
- return {
- "revenue_at_risk": f"${revenue_at_risk:,.0f}",
- "users_impacted": f"{users_impacted:,}",
- "severity": severity,
- "impact_color": impact_color,
- "time_to_resolution": f"{scenario.get('time_to_resolve', 2.3):.1f} min",
- "auto_heal_possible": scenario.get("auto_heal_possible", True),
- }
-
-# ============================================================================
-# RAG GRAPH VISUALIZATION (Based on v3_reliability.py)
-# ============================================================================
-
-class RAGGraphVisualizer:
- """Visualize RAG graph memory growth"""
-
- def __init__(self):
- self.incidents = []
- self.outcomes = []
- self.edges = []
+ fig = go.Figure(data=go.Scatterpolar(
+ r=values + [values[0]],
+ theta=categories + [categories[0]],
+ fill='toself',
+ fillcolor='rgba(34, 163, 192, 0.3)',
+ line=dict(color='rgba(34, 163, 192, 0.8)'),
+ name="Performance"
+ ))
- def add_incident(self, component: str, severity: str):
- """Add an incident to the graph"""
- incident_id = f"inc_{len(self.incidents)}"
- self.incidents.append({
- "id": incident_id,
- "component": component,
- "severity": severity,
- "timestamp": time.time(),
- })
- return incident_id
-
- def add_outcome(self, incident_id: str, success: bool, action: str):
- """Add an outcome to the graph"""
- outcome_id = f"out_{len(self.outcomes)}"
- self.outcomes.append({
- "id": outcome_id,
- "incident_id": incident_id,
- "success": success,
- "action": action,
- "timestamp": time.time(),
- })
+ fig.update_layout(
+ polar=dict(
+ radialaxis=dict(
+ visible=True,
+ range=[0, 100],
+ gridcolor='rgba(200, 200, 200, 0.3)'
+ )),
+ showlegend=True,
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
+ height=400
+ )
- # Add edge
- self.edges.append({
- "source": incident_id,
- "target": outcome_id,
- "type": "resolved" if success else "failed",
- })
- return outcome_id
+ return fig
- def get_graph_figure(self):
- """Create Plotly figure of RAG graph"""
- if not self.incidents:
- # Return empty figure with message
+ def create_heatmap_timeline(self, incidents: List[Dict]) -> go.Figure:
+ """Create incident severity heatmap timeline - FIXED VERSION"""
+ if not incidents:
+ # Create empty figure with proper message
fig = go.Figure()
fig.update_layout(
- title="🧠 RAG Graph Memory - Learning from Incidents",
+ title="No Incident Data Available",
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
+ height=300,
xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
yaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
- plot_bgcolor="white",
- height=500,
- annotations=[dict(
- text="No incidents recorded yet. Try a scenario!",
- xref="paper", yref="paper",
- x=0.5, y=0.5, showarrow=False,
- font=dict(size=16, color="gray")
- )]
+ annotations=[
+ dict(
+ text="No incidents to display",
+ xref="paper", yref="paper",
+ x=0.5, y=0.5,
+ showarrow=False,
+ font=dict(size=14, color="gray")
+ )
+ ]
)
return fig
- # Prepare node data
- nodes = []
- node_colors = []
- node_sizes = []
-
- # Add incident nodes
- for inc in self.incidents:
- nodes.append({
- "x": random.random(),
- "y": random.random(),
- "label": f"{inc['component']}\n{inc['severity']}",
- "id": inc["id"],
- "type": "incident",
- })
- node_colors.append("#ff6b6b" if inc["severity"] == "critical" else "#ffa726")
- node_sizes.append(30)
+ # Prepare data for heatmap
+ hours = list(range(24))
+ services = sorted(list(set(inc['service'] for inc in incidents if 'service' in inc)))
- # Add outcome nodes
- for out in self.outcomes:
- nodes.append({
- "x": random.random() + 0.5, # Shift right
- "y": random.random(),
- "label": f"{out['action']}\n{'✅' if out['success'] else '❌'}",
- "id": out["id"],
- "type": "outcome",
- })
- node_colors.append("#4caf50" if out["success"] else "#f44336")
- node_sizes.append(20)
+ if not services:
+ services = ["Service A", "Service B", "Service C", "Service D", "Service E"]
- # Create figure
- fig = go.Figure()
+ # Create severity matrix
+ severity_matrix = np.zeros((len(services), len(hours)))
- # Add edges
- for edge in self.edges:
- source = next((n for n in nodes if n["id"] == edge["source"]), None)
- target = next((n for n in nodes if n["id"] == edge["target"]), None)
-
- if source and target:
- fig.add_trace(go.Scatter(
- x=[source["x"], target["x"]],
- y=[source["y"], target["y"]],
- mode="lines",
- line=dict(
- color="#888888",
- width=2,
- dash="dash" if edge["type"] == "failed" else "solid"
- ),
- hoverinfo="none",
- showlegend=False,
- ))
+ for inc in incidents:
+ if 'service' in inc and 'hour' in inc:
+ try:
+ service_idx = services.index(inc['service'])
+ hour_idx = int(inc['hour']) % 24
+ severity = inc.get('severity', 1)
+ severity_matrix[service_idx, hour_idx] = max(
+ severity_matrix[service_idx, hour_idx], severity
+ )
+ except (ValueError, IndexError):
+ continue
- # Add nodes
- fig.add_trace(go.Scatter(
- x=[n["x"] for n in nodes],
- y=[n["y"] for n in nodes],
- mode="markers+text",
- marker=dict(
- size=node_sizes,
- color=node_colors,
- line=dict(color="white", width=2)
+ # Create heatmap with corrected colorbar configuration
+ fig = go.Figure(data=go.Heatmap(
+ z=severity_matrix,
+ x=hours,
+ y=services,
+ colorscale='RdYlGn_r', # Red for high severity, green for low
+ showscale=True,
+ hoverongaps=False,
+ colorbar=dict(
+ title=dict(
+ text="Severity Level",
+ side="right"
+ ),
+ titleside="right", # This is deprecated but kept for compatibility
+ tickvals=[0, 1, 2, 3],
+ ticktext=["None", "Low", "Medium", "High"],
+ len=0.8,
+ thickness=15
),
- text=[n["label"] for n in nodes],
- textposition="top center",
- hovertext=[f"Type: {n['type']}" for n in nodes],
- hoverinfo="text",
- showlegend=False,
+ hovertemplate=(
+ "Service: %{y}
"
+ "Hour: %{x}:00
"
+ "Severity: %{z}
"
+ ""
+ )
))
- # Update layout
fig.update_layout(
- title="🧠 RAG Graph Memory - Learning from Incidents",
- showlegend=False,
- xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
- yaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
- plot_bgcolor="white",
- height=500,
+ title="Incident Severity Heatmap (24h)",
+ xaxis_title="Hour of Day",
+ yaxis_title="Service",
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
+ height=400,
+ xaxis=dict(
+ tickmode='array',
+ tickvals=list(range(0, 24, 3)),
+ ticktext=[f"{h:02d}:00" for h in range(0, 24, 3)]
+ ),
+ yaxis=dict(
+ autorange="reversed" # Reverse so Service A is at top
+ )
)
return fig
- def get_stats(self):
- """Get graph statistics"""
- successful_outcomes = sum(1 for o in self.outcomes if o["success"])
+ def create_stream_graph(self, metrics_history: List[Dict]) -> go.Figure:
+ """Create streaming metrics visualization"""
+ if not metrics_history:
+ return self._create_empty_figure("No metrics history available")
- return {
- "incident_nodes": len(self.incidents),
- "outcome_nodes": len(self.outcomes),
- "edges": len(self.edges),
- "success_rate": f"{(successful_outcomes / len(self.outcomes) * 100):.1f}%" if self.outcomes else "0%",
- "patterns_learned": len(self.outcomes) // 3, # Rough estimate
- }
-
-# ============================================================================
-# PREDICTIVE ANALYTICS (Based on predictive.py)
-# ============================================================================
-
-class PredictiveVisualizer:
- """Visualize predictive analytics"""
-
- def __init__(self):
- self.predictions = []
+ df = pd.DataFrame(metrics_history[-50:]) # Show last 50 data points
- def add_prediction(self, metric: str, current_value: float, predicted_value: float,
- time_to_threshold: Optional[float] = None):
- """Add a prediction"""
- self.predictions.append({
- "metric": metric,
- "current": current_value,
- "predicted": predicted_value,
- "time_to_threshold": time_to_threshold,
- "timestamp": time.time(),
- "predicted_at": datetime.datetime.now().strftime("%H:%M:%S"),
- })
-
- def get_predictive_timeline(self):
- """Create predictive timeline visualization"""
- if not self.predictions:
- # Return empty figure with message
- fig = go.Figure()
- fig.update_layout(
- title="🔮 Predictive Analytics Timeline",
- xaxis_title="Time",
- yaxis_title="Metric Value",
- height=400,
- plot_bgcolor="white",
- annotations=[dict(
- text="No predictions yet. Try a scenario!",
- xref="paper", yref="paper",
- x=0.5, y=0.5, showarrow=False,
- font=dict(size=14, color="gray")
- )]
- )
- return fig
+ fig = go.Figure()
- # Create timeline data - ensure we have valid data
- valid_predictions = []
- for p in self.predictions[-10:]: # Last 10 predictions
- if isinstance(p.get("current"), (int, float)) and isinstance(p.get("predicted"), (int, float)):
- valid_predictions.append(p)
+ # Add each metric as a separate trace
+ colors = px.colors.qualitative.Set3
+ for idx, column in enumerate(df.columns):
+ if column != 'timestamp':
+ fig.add_trace(go.Scatter(
+ x=df['timestamp'],
+ y=df[column],
+ mode='lines+markers',
+ name=column,
+ line=dict(color=colors[idx % len(colors)], width=2),
+ marker=dict(size=4)
+ ))
- if not valid_predictions:
- # Return empty figure
- fig = go.Figure()
- fig.update_layout(
- title="🔮 Predictive Analytics Timeline",
- height=400,
- annotations=[dict(
- text="Waiting for prediction data...",
- xref="paper", yref="paper",
- x=0.5, y=0.5, showarrow=False
- )]
+ fig.update_layout(
+ title="Real-time Metrics Stream",
+ xaxis_title="Time",
+ yaxis_title="Value",
+ hovermode='x unified',
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
+ height=400,
+ legend=dict(
+ yanchor="top",
+ y=0.99,
+ xanchor="left",
+ x=0.01
)
- return fig
+ )
- df = pd.DataFrame(valid_predictions)
+ return fig
+
+ def create_predictive_timeline(self, incidents: List[Dict]) -> go.Figure:
+ """Create predictive analytics timeline"""
+ if not incidents:
+ return self._create_empty_figure("No incident data for prediction")
+
+ # Prepare timeline data
+ timeline_data = []
+ for inc in incidents:
+ timeline_data.append({
+ 'timestamp': inc.get('timestamp', datetime.datetime.now()),
+ 'severity': inc.get('severity', 1),
+ 'service': inc.get('service', 'Unknown'),
+ 'type': 'Actual'
+ })
+
+ # Add predicted incidents
+ now = datetime.datetime.now()
+ for i in range(1, 6):
+ timeline_data.append({
+ 'timestamp': now + datetime.timedelta(hours=i),
+ 'severity': random.randint(1, 3),
+ 'service': random.choice(['API Gateway', 'Database', 'Cache', 'Auth Service']),
+ 'type': 'Predicted'
+ })
+
+ df = pd.DataFrame(timeline_data)
+ df['timestamp'] = pd.to_datetime(df['timestamp'])
+ df = df.sort_values('timestamp')
fig = go.Figure()
- # Add current values
+ # Add actual incidents
+ actual_df = df[df['type'] == 'Actual']
fig.add_trace(go.Scatter(
- x=df["predicted_at"],
- y=df["current"],
- mode="lines+markers",
- name="Current",
- line=dict(color="#4caf50", width=3),
- marker=dict(size=10),
+ x=actual_df['timestamp'],
+ y=actual_df['severity'],
+ mode='markers',
+ name='Actual',
+ marker=dict(
+ color='red',
+ size=15,
+ symbol='circle',
+ line=dict(width=2, color='darkred')
+ ),
+ text=actual_df['service'],
+ hovertemplate="%{text}
Time: %{x}
Severity: %{y}"
+ ))
+
+ # Add predicted incidents
+ pred_df = df[df['type'] == 'Predicted']
+ fig.add_trace(go.Scatter(
+ x=pred_df['timestamp'],
+ y=pred_df['severity'],
+ mode='markers',
+ name='Predicted',
+ marker=dict(
+ color='orange',
+ size=15,
+ symbol='diamond',
+ line=dict(width=2, color='darkorange')
+ ),
+ text=pred_df['service'],
+ hovertemplate="%{text}
Time: %{x}
Severity: %{y}"
))
- # Add predicted values
+ # Add trend line
fig.add_trace(go.Scatter(
- x=df["predicted_at"],
- y=df["predicted"],
- mode="lines+markers",
- name="Predicted",
- line=dict(color="#ff9800", width=2, dash="dash"),
- marker=dict(size=8),
+ x=df['timestamp'],
+ y=np.convolve(df['severity'], np.ones(3)/3, mode='same'),
+ mode='lines',
+ name='Trend',
+ line=dict(color='blue', width=2, dash='dash'),
+ opacity=0.6
))
- # Update layout
fig.update_layout(
- title="🔮 Predictive Analytics Timeline",
+ title="Predictive Analytics Timeline",
xaxis_title="Time",
- yaxis_title="Metric Value",
- hovermode="x unified",
- plot_bgcolor="white",
+ yaxis_title="Incident Severity",
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
height=400,
+ hovermode='closest'
)
return fig
-
-# ============================================================================
-# ENTERPRISE MOCK SERVER (Based on enterprise code structure)
-# ============================================================================
-
-class MockEnterpriseServer:
- """Mock enterprise server showing full capabilities"""
- def __init__(self, license_key: str):
- self.license_key = license_key
- self.license_tier = self._get_license_tier(license_key)
- self.audit_trail = []
- self.learning_engine_active = True
- self.execution_stats = {
- "total_executions": 0,
- "successful_executions": 0,
- "autonomous_executions": 0,
- "approval_workflows": 0,
- "revenue_protected": 0.0,
- }
+ def create_rag_memory_viz(self, memory_graph: Dict) -> go.Figure:
+ """Create RAG graph memory visualization"""
+ if not memory_graph.get('nodes'):
+ return self._create_empty_figure("No memory data available")
- def _get_license_tier(self, license_key: str) -> str:
- """Determine license tier from key"""
- if "ENTERPRISE" in license_key:
- return "Enterprise"
- elif "PROFESSIONAL" in license_key:
- return "Professional"
- elif "TRIAL" in license_key:
- return "Trial"
- return "Starter"
-
- async def execute_healing(self, healing_intent: Dict[str, Any], mode: str = "autonomous") -> Dict[str, Any]:
- """Mock enterprise execution"""
- execution_id = f"exec_{uuid.uuid4().hex[:16]}"
- start_time = time.time()
+ # Create network graph
+ nodes = memory_graph['nodes']
+ edges = memory_graph.get('edges', [])
- # Simulate execution time
- await asyncio.sleep(random.uniform(0.5, 2.0))
+ node_x = []
+ node_y = []
+ node_text = []
+ node_size = []
+ node_color = []
- # Determine success based on confidence
- confidence = healing_intent.get("confidence", 0.85)
- success = random.random() < confidence
+ # Position nodes in a circular layout
+ n_nodes = len(nodes)
+ for i, node in enumerate(nodes):
+ angle = 2 * np.pi * i / n_nodes
+ radius = 1.0
+ node_x.append(radius * np.cos(angle))
+ node_y.append(radius * np.sin(angle))
+ node_text.append(f"{node['type']}: {node['id'][:8]}")
+ node_size.append(15 + (node.get('importance', 1) * 10))
+ node_color.append(node.get('color_idx', i % 12))
- # Calculate simulated impact
- revenue_protected = random.randint(50000, 500000)
+ # Create edge traces
+ edge_x = []
+ edge_y = []
- # Update stats
- self.execution_stats["total_executions"] += 1
- if success:
- self.execution_stats["successful_executions"] += 1
- self.execution_stats["revenue_protected"] += revenue_protected
+ for edge in edges:
+ if edge['source'] < n_nodes and edge['target'] < n_nodes:
+ edge_x.extend([node_x[edge['source']], node_x[edge['target']], None])
+ edge_y.extend([node_y[edge['source']], node_y[edge['target']], None])
- if mode == "autonomous":
- self.execution_stats["autonomous_executions"] += 1
- elif mode == "approval":
- self.execution_stats["approval_workflows"] += 1
+ fig = go.Figure()
- # Record audit
- audit_entry = {
- "audit_id": f"audit_{uuid.uuid4().hex[:8]}",
- "timestamp": datetime.datetime.now().isoformat(),
- "action": healing_intent["action"],
- "component": healing_intent["component"],
- "mode": mode,
- "success": success,
- "revenue_protected": revenue_protected,
- "execution_time": time.time() - start_time,
- "license_tier": self.license_tier,
- }
- self.audit_trail.append(audit_entry)
+ # Add edges
+ if edge_x:
+ fig.add_trace(go.Scatter(
+ x=edge_x, y=edge_y,
+ mode='lines',
+ line=dict(color='rgba(100, 100, 100, 0.3)', width=1),
+ hoverinfo='none',
+ showlegend=False
+ ))
- return {
- "execution_id": execution_id,
- "success": success,
- "message": f"✅ Successfully executed {healing_intent['action']} on {healing_intent['component']}" if success
- else f"⚠️ Execution partially failed for {healing_intent['action']}",
- "revenue_protected": revenue_protected,
- "execution_time": time.time() - start_time,
- "mode": mode,
- "license_tier": self.license_tier,
- "audit_id": audit_entry["audit_id"],
- "learning_recorded": self.learning_engine_active and success,
- }
+ # Add nodes
+ fig.add_trace(go.Scatter(
+ x=node_x, y=node_y,
+ mode='markers+text',
+ marker=dict(
+ size=node_size,
+ color=node_color,
+ colorscale='Viridis',
+ line=dict(color='white', width=2)
+ ),
+ text=node_text,
+ textposition="top center",
+ hoverinfo='text',
+ name='Memory Nodes'
+ ))
+
+ fig.update_layout(
+ title="RAG Graph Memory Visualization",
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
+ height=400,
+ showlegend=False,
+ xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
+ yaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
+ margin=dict(l=20, r=20, t=40, b=20)
+ )
+
+ return fig
- def generate_compliance_report(self, standard: str = "SOC2") -> Dict[str, Any]:
- """Generate mock compliance report"""
- return {
- "report_id": f"compliance_{uuid.uuid4().hex[:8]}",
- "standard": standard,
- "generated_at": datetime.datetime.now().isoformat(),
- "period": "last_30_days",
- "findings": {
- "audit_trail_complete": True,
- "access_controls_enforced": True,
- "data_encrypted": True,
- "incident_response_documented": True,
- "sla_compliance": "99.95%",
+ def _create_empty_figure(self, message: str) -> go.Figure:
+ """Create an empty figure with a message"""
+ fig = go.Figure()
+ fig.update_layout(
+ paper_bgcolor='rgba(0,0,0,0)',
+ plot_bgcolor='rgba(0,0,0,0)',
+ height=300,
+ xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
+ yaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
+ annotations=[
+ dict(
+ text=message,
+ xref="paper", yref="paper",
+ x=0.5, y=0.5,
+ showarrow=False,
+ font=dict(size=14, color="gray")
+ )
+ ]
+ )
+ return fig
+
+# ===========================================
+# INCIDENT SCENARIOS DATABASE
+# ===========================================
+
+class IncidentScenarios:
+ """Enhanced incident scenarios with business impact"""
+
+ SCENARIOS = {
+ "database_connection_pool_exhaustion": {
+ "name": "Database Connection Pool Exhaustion",
+ "description": "Database connection pool exhausted due to connection leaks, causing API timeouts and user failures.",
+ "severity": "HIGH",
+ "services_affected": ["API Gateway", "User Service", "Payment Service"],
+ "current_metrics": {
+ "Database Connections": 98,
+ "API Latency (p95)": 2450,
+ "Error Rate": 15.2,
+ "Throughput": 1250,
+ "CPU Utilization": 85
},
- "summary": f"✅ {standard} compliance requirements fully met",
- "estimated_audit_cost_savings": "$150,000",
+ "business_impact": {
+ "affected_users": "15,000",
+ "revenue_loss_per_hour": "$4,200",
+ "customer_satisfaction": "-25%",
+ "recovery_time": "45 minutes",
+ "total_impact": "$3,150"
+ },
+ "oss_recommendation": "Increase connection pool size from 100 to 200, implement connection timeout of 30s, and add connection leak detection.",
+ "enterprise_actions": [
+ "Auto-scale database connection pool from 100 to 200",
+ "Implement connection timeout (30s)",
+ "Deploy connection leak detection",
+ "Rollback if no improvement in 5 minutes"
+ ],
+ "execution_results": {
+ "connection_pool_increased": True,
+ "timeout_implemented": True,
+ "leak_detection_deployed": True,
+ "recovery_time": "8 minutes",
+ "cost_saved": "$2,800"
+ }
+ },
+ "api_rate_limit_exceeded": {
+ "name": "API Rate Limit Exceeded",
+ "description": "Global API rate limit exceeded causing 429 errors for all external clients.",
+ "severity": "MEDIUM",
+ "services_affected": ["API Gateway", "External API"],
+ "current_metrics": {
+ "429 Error Rate": 42.5,
+ "Successful Requests": 58.3,
+ "API Latency": 120,
+ "Queue Depth": 1250,
+ "Client Satisfaction": 65
+ },
+ "business_impact": {
+ "affected_partners": "8",
+ "revenue_loss_per_hour": "$1,800",
+ "partner_sla_violations": "3",
+ "recovery_time": "30 minutes",
+ "total_impact": "$900"
+ },
+ "oss_recommendation": "Increase global rate limit by 50%, implement per-client quotas, and add automatic throttling.",
+ "enterprise_actions": [
+ "Increase global rate limit from 10k to 15k RPM",
+ "Implement per-client quotas",
+ "Deploy intelligent throttling",
+ "Notify affected partners"
+ ]
+ },
+ "cache_miss_storm": {
+ "name": "Cache Miss Storm",
+ "description": "Redis cluster experiencing 80% cache miss rate due to key eviction and invalid patterns.",
+ "severity": "HIGH",
+ "services_affected": ["Product Catalog", "Recommendation Engine", "Search Service"],
+ "current_metrics": {
+ "Cache Hit Rate": 18.5,
+ "Database Load": 92,
+ "Response Time": 1850,
+ "Cache Memory Usage": 95,
+ "Eviction Rate": 125
+ },
+ "business_impact": {
+ "affected_users": "45,000",
+ "revenue_loss_per_hour": "$8,500",
+ "page_load_time": "+300%",
+ "recovery_time": "60 minutes",
+ "total_impact": "$8,500"
+ },
+ "oss_recommendation": "Increase cache memory, implement cache warming, optimize key patterns, and add circuit breaker.",
+ "enterprise_actions": [
+ "Scale Redis cluster memory by 2x",
+ "Deploy cache warming service",
+ "Optimize key patterns",
+ "Implement circuit breaker"
+ ]
+ },
+ "microservice_cascading_failure": {
+ "name": "Microservice Cascading Failure",
+ "description": "Order service failure causing cascading failures in payment, inventory, and notification services.",
+ "severity": "CRITICAL",
+ "services_affected": ["Order Service", "Payment Service", "Inventory Service", "Notification Service"],
+ "current_metrics": {
+ "Order Failure Rate": 68.2,
+ "Circuit Breakers Open": 4,
+ "Retry Storm Intensity": 425,
+ "Error Propagation": 85,
+ "System Stability": 15
+ },
+ "business_impact": {
+ "affected_users": "75,000",
+ "revenue_loss_per_hour": "$25,000",
+ "abandoned_carts": "12,500",
+ "recovery_time": "90 minutes",
+ "total_impact": "$37,500"
+ },
+ "oss_recommendation": "Implement bulkheads, circuit breakers, retry with exponential backoff, and graceful degradation.",
+ "enterprise_actions": [
+ "Isolate order service with bulkheads",
+ "Implement circuit breakers",
+ "Deploy retry with exponential backoff",
+ "Enable graceful degradation mode"
+ ]
+ },
+ "memory_leak_in_production": {
+ "name": "Memory Leak in Production",
+ "description": "Java service memory leak causing gradual performance degradation and eventual OOM crashes.",
+ "severity": "HIGH",
+ "services_affected": ["User Profile Service", "Session Service"],
+ "current_metrics": {
+ "Memory Usage": 96,
+ "GC Pause Time": 4500,
+ "Request Latency": 3200,
+ "Error Rate": 28.5,
+ "Restart Frequency": 12
+ },
+ "business_impact": {
+ "affected_users": "25,000",
+ "revenue_loss_per_hour": "$5,500",
+ "session_loss": "8,500",
+ "recovery_time": "75 minutes",
+ "total_impact": "$6,875"
+ },
+ "oss_recommendation": "Increase heap size, implement memory leak detection, add health checks, and schedule rolling restart.",
+ "enterprise_actions": [
+ "Increase JVM heap from 4GB to 8GB",
+ "Deploy memory leak detection",
+ "Implement proactive health checks",
+ "Execute rolling restart"
+ ]
}
+ }
+
+ @classmethod
+ def get_scenario(cls, scenario_id: str) -> Dict[str, Any]:
+ """Get scenario by ID"""
+ return cls.SCENARIOS.get(scenario_id, {
+ "name": "Unknown Scenario",
+ "description": "No scenario selected",
+ "severity": "UNKNOWN",
+ "services_affected": [],
+ "current_metrics": {},
+ "business_impact": {},
+ "oss_recommendation": "Please select a scenario",
+ "enterprise_actions": []
+ })
+
+ @classmethod
+ def get_all_scenarios(cls) -> List[Dict[str, str]]:
+ """Get all available scenarios"""
+ return [
+ {"id": key, "name": value["name"], "severity": value["severity"]}
+ for key, value in cls.SCENARIOS.items()
+ ]
-# ============================================================================
-# LIVE DASHBOARD
-# ============================================================================
+# ===========================================
+# OSS & ENTERPRISE MODELS
+# ===========================================
-class LiveDashboard:
- """Live executive dashboard"""
+class OSSModel:
+ """OSS Edition Model (Advisory Only)"""
def __init__(self):
- self.total_revenue_protected = 0.0
- self.total_incidents = 0
- self.auto_healed = 0
- self.engineer_hours_saved = 0
- self.start_time = time.time()
-
- def add_execution_result(self, revenue_protected: float, auto_healed: bool = True):
- """Add execution result to dashboard"""
- self.total_revenue_protected += revenue_protected
- self.total_incidents += 1
- if auto_healed:
- self.auto_healed += 1
- self.engineer_hours_saved += 2.5 # 2.5 hours saved per auto-healed incident
+ self.healing_intent = HealingIntent() if OSS_AVAILABLE else None
- def get_dashboard_data(self):
- """Get current dashboard data"""
- uptime_hours = (time.time() - self.start_time) / 3600
-
- return {
- "revenue_protected": f"${self.total_revenue_protected:,.0f}",
- "total_incidents": self.total_incidents,
- "auto_healed": self.auto_healed,
- "auto_heal_rate": f"{(self.auto_healed / self.total_incidents * 100):.1f}%" if self.total_incidents > 0 else "0%",
- "engineer_hours_saved": f"{self.engineer_hours_saved:.0f} hours",
- "avg_mttr": "2.3 minutes",
- "industry_mttr": "45 minutes",
- "improvement": "94% faster",
- "uptime": f"{uptime_hours:.1f} hours",
- "roi": "5.2×",
- }
-
-# ============================================================================
-# ENHANCED VISUALIZATION ENGINE - FINAL FIXED VERSION
-# ============================================================================
+ def analyze_and_recommend(self, scenario: Dict) -> Dict[str, Any]:
+ """Analyze incident and provide recommendations"""
+ try:
+ if self.healing_intent:
+ intent = self.healing_intent.create_intent(
+ issue_type=scenario.get("name", "Unknown"),
+ symptoms=scenario.get("description", ""),
+ urgency="HIGH" if scenario.get("severity") in ["HIGH", "CRITICAL"] else "MEDIUM"
+ )
+ return {
+ "analysis": "✅ Analysis complete",
+ "recommendations": scenario.get("oss_recommendation", "No specific recommendations"),
+ "healing_intent": intent,
+ "estimated_impact": "30-60 minute resolution with manual intervention"
+ }
+ else:
+ return {
+ "analysis": "⚠️ OSS Model Simulated",
+ "recommendations": scenario.get("oss_recommendation", "No specific recommendations"),
+ "healing_intent": "create_scale_out_intent" if "connection" in scenario.get("name", "").lower() else "create_restart_intent",
+ "estimated_impact": "Simulated: 45 minute resolution"
+ }
+ except Exception as e:
+ logger.error(f"OSS analysis failed: {e}")
+ return {
+ "analysis": "❌ Analysis failed",
+ "recommendations": "Please check system configuration",
+ "healing_intent": "create_rollback_intent",
+ "estimated_impact": "Unknown"
+ }
-class EnhancedVisualizationEngine:
- """Enhanced visualization engine - FINAL FIXED VERSION"""
+class EnterpriseModel:
+ """Enterprise Edition Model (Autonomous Execution)"""
- @staticmethod
- def create_animated_radar_chart(metrics: Dict[str, float], title: str = "Performance Radar"):
- """Create animated radar chart - GUARANTEED WORKING"""
+ def __init__(self):
+ self.execution_history = []
+ self.learning_engine = LearningEngine()
+
+ def execute_healing(self, scenario: Dict, approval_required: bool = True) -> Dict[str, Any]:
+ """Execute healing actions with optional approval"""
try:
- # Always create a valid radar chart
- if not metrics:
- metrics = {
- "Latency": 85.0,
- "Error Rate": 22.0,
- "CPU Usage": 95.0,
- "Memory": 88.0,
- "Throughput": 65.0,
- "Availability": 92.0
- }
+ execution_id = str(uuid.uuid4())[:8]
+ timestamp = datetime.datetime.now()
- # Convert to list format
- categories = list(metrics.keys())[:6]
- values = []
- for cat in categories:
- val = metrics.get(cat, 50)
- if isinstance(val, (int, float)):
- values.append(float(val))
- else:
- values.append(50.0) # Default
+ actions = scenario.get("enterprise_actions", [])
+ execution_results = scenario.get("execution_results", {})
- # Create radar chart
- fig = go.Figure()
+ if approval_required:
+ status = "✅ Approved and Executed"
+ else:
+ status = "✅ Auto-Executed"
- fig.add_trace(go.Scatterpolar(
- r=values,
- theta=categories,
- fill='toself',
- name='Current',
- line_color='#4CAF50',
- opacity=0.8,
- marker=dict(size=8)
- ))
-
- # Add target line
- target_values = [v * 1.2 for v in values]
- fig.add_trace(go.Scatterpolar(
- r=target_values,
- theta=categories,
- fill='toself',
- name='Target',
- line_color='#2196F3',
- opacity=0.3
- ))
+ execution_record = {
+ "id": execution_id,
+ "timestamp": timestamp,
+ "scenario": scenario.get("name"),
+ "actions": actions,
+ "results": execution_results,
+ "status": status,
+ "business_impact": scenario.get("business_impact", {})
+ }
- fig.update_layout(
- polar=dict(
- radialaxis=dict(
- visible=True,
- range=[0, 100]
- )
- ),
- showlegend=True,
- title=dict(
- text=title,
- x=0.5,
- font=dict(size=16)
- ),
- height=400,
- margin=dict(l=80, r=80, t=60, b=60),
- )
+ self.execution_history.append(execution_record)
+ self.learning_engine.record_execution(execution_record)
- return fig
+ return {
+ "execution_id": execution_id,
+ "timestamp": timestamp.isoformat(),
+ "actions_executed": len(actions),
+ "results": execution_results,
+ "status": status,
+ "learning_applied": True,
+ "compliance_logged": True
+ }
- except:
- # Ultimate fallback
- fig = go.Figure()
- fig.add_trace(go.Bar(
- x=['Latency', 'Errors', 'CPU', 'Memory', 'Throughput'],
- y=[85, 22, 95, 88, 65],
- marker_color='#4CAF50'
- ))
- fig.update_layout(
- title=title,
- height=400,
- showlegend=False
- )
- return fig
+ except Exception as e:
+ logger.error(f"Enterprise execution failed: {e}")
+ return {
+ "execution_id": "ERROR",
+ "timestamp": datetime.datetime.now().isoformat(),
+ "actions_executed": 0,
+ "results": {},
+ "status": "❌ Execution Failed",
+ "learning_applied": False,
+ "compliance_logged": False
+ }
+
+class LearningEngine:
+ """Continuous learning engine for Enterprise edition"""
- @staticmethod
- def create_heatmap_timeline(scenarios: List[Dict[str, Any]]):
- """Create heatmap timeline - SIMPLIFIED GUARANTEED WORKING"""
- # Always return a working heatmap with predefined data
- scenario_names = [
- "Payment Crisis",
- "DB Exhaustion",
- "Memory Leak",
- "API Errors",
- "CDN Outage"
- ]
-
- # Data matrix (Revenue in $M, Users in K, Severity 1-3, Time in min)
- data = [
- [2.5, 45.0, 3, 2.3], # Payment Crisis
- [1.2, 12.0, 2, 8.5], # DB Exhaustion
- [0.25, 65.0, 1, 0.8], # Memory Leak
- [0.15, 8.0, 1, 45.0], # API Errors
- [3.5, 200.0, 3, 15.5] # CDN Outage
- ]
-
- # Labels for Y-axis
- y_labels = [
- "Revenue ($M)",
- "Users (K)",
- "Severity",
- "Time (min)"
- ]
-
- # Create heatmap
- fig = go.Figure(data=go.Heatmap(
- z=data,
- x=scenario_names,
- y=y_labels,
- colorscale=[
- [0.0, '#4CAF50'], # Green
- [0.5, '#FFEB3B'], # Yellow
- [1.0, '#F44336'] # Red
- ],
- colorbar=dict(
- title="Impact Level",
- titleside="right"
- ),
- hoverongaps=False,
- hovertemplate='%{x}
%{y}: %{z}'
- ))
-
- fig.update_layout(
- title=dict(
- text="🔥 Incident Severity Heatmap",
- x=0.5,
- font=dict(size=16)
- ),
- xaxis_title="Incident Scenarios",
- yaxis_title="Impact Metrics",
- height=450,
- xaxis={'tickangle': 45},
- margin=dict(l=80, r=20, t=60, b=80)
- )
-
- return fig
+ def __init__(self):
+ self.patterns_learned = []
+ self.successful_resolutions = []
- @staticmethod
- def create_real_time_metrics_stream():
- """Create real-time streaming metrics - GUARANTEED WORKING"""
- # Generate time series data
- times = pd.date_range(start='now', periods=50, freq='1min')
- values = 90 + np.random.randn(50) * 5
-
- fig = go.Figure()
-
- fig.add_trace(go.Scatter(
- x=times,
- y=values,
- mode='lines',
- name='System Health',
- line=dict(
- color='#2196F3',
- width=3,
- ),
- fill='tozeroy',
- fillcolor='rgba(33, 150, 243, 0.1)',
- hovertemplate='Time: %{x|%H:%M}
Health: %{y:.1f}%'
- ))
-
- # Add threshold lines
- fig.add_hline(y=95, line_dash="dash", line_color="green",
- annotation_text="Optimal", annotation_position="right")
- fig.add_hline(y=85, line_dash="dash", line_color="orange",
- annotation_text="Warning", annotation_position="right")
- fig.add_hline(y=75, line_dash="dash", line_color="red",
- annotation_text="Critical", annotation_position="right")
-
- fig.update_layout(
- title=dict(
- text="📊 Real-time System Health Monitor",
- x=0.5,
- font=dict(size=16)
- ),
- xaxis=dict(
- title="Time",
- rangeslider=dict(visible=True),
- type="date",
- tickformat="%H:%M"
- ),
- yaxis=dict(
- title="Health Score (%)",
- range=[70, 100]
- ),
- height=420,
- showlegend=True,
- hovermode="x unified",
- margin=dict(l=60, r=20, t=60, b=60),
- )
-
- return fig
+ def record_execution(self, execution: Dict):
+ """Record execution for learning"""
+ if execution.get("status", "").startswith("✅"):
+ self.successful_resolutions.append(execution)
+
+ # Extract patterns
+ pattern = {
+ "scenario": execution["scenario"],
+ "actions": execution["actions"],
+ "effectiveness": random.uniform(0.7, 0.95),
+ "learned_at": datetime.datetime.now()
+ }
+ self.patterns_learned.append(pattern)
+
+ def get_insights(self) -> List[Dict]:
+ """Get learned insights"""
+ return self.patterns_learned[-5:] if self.patterns_learned else []
-# ============================================================================
-# EXPORT ENGINE
-# ============================================================================
+# ===========================================
+# ROI CALCULATOR
+# ===========================================
-class ExportEngine:
- """Handle export of reports, charts, and data"""
+class ROICalculator:
+ """Enhanced ROI calculator with business metrics"""
@staticmethod
- def export_roi_report_as_html(roi_data: Dict[str, Any]) -> str:
- """Export ROI report as HTML"""
-
- html = f"""
-
-
-
- ARF ROI Report - {datetime.datetime.now().strftime('%Y-%m-%d')}
-
-
-
-
-
- 📊 Executive Summary
-
-
Investment Payback: {roi_data.get('payback_period', 'N/A')}
- First Year ROI: {roi_data.get('first_year_roi', 'N/A')}
-
-
- 💰 Financial Metrics
-
- """
-
- # Add metric cards
- 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'),
- ]
+ def calculate_roi(incident_scenarios: List[Dict]) -> Dict[str, Any]:
+ """Calculate ROI based on incident scenarios"""
+ total_impact = 0
+ enterprise_savings = 0
+ incidents_resolved = 0
- for key, label in metrics_to_show:
- if key in roi_data:
- html += f"""
-
-
{label}
-
{roi_data[key]}
-
- """
-
- html += """
-
-
- 📈 Detailed Breakdown
-
- | Metric | Without ARF | With ARF | Improvement |
- """
+ for scenario in incident_scenarios:
+ if isinstance(scenario, dict) and scenario.get("business_impact"):
+ impact_str = scenario["business_impact"].get("total_impact", "$0")
+ try:
+ impact_value = float(impact_str.replace("$", "").replace(",", ""))
+ total_impact += impact_value
+
+ # Enterprise saves 70-90% of impact
+ savings_rate = random.uniform(0.7, 0.9)
+ enterprise_savings += impact_value * savings_rate
+ incidents_resolved += 1
+ except (ValueError, AttributeError):
+ continue
- # Add comparison table
- 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'),
- ]
+ if total_impact == 0:
+ total_impact = 25000 # Default for demo
+ enterprise_savings = total_impact * 0.82
+ incidents_resolved = 3
- for comp in comparisons:
- html += f"""
-
- | {comp[0]} |
- {comp[1]} |
- {comp[2]} |
- {comp[3]} |
-
- """
+ # Calculate ROI
+ enterprise_cost = 1200000 # Annual enterprise cost
+ annual_savings = enterprise_savings * 52 # Weekly incidents * 52 weeks
- html += f"""
-
-
-
-
-
- """
+ if enterprise_cost > 0:
+ roi_percentage = ((annual_savings - enterprise_cost) / enterprise_cost) * 100
+ else:
+ roi_percentage = 520 # 5.2x ROI default
- return html
-
-# ============================================================================
-# DEMO SCENARIOS - ENHANCED
-# ============================================================================
-
-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,
- },
- "oss_action": "scale_out",
- "enterprise_action": "autonomous_scale",
- "prediction": "Database crash predicted in 8.5 minutes",
- },
-
- "⚡ 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,
- },
- "oss_action": "restart_container",
- "enterprise_action": "approval_workflow",
- "prediction": "Cascading failure in 3.2 minutes",
- },
-
- "🔮 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,
- },
- "oss_action": "restart_container",
- "enterprise_action": "predictive_prevention",
- "prediction": "Outage prevented 17 minutes before crash",
- },
-
- "📈 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,
- },
- "oss_action": "rollback",
- "enterprise_action": "root_cause_analysis",
- "prediction": "Error rate will reach 35% in 22 minutes",
- },
-
- "🌐 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,
- },
- "oss_action": "failover_regions",
- "enterprise_action": "geo_load_balancing",
- "prediction": "Global outage spreading to 5 regions in 12 minutes",
- },
-}
+ return {
+ "total_annual_impact": f"${total_impact * 52:,.0f}",
+ "enterprise_annual_savings": f"${annual_savings:,.0f}",
+ "enterprise_annual_cost": f"${enterprise_cost:,.0f}",
+ "roi_percentage": f"{roi_percentage:.1f}%",
+ "roi_multiplier": f"{(annual_savings / enterprise_cost):.1f}×",
+ "incidents_resolved_annually": incidents_resolved * 52,
+ "avg_resolution_time_oss": "45 minutes",
+ "avg_resolution_time_enterprise": "8 minutes",
+ "savings_per_incident": f"${enterprise_savings/incidents_resolved if incidents_resolved > 0 else 0:,.0f}"
+ }
-# ============================================================================
-# MAIN DEMO UI - FINAL FIXED VERSION v3.4.0
-# ============================================================================
+# ===========================================
+# MAIN APPLICATION
+# ===========================================
-def create_enhanced_demo():
- """Create enhanced ultimate investor demo UI - FINAL FIXED VERSION v3.4.0"""
+class ARFUltimateInvestorDemo:
+ """Main application class for ARF Ultimate Investor Demo v3.4.0"""
- # Initialize enhanced components
- business_calc = BusinessImpactCalculator()
- rag_visualizer = RAGGraphVisualizer()
- predictive_viz = PredictiveVisualizer()
- live_dashboard = LiveDashboard()
- viz_engine = EnhancedVisualizationEngine()
- export_engine = ExportEngine()
- enterprise_servers = {}
+ def __init__(self):
+ self.viz_engine = VisualizationEngine()
+ self.incident_scenarios = IncidentScenarios()
+ self.oss_model = OSSModel()
+ self.enterprise_model = EnterpriseModel()
+ self.roi_calculator = ROICalculator()
+
+ # Initialize incident history for visualizations
+ self._init_incident_history()
- with gr.Blocks(title="🚀 ARF Ultimate Investor Demo v3.4.0") as demo:
- gr.Markdown("""
- # 🚀 Agentic Reliability Framework - Ultimate Investor Demo v3.4.0
- ### **From Cost Center to Profit Engine: 5.2× ROI with Autonomous Reliability**
+ def _init_incident_history(self):
+ """Initialize sample incident history for visualizations"""
+ services = ["API Gateway", "Database", "Cache", "Auth Service", "Payment Service"]
-
-
-
-
🎯 Enhanced Investor Demo v3.4.0
-
Experience the full spectrum: OSS (Free) ↔ Enterprise (Paid)
-
-
-
🚀 All visualizations working
-
📊 Professional analytics & export features
-
-
-
+ for i in range(20):
+ hour = random.randint(0, 23)
+ severity = random.choices([0, 1, 2, 3], weights=[0.3, 0.4, 0.2, 0.1])[0]
+
+ if severity > 0: # Only record actual incidents
+ self.viz_engine.incident_history.append({
+ "timestamp": datetime.datetime.now() - datetime.timedelta(hours=24-i),
+ "hour": hour,
+ "service": random.choice(services),
+ "severity": severity,
+ "type": random.choice(["latency", "error", "timeout", "crash"])
+ })
+
+ def create_demo_interface(self):
+ """Create the main Gradio interface"""
- *Watch as ARF transforms reliability from a $2M cost center to a $10M profit engine*
- """)
+ # CSS for professional styling
+ css = """
+ .gradio-container {
+ max-width: 1400px !important;
+ margin: 0 auto !important;
+ }
+ .dashboard-header {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ padding: 2rem;
+ border-radius: 10px;
+ margin-bottom: 2rem;
+ color: white;
+ }
+ .metric-card {
+ background: white;
+ padding: 1.5rem;
+ border-radius: 10px;
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+ margin-bottom: 1rem;
+ border-left: 4px solid #667eea;
+ }
+ .enterprise-card {
+ border-left: 4px solid #10b981;
+ }
+ .oss-card {
+ border-left: 4px solid #f59e0b;
+ }
+ .capability-table {
+ width: 100%;
+ border-collapse: collapse;
+ margin: 1rem 0;
+ }
+ .capability-table th, .capability-table td {
+ padding: 12px;
+ text-align: left;
+ border-bottom: 1px solid #e5e7eb;
+ }
+ .capability-table th {
+ background-color: #f9fafb;
+ font-weight: 600;
+ }
+ .success { color: #10b981; }
+ .warning { color: #f59e0b; }
+ .error { color: #ef4444; }
+ .info { color: #3b82f6; }
+ """
- # ================================================================
- # ENHANCED EXECUTIVE DASHBOARD TAB
- # ================================================================
- with gr.TabItem("🏢 Executive Dashboard"):
- gr.Markdown("""
- ## 📊 Real-Time Business Impact Dashboard
- **Live metrics showing ARF's financial impact in enterprise deployments**
- """)
-
- with gr.Row():
- with gr.Column(scale=1):
- revenue_protected = gr.Markdown("### 💰 Revenue Protected\n**$0**")
- with gr.Column(scale=1):
- auto_heal_rate = gr.Markdown("### ⚡ Auto-Heal Rate\n**0%**")
- with gr.Column(scale=1):
- mttr_improvement = gr.Markdown("### 🚀 MTTR Improvement\n**94% faster**")
- with gr.Column(scale=1):
- engineer_hours = gr.Markdown("### 👷 Engineer Hours Saved\n**0 hours**")
+ with gr.Blocks(css=css, theme=gr.themes.Soft()) as demo:
- # Real-time streaming metrics
- gr.Markdown("### 📈 Real-time System Health Monitor")
- real_time_metrics = gr.Plot(
- label="",
- )
-
- # Enhanced incident feed
- gr.Markdown("### 🔥 Live Incident Feed")
- incident_feed = gr.Dataframe(
- headers=["Time", "Service", "Impact", "Status", "Value Protected"],
- value=[],
- interactive=False,
- )
-
- # Top customers protected
- gr.Markdown("### 🏆 Top Customers Protected")
- 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,
- )
-
- # ================================================================
- # ENHANCED LIVE WAR ROOM TAB
- # ================================================================
- with gr.TabItem("🔥 Live War Room"):
- gr.Markdown("""
- ## 🔥 Multi-Incident War Room
- **Watch ARF handle 5+ simultaneous incidents across different services**
- """)
+ # ============ HEADER ============
+ with gr.Column(elem_classes="dashboard-header"):
+ gr.Markdown("""
+ # 🚀 Agentic Reliability Framework - Ultimate Investor Demo v3.4.0
+ ### From Cost Center to Profit Engine: 5.2× ROI with Autonomous Reliability
+
+ **🎯 Enhanced Investor Demo v3.4.0**
+ Experience the full spectrum: OSS (Free) ↔ Enterprise (Paid)
+
+ 🚀 **All visualizations working**
+ 📊 **Professional analytics & export features**
+
+ *Watch as ARF transforms reliability from a $2M cost center to a $10M profit engine*
+ """)
- with gr.Row():
- with gr.Column(scale=1):
- # Enhanced scenario selector
- 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,
- )
-
- # Visualization type selector
- viz_type = gr.Radio(
- choices=["Radar Chart", "Heatmap", "Stream"],
- value="Radar Chart",
- label="📊 Visualization Type",
- info="Choose how to visualize the metrics"
- )
-
- # Metrics display
- metrics_display = gr.JSON(
- label="📊 Current Metrics",
- value={},
- )
-
- # Business impact
- impact_display = gr.JSON(
- label="💰 Business Impact Analysis",
- value={},
- )
-
- # Action buttons
- with gr.Row():
- oss_action_btn = gr.Button("🤖 OSS: Analyze & Recommend", variant="secondary")
- enterprise_action_btn = gr.Button("🚀 Enterprise: Execute Healing", variant="primary")
-
- # Enterprise configuration
- 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"
- )
-
- execution_mode = gr.Radio(
- choices=["autonomous", "approval"],
- value="autonomous",
- label="⚙️ Execution Mode",
- info="How to execute the healing action"
- )
+ # ============ MAIN TABS ============
+ with gr.Tabs():
- with gr.Column(scale=2):
- # Enhanced results display with tabs
- with gr.Tabs():
- with gr.TabItem("🎯 Execution Results"):
- result_display = gr.JSON(
- label="",
- value={},
+ # ============ TAB 1: MULTI-INCIDENT WAR ROOM ============
+ with gr.TabItem("🔥 Multi-Incident War Room"):
+ with gr.Row():
+ with gr.Column(scale=2):
+ gr.Markdown("### 🎬 Select Incident Scenario")
+ scenario_dropdown = gr.Dropdown(
+ choices=[
+ ("Database Connection Pool Exhaustion", "database_connection_pool_exhaustion"),
+ ("API Rate Limit Exceeded", "api_rate_limit_exceeded"),
+ ("Cache Miss Storm", "cache_miss_storm"),
+ ("Microservice Cascading Failure", "microservice_cascading_failure"),
+ ("Memory Leak in Production", "memory_leak_in_production")
+ ],
+ label="Choose an enterprise incident scenario",
+ value="database_connection_pool_exhaustion"
)
-
- with gr.TabItem("📈 Performance Analysis"):
- performance_chart = gr.Plot(
- label="Performance Radar Chart",
+
+ gr.Markdown("### 📊 Visualization Type")
+ viz_type = gr.Radio(
+ choices=["Radar Chart", "Heatmap", "Stream"],
+ label="Choose how to visualize the metrics",
+ value="Radar Chart"
)
+
+ # Metrics display
+ gr.Markdown("### 📊 Current Metrics")
+ metrics_display = gr.JSON(label="Live Metrics", value={})
+
+ # Business Impact
+ gr.Markdown("### 💰 Business Impact Analysis")
+ business_impact = gr.JSON(label="Impact Analysis", value={})
- with gr.TabItem("🔥 Incident Heatmap"):
- incident_heatmap = gr.Plot(
- label="Incident Severity Heatmap",
- )
+ with gr.Column(scale=3):
+ # OSS Analysis
+ with gr.Group(elem_classes="oss-card"):
+ gr.Markdown("### 🤖 OSS: Analyze & Recommend")
+ oss_analyze_btn = gr.Button("🚀 Run OSS Analysis", variant="secondary")
+ oss_results = gr.JSON(label="OSS Analysis Results", value={})
+
+ # Enterprise Execution
+ with gr.Group(elem_classes="enterprise-card"):
+ gr.Markdown("### 🚀 Enterprise: Execute Healing")
+
+ with gr.Row():
+ approval_toggle = gr.Checkbox(
+ label="Require Manual Approval",
+ value=True,
+ info="Enterprise can auto-execute or wait for approval"
+ )
+ execute_btn = gr.Button("⚡ Execute Autonomous Healing", variant="primary")
+
+ enterprise_config = gr.JSON(
+ label="⚙️ Enterprise Configuration",
+ value={"approval_required": True, "compliance_mode": "strict"}
+ )
+
+ enterprise_results = gr.JSON(label="🎯 Execution Results", value={})
+
+ # Visualizations
+ visualization_output = gr.Plot(label="📈 Performance Analysis")
+ heatmap_output = gr.Plot(label="🔥 Incident Heatmap")
+
+ # ============ TAB 2: EXECUTIVE DASHBOARD ============
+ with gr.TabItem("🏢 Executive Dashboard"):
+ with gr.Row():
+ with gr.Column():
+ gr.Markdown("### 📊 Performance Overview")
+ performance_radar = gr.Plot()
+
+ gr.Markdown("### 🔮 Predictive Analytics")
+ predictive_timeline = gr.Plot()
+
+ with gr.Column():
+ gr.Markdown("### 🧠 Learning Engine Insights")
+ rag_memory_viz = gr.Plot()
+
+ gr.Markdown("### 💰 ROI Calculator")
+ roi_results = gr.JSON(value={})
+ calculate_roi_btn = gr.Button("📊 Calculate ROI", variant="primary")
+
+ # ============ TAB 3: CAPABILITY COMPARISON ============
+ with gr.TabItem("📊 Capability Matrix"):
+ gr.Markdown("""
+ ### 🚀 Ready to transform your reliability operations?
- # RAG Graph visualization
- rag_graph = gr.Plot(
- label="🧠 RAG Graph Memory Visualization",
- )
+ **Capability Comparison:**
- # Predictive Timeline
- predictive_timeline = gr.Plot(
- label="🔮 Predictive Analytics Timeline",
- )
+ | Capability | OSS Edition | Enterprise Edition |
+ |------------|-------------|-------------------|
+ | **Execution** | ❌ Advisory only | ✅ Autonomous + Approval |
+ | **Learning** | ❌ No learning | ✅ Continuous learning engine |
+ | **Compliance** | ❌ No audit trails | ✅ SOC2/GDPR/HIPAA compliant |
+ | **Storage** | ⚠️ In-memory only | ✅ Persistent (Neo4j + PostgreSQL) |
+ | **Support** | ❌ Community | ✅ 24/7 Enterprise support |
+ | **ROI** | ❌ None | ✅ 5.2× average first year ROI |
+
+ ---
+
+ ### 📞 Contact & Resources
+ 📧 **Email:** enterprise@petterjuan.com
+ 🌐 **Website:** [https://arf.dev](https://arf.dev)
+ 📚 **Documentation:** [https://docs.arf.dev](https://docs.arf.dev)
+ 💻 **GitHub:** [petterjuan/agentic-reliability-framework](https://github.com/petterjuan/agentic-reliability-framework)
+ """)
- # FIXED: Function to update scenario with enhanced visualization
- def update_scenario_enhanced(scenario_name, viz_type):
- scenario = ENTERPRISE_SCENARIOS.get(scenario_name, {})
-
- # Add to RAG graph
- if scenario:
- rag_visualizer.add_incident(
- component=scenario.get("component", "unknown"),
- severity="critical" if scenario.get("business_impact", {}).get("revenue_at_risk", 0) > 1000000 else "high"
- )
+ # ============ EVENT HANDLERS ============
+
+ def update_scenario_enhanced(scenario_id: str, viz_type: str):
+ """Update all displays based on selected scenario"""
+ scenario = self.incident_scenarios.get_scenario(scenario_id)
- # Get impact analysis
- impact_analysis = {}
- if scenario and "business_impact" in scenario:
- impact_analysis = business_calc.calculate_impact(scenario["business_impact"])
+ # Update metrics display
+ metrics = scenario.get("current_metrics", {})
+ business_impact = scenario.get("business_impact", {})
- # Get metrics
- scenario_metrics = scenario.get("metrics", {}) if scenario else {}
+ # Create visualization based on type
+ if viz_type == "Radar Chart":
+ viz = self.viz_engine.create_performance_radar(metrics)
+ elif viz_type == "Heatmap":
+ viz = self.viz_engine.create_heatmap_timeline(self.viz_engine.incident_history)
+ else: # Stream
+ viz = self.viz_engine.create_stream_graph([
+ {"timestamp": f"{i}:00", **{k: v + random.randint(-10, 10) for k, v in metrics.items()}}
+ for i in range(24)
+ ])
- # Select visualization based on type
- try:
- if viz_type == "Radar Chart":
- viz_fig = viz_engine.create_animated_radar_chart(
- scenario_metrics,
- f"Performance - {scenario_name[:20]}..."
- )
- elif viz_type == "Heatmap":
- viz_fig = viz_engine.create_heatmap_timeline([scenario] if scenario else [])
- else: # Stream
- viz_fig = viz_engine.create_real_time_metrics_stream()
- except:
- # Use default visualization if any error occurs
- viz_fig = viz_engine.create_real_time_metrics_stream()
+ # Update heatmap
+ incident_heatmap = self.viz_engine.create_heatmap_timeline(self.viz_engine.incident_history)
return {
- metrics_display: scenario_metrics,
- impact_display: impact_analysis,
- 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] if scenario else []),
- real_time_metrics: viz_engine.create_real_time_metrics_stream(),
+ metrics_display: metrics,
+ business_impact: business_impact,
+ visualization_output: viz,
+ heatmap_output: incident_heatmap
}
- # Function for OSS analysis
- async def oss_analysis(scenario_name):
- scenario = ENTERPRISE_SCENARIOS.get(scenario_name, {})
-
- return {
- result_display: {
- "status": "OSS_ADVISORY_COMPLETE",
- "action": scenario.get("oss_action", "unknown"),
- "component": scenario.get("component", "unknown"),
- "message": f"✅ OSS analysis recommends {scenario.get('oss_action')} for {scenario.get('component')}",
- "requires_enterprise": True,
- "confidence": 0.85,
- "enterprise_features_required": [
- "autonomous_execution",
- "learning_engine",
- "audit_trails",
- "compliance_reporting",
- ],
- "upgrade_url": "https://arf.dev/enterprise",
- }
- }
+ def run_oss_analysis(scenario_id: str):
+ """Run OSS analysis on selected scenario"""
+ scenario = self.incident_scenarios.get_scenario(scenario_id)
+ analysis = self.oss_model.analyze_and_recommend(scenario)
+ return {oss_results: analysis}
- # Function for Enterprise execution
- async def enterprise_execution(scenario_name, license_key, mode):
- scenario = ENTERPRISE_SCENARIOS.get(scenario_name, {})
-
- # Create or get enterprise server
- if license_key not in enterprise_servers:
- enterprise_servers[license_key] = MockEnterpriseServer(license_key)
-
- server = enterprise_servers[license_key]
+ def run_enterprise_execution(scenario_id: str, approval_required: bool):
+ """Execute enterprise healing actions"""
+ scenario = self.incident_scenarios.get_scenario(scenario_id)
+ results = self.enterprise_model.execute_healing(scenario, approval_required)
- # Create healing intent
- healing_intent = {
- "action": scenario.get("enterprise_action", "unknown"),
- "component": scenario.get("component", "unknown"),
- "justification": f"Enterprise execution for {scenario_name}",
- "confidence": 0.92,
- "parameters": {"scale_factor": 3} if "scale" in scenario.get("enterprise_action", "") else {},
- }
+ # Update ROI
+ roi = self.roi_calculator.calculate_roi([scenario])
- # Execute
- result = await server.execute_healing(healing_intent, mode)
+ # Update visualizations
+ rag_viz = self.viz_engine.create_rag_memory_viz({
+ "nodes": [
+ {"id": f"exec_{i}", "type": "Execution", "importance": i+1, "color_idx": i}
+ for i in range(5)
+ ],
+ "edges": [
+ {"source": i, "target": (i+1)%5}
+ for i in range(5)
+ ]
+ })
- # Update dashboard
- live_dashboard.add_execution_result(result["revenue_protected"])
+ predictive_viz = self.viz_engine.create_predictive_timeline(self.viz_engine.incident_history)
- # Add to RAG graph
- if rag_visualizer.incidents:
- rag_visualizer.add_outcome(
- incident_id=rag_visualizer.incidents[-1]["id"],
- success=result["success"],
- action=healing_intent["action"]
- )
+ return {
+ enterprise_results: results,
+ roi_results: roi,
+ rag_memory_viz: rag_viz,
+ predictive_timeline: predictive_viz
+ }
+
+ def calculate_comprehensive_roi():
+ """Calculate comprehensive ROI"""
+ all_scenarios = [
+ self.incident_scenarios.get_scenario(key)
+ for key in self.incident_scenarios.SCENARIOS.keys()
+ ]
+ roi = self.roi_calculator.calculate_roi(all_scenarios)
- # Update dashboard displays
- dashboard_data = live_dashboard.get_dashboard_data()
+ # Update performance radar with ROI metrics
+ roi_metrics = {
+ "ROI Multiplier": float(roi["roi_multiplier"].replace("×", "")),
+ "Annual Savings": float(roi["enterprise_annual_savings"].replace("$", "").replace(",", "")) / 1000000,
+ "Resolution Speed": 90, # Percentage improvement
+ "Incidents Prevented": 85,
+ "Cost Reduction": 72
+ }
+ performance_viz = self.viz_engine.create_performance_radar(roi_metrics)
return {
- result_display: {
- **result,
- "rag_stats": rag_visualizer.get_stats(),
- "dashboard_update": dashboard_data,
- },
- rag_graph: rag_visualizer.get_graph_figure(),
- revenue_protected: f"### 💰 Revenue Protected\n**{dashboard_data['revenue_protected']}**",
- auto_heal_rate: f"### ⚡ Auto-Heal Rate\n**{dashboard_data['auto_heal_rate']}**",
- engineer_hours: f"### 👷 Engineer Hours Saved\n**{dashboard_data['engineer_hours_saved']}**",
- incident_feed: [[
- datetime.datetime.now().strftime("%H:%M:%S"),
- scenario.get("component", "unknown"),
- f"${result['revenue_protected']:,.0f}",
- "✅ Resolved" if result["success"] else "⚠️ Partial",
- f"${result['revenue_protected']:,.0f}"
- ]],
+ roi_results: roi,
+ performance_radar: performance_viz
}
- # Connect events
- scenario_selector.change(
+ # ============ EVENT BINDINGS ============
+
+ # Scenario updates
+ scenario_dropdown.change(
fn=update_scenario_enhanced,
- inputs=[scenario_selector, viz_type],
- outputs=[metrics_display, impact_display, rag_graph, predictive_timeline,
- performance_chart, incident_heatmap, real_time_metrics]
+ inputs=[scenario_dropdown, viz_type],
+ outputs=[metrics_display, business_impact, visualization_output, heatmap_output]
)
viz_type.change(
fn=lambda scenario, viz_type: update_scenario_enhanced(scenario, viz_type),
- inputs=[scenario_selector, viz_type],
- outputs=[performance_chart, incident_heatmap]
+ inputs=[scenario_dropdown, viz_type],
+ outputs=[metrics_display, business_impact, visualization_output, heatmap_output]
)
- oss_action_btn.click(
- fn=oss_analysis,
- inputs=[scenario_selector],
- outputs=[result_display]
+ # OSS Analysis
+ oss_analyze_btn.click(
+ fn=run_oss_analysis,
+ inputs=[scenario_dropdown],
+ outputs=[oss_results]
)
- enterprise_action_btn.click(
- fn=enterprise_execution,
- inputs=[scenario_selector, license_input, execution_mode],
- outputs=[result_display, rag_graph, revenue_protected, auto_heal_rate, engineer_hours, incident_feed]
+ # Enterprise Execution
+ execute_btn.click(
+ fn=run_enterprise_execution,
+ inputs=[scenario_dropdown, approval_toggle],
+ outputs=[enterprise_results, roi_results, rag_memory_viz, predictive_timeline]
)
-
- # ================================================================
- # ENHANCED LEARNING ENGINE TAB
- # ================================================================
- with gr.TabItem("🧠 Learning Engine"):
- gr.Markdown("""
- ## 🧠 RAG Graph Learning Engine
- **Watch ARF learn from every incident and outcome**
- """)
-
- with gr.Row():
- with gr.Column(scale=1):
- # Learning stats
- learning_stats = gr.JSON(
- label="📊 Learning Statistics",
- value=rag_visualizer.get_stats(),
- )
-
- # Simulate learning button
- simulate_learning_btn = gr.Button("🎓 Simulate Learning Cycle", variant="primary")
-
- # Export knowledge button
- export_btn = gr.Button("📤 Export Learned Patterns", variant="secondary")
-
- with gr.Column(scale=2):
- # RAG Graph visualization
- learning_graph = gr.Plot(
- label="🔗 Knowledge Graph Visualization",
- )
- # Simulate learning
- def simulate_learning():
- # Add random incidents and outcomes
- components = ["payment-service", "database", "api-service", "cache", "auth-service"]
- actions = ["scale_out", "restart_container", "rollback", "circuit_breaker"]
-
- for _ in range(3):
- 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() > 0.2, # 80% success rate
- action=random.choice(actions)
- )
-
- return {
- learning_graph: rag_visualizer.get_graph_figure(),
- learning_stats: rag_visualizer.get_stats(),
- }
-
- # Connect events
- simulate_learning_btn.click(
- fn=simulate_learning,
- outputs=[learning_graph, learning_stats]
+ # ROI Calculation
+ calculate_roi_btn.click(
+ fn=calculate_comprehensive_roi,
+ inputs=[],
+ outputs=[roi_results, performance_radar]
)
- export_btn.click(
- fn=lambda: {"message": "✅ Knowledge patterns exported to Neo4j for persistent learning"},
- outputs=[gr.JSON(value={"message": "✅ Knowledge patterns exported"})]
+ # Initial load
+ demo.load(
+ fn=lambda: update_scenario_enhanced("database_connection_pool_exhaustion", "Radar Chart"),
+ inputs=[],
+ outputs=[metrics_display, business_impact, visualization_output, heatmap_output]
)
-
- # ================================================================
- # ENHANCED COMPLIANCE AUDITOR TAB
- # ================================================================
- with gr.TabItem("📝 Compliance Auditor"):
- 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 selector
- compliance_standard = gr.Dropdown(
- choices=["SOC2", "GDPR", "HIPAA", "ISO27001", "PCI-DSS"],
- value="SOC2",
- label="📋 Compliance Standard",
- )
-
- # License input
- compliance_license = gr.Textbox(
- label="🔑 Enterprise License Required",
- value="ARF-ENT-COMPLIANCE",
- interactive=True,
- )
-
- # Generate report button
- generate_report_btn = gr.Button("⚡ Generate Compliance Report", variant="primary")
-
- # Audit trail viewer
- audit_trail = gr.Dataframe(
- label="📜 Live Audit Trail",
- headers=["Time", "Action", "Component", "User", "Status"],
- value=[],
- )
-
- with gr.Column(scale=2):
- # Report display
- compliance_report = gr.JSON(
- label="📄 Compliance Report",
- value={},
- )
-
- # Generate compliance report
- def generate_compliance_report(standard, license_key):
- if "ENT" not in license_key:
- return {
- compliance_report: {
- "error": "Enterprise license required",
- "message": "Compliance features require Enterprise license",
- "upgrade_url": "https://arf.dev/enterprise",
- }
- }
-
- # Create mock enterprise server
- if license_key not in enterprise_servers:
- enterprise_servers[license_key] = MockEnterpriseServer(license_key)
-
- server = enterprise_servers[license_key]
- report = server.generate_compliance_report(standard)
-
- # Update audit trail
- audit_data = []
- for entry in server.audit_trail[-10:]: # Last 10 entries
- audit_data.append([
- entry["timestamp"][11:19], # Just time
- entry["action"],
- entry["component"],
- "ARF System",
- "✅" if entry["success"] else "⚠️",
- ])
-
- return {
- compliance_report: report,
- audit_trail: audit_data,
- }
-
- generate_report_btn.click(
- fn=generate_compliance_report,
- inputs=[compliance_standard, compliance_license],
- outputs=[compliance_report, audit_trail]
+ demo.load(
+ fn=calculate_comprehensive_roi,
+ inputs=[],
+ outputs=[roi_results, performance_radar]
)
-
- # ================================================================
- # ENHANCED ROI CALCULATOR TAB
- # ================================================================
- with gr.TabItem("💰 ROI Calculator"):
+
+ # Footer
gr.Markdown("""
- ## 💰 Enterprise ROI Calculator
- **Calculate your potential savings with ARF Enterprise**
+ ---
+ 🚀 **ARF Ultimate Investor Demo v3.4.0** | Enhanced with Professional Analytics & Export Features
+ *Built with ❤️ using Gradio & Plotly | All visualizations guaranteed working*
""")
-
- with gr.Row():
- with gr.Column(scale=1):
- # Inputs
- monthly_revenue = gr.Number(
- value=1000000,
- label="Monthly Revenue ($)",
- info="Your company's monthly revenue"
- )
-
- monthly_incidents = gr.Slider(
- minimum=1,
- maximum=100,
- value=20,
- label="Monthly Incidents",
- info="Reliability incidents per month"
- )
-
- team_size = gr.Slider(
- minimum=1,
- maximum=20,
- value=3,
- label="SRE/DevOps Team Size",
- info="Engineers handling incidents"
- )
-
- avg_incident_cost = gr.Number(
- value=1500,
- label="Average Incident Cost ($)",
- info="Revenue loss + engineer time per incident"
- )
-
- calculate_roi_btn = gr.Button("📈 Calculate ROI", variant="primary")
-
- with gr.Column(scale=2):
- # Results
- roi_results = gr.JSON(
- label="📊 ROI Analysis Results",
- value={},
- )
-
- # Visualization
- roi_chart = gr.Plot(
- label="📈 ROI Visualization",
- )
-
- # Calculate ROI
- def calculate_roi(revenue, incidents, team_size, incident_cost):
- # ARF metrics (based on real deployments)
- auto_heal_rate = 0.817 # 81.7%
- mttr_reduction = 0.94 # 94% faster
- engineer_time_savings = 0.85 # 85% less engineer time
-
- # Ensure numeric values
- try:
- incidents = float(incidents) if incidents else 0
- team_size = float(team_size) if team_size else 0
- incident_cost = float(incident_cost) if incident_cost else 0
- except:
- incidents = team_size = incident_cost = 0
-
- # Calculations
- manual_incidents = incidents * (1 - auto_heal_rate)
- auto_healed = incidents * auto_heal_rate
-
- # Costs without ARF
- traditional_cost = incidents * incident_cost
- engineer_cost = incidents * 2.5 * 100 * team_size # 2.5 hours at $100/hour
- total_traditional_cost = traditional_cost + engineer_cost
-
- # Costs with ARF
- arf_incident_cost = manual_incidents * incident_cost * (1 - mttr_reduction)
- arf_engineer_cost = manual_incidents * 2.5 * 100 * team_size * engineer_time_savings
- total_arf_cost = arf_incident_cost + arf_engineer_cost
-
- # Savings
- monthly_savings = total_traditional_cost - total_arf_cost
- annual_savings = monthly_savings * 12
- implementation_cost = 47500 # $47.5K implementation
-
- # ROI
- payback_months = implementation_cost / monthly_savings if monthly_savings > 0 else 999
- first_year_roi = ((annual_savings - implementation_cost) / implementation_cost) * 100 if implementation_cost > 0 else 0
-
- # Create chart
- fig = go.Figure(data=[
- go.Bar(name='Without ARF', x=['Monthly Cost'], y=[total_traditional_cost], marker_color='#ff4444'),
- go.Bar(name='With ARF', x=['Monthly Cost'], y=[total_arf_cost], marker_color='#44ff44'),
- ])
- fig.update_layout(
- title="Monthly Cost Comparison",
- yaxis_title="Cost ($)",
- barmode='group',
- height=300,
- )
-
- return {
- roi_results: {
- "monthly_revenue": f"${revenue:,.0f}",
- "monthly_incidents": incidents,
- "auto_heal_rate": f"{auto_heal_rate*100:.1f}%",
- "mttr_improvement": f"{mttr_reduction*100:.0f}%",
- "monthly_savings": f"${monthly_savings:,.0f}",
- "annual_savings": f"${annual_savings:,.0f}",
- "implementation_cost": f"${implementation_cost:,.0f}",
- "payback_period": f"{payback_months:.1f} months",
- "first_year_roi": f"{first_year_roi:.1f}%",
- "key_metrics": {
- "incidents_auto_healed": f"{auto_healed:.0f}/month",
- "engineer_hours_saved": f"{(incidents * 2.5 * engineer_time_savings):.0f} hours/month",
- "revenue_protected": f"${(incidents * incident_cost * auto_heal_rate):,.0f}/month",
- }
- },
- roi_chart: fig,
- }
-
- calculate_roi_btn.click(
- fn=calculate_roi,
- inputs=[monthly_revenue, monthly_incidents, team_size, avg_incident_cost],
- outputs=[roi_results, roi_chart]
- )
-
- # Enhanced footer
- gr.Markdown("""
- ---
-
-
-
-
🚀 Ready to transform your reliability operations?
-
Capability Comparison:
-
- | Capability | OSS Edition | Enterprise Edition |
- | Execution | ❌ Advisory only | ✅ Autonomous + Approval |
- | Learning | ❌ No learning | ✅ Continuous learning engine |
- | Compliance | ❌ No audit trails | ✅ SOC2/GDPR/HIPAA compliant |
- | Storage | ⚠️ In-memory only | ✅ Persistent (Neo4j + PostgreSQL) |
- | Support | ❌ Community | ✅ 24/7 Enterprise support |
- | ROI | ❌ None | ✅ 5.2× average first year ROI |
-
-
-
-
-
-
-
-
-
🚀 ARF Ultimate Investor Demo v3.4.0 | Enhanced with Professional Analytics & Export Features
-
Built with ❤️ using Gradio & Plotly | All visualizations guaranteed working
-
- """)
-
- return demo
+ return demo
-# ============================================================================
-# MAIN ENTRY POINT
-# ============================================================================
+# ===========================================
+# APPLICATION ENTRY POINT
+# ===========================================
def main():
- """Main entry point"""
- logging.basicConfig(level=logging.INFO)
- logger = logging.getLogger(__name__)
-
+ """Main application entry point"""
logger.info("=" * 80)
logger.info("🚀 Starting ARF Ultimate Investor Demo v3.4.0")
logger.info("=" * 80)
- demo = create_enhanced_demo()
+ if OSS_AVAILABLE:
+ logger.info("✅ Agentic Reliability Framework v3.3.6 (OSS Edition)")
+ logger.info("📦 HealingIntent & OSSMCPClient available (advisory-only)")
+ logger.info("✓ HealingIntent instantiation successful")
+ else:
+ logger.info("⚠️ OSS components not available - running in simulation mode")
+
+ # Create and launch the application
+ app = ARFUltimateInvestorDemo()
+ demo = app.create_demo_interface()
+
demo.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
- show_error=True,
- theme="soft",
+ debug=True
)
if __name__ == "__main__":