File size: 1,993 Bytes
e8f0e8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
72
73
74
75
import dash
from dash import dcc, html, dash_table
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import random

# Constants
SITES = ['Hyderabad', 'Kurnool', 'Bangalore', 'Warangal']
POLES_PER_SITE = 12
ALERT_THRESHOLD = 80  # Poles above this are red alert

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

df = generate_data()

# Create heatmap figure
def create_heatmap(dataframe):
    pivot_df = dataframe.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

# Dash App
app = dash.Dash(__name__)
server = app.server  # Needed for Hugging Face Spaces

# Blinking style (CSS)
blinking_style = {
    "animation": "blinker 1s linear infinite",
    "color": "red",
    "fontWeight": "bold",
    "fontSize": "20px",
    "margin": "10px"
}

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=blinking_style)
            for _, row in df[df["Status"] > ALERT_THRESHOLD].iterrows()
        ])
    ], style={"textAlign": "center"}),

    # Add CSS for blinking effect
    html.Style("""
    @keyframes blinker {
        50% { opacity: 0; }
    }
    """)
])

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