File size: 1,875 Bytes
e8f0e8e
8ea7afe
e8f0e8e
 
 
 
 
 
 
8ea7afe
e8f0e8e
 
8ea7afe
 
 
 
 
 
 
 
 
e8f0e8e
 
8ea7afe
 
e8f0e8e
 
 
 
 
 
 
 
 
 
 
 
 
8ea7afe
e8f0e8e
 
 
 
 
 
 
 
8ea7afe
 
 
 
 
 
 
e8f0e8e
 
 
 
86ef349
 
 
 
 
 
 
 
 
e8f0e8e
 
8ea7afe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import dash
from dash import dcc, html
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import random

SITES = ['Hyderabad', 'Kurnool', 'Bangalore', 'Warangal']
POLES_PER_SITE = 12
ALERT_THRESHOLD = 80

def generate_data():
    return pd.DataFrame([
        {
            'Site': site,
            'Pole': f'P{pole}',
            'Status': random.randint(0, 100)
        }
        for site in SITES
        for pole in range(1, POLES_PER_SITE + 1)
    ])
df = generate_data()

def create_heatmap(df):
    pivot_df = df.pivot(index="Site", columns="Pole", values="Status")
    fig = go.Figure(data=go.Heatmap(
        z=pivot_df.values,
        x=pivot_df.columns,
        y=pivot_df.index,
        colorscale="Viridis",
        colorbar=dict(title="Status"),
        zmin=0,
        zmax=100
    ))
    fig.update_layout(title="Pole Status Heatmap", height=500)
    return fig

app = dash.Dash(__name__)
server = app.server

app.layout = html.Div([
    html.H1("Pole Management Dashboard", style={'textAlign': 'center'}),
    dcc.Graph(figure=create_heatmap(df)),
    
    html.Div([
        html.Div("🚨 Red Alert Poles:", style={"fontWeight": "bold", "marginTop": "20px"}),
        html.Div([
            html.Span(f"{row['Site']} - {row['Pole']}", style={
                "animation": "blinker 1s linear infinite",
                "color": "red",
                "fontWeight": "bold",
                "fontSize": "20px",
                "margin": "10px"
            })
            for _, row in df[df["Status"] > ALERT_THRESHOLD].iterrows()
        ])
    ], style={"textAlign": "center"}),

    dcc.Markdown('''
        <style>
        @keyframes blinker {
            50% { opacity: 0; }
        }
        </style>
    ''', dangerously_allow_html=True)
])

if __name__ == "__main__":
    app.run_server(debug=False, host="0.0.0.0", port=7860)