import plotly.graph_objects as go def build_threat_timeline(threat_history): fig = go.Figure() fig.add_trace( go.Scatter( x=list(range(len(threat_history))), y=list(threat_history), mode="lines+markers", marker=dict(color="#1f77b4"), line=dict(shape="spline", smoothing=0.7), name="Threat Score", ) ) fig.update_layout( title="Threat Timeline", xaxis_title="Frame", yaxis_title="Threat %", yaxis=dict(range=[0, 100]), template="plotly_white", margin=dict(t=40, b=20, l=20, r=20), ) return fig def build_risk_pie(summary): labels = [] values = [] for label, data in summary.items(): labels.append(label) values.append(data["count"]) if not labels: return None fig = go.Figure( go.Pie(labels=labels, values=values, hole=0.4, textinfo="percent+label") ) fig.update_layout(title="Event Distribution", margin=dict(t=40, b=20, l=20, r=20)) return fig