File size: 2,479 Bytes
cf9249e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e264886
 
 
 
 
 
 
 
cf9249e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e264886
 
 
 
 
cf9249e
 
 
 
 
 
 
e264886
cf9249e
e264886
cf9249e
e264886
 
 
 
 
 
 
 
 
 
cf9249e
e264886
 
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
import streamlit as st
import psutil
import speedtest
import plotly.graph_objects as go
import time

# Function to get CPU and memory usage
def get_system_metrics():
    cpu_usage = psutil.cpu_percent(interval=1)
    memory_info = psutil.virtual_memory()
    memory_usage = memory_info.percent
    return cpu_usage, memory_usage

# Function to get internet speed
def get_internet_speed():
    try:
        st = speedtest.Speedtest()
        st.get_best_server()
        download_speed = st.download() / 1_000_000  # Convert to Mbps
        upload_speed = st.upload() / 1_000_000  # Convert to Mbps
        return download_speed, upload_speed
    except:
        return None, None

# Function to create a gauge chart
def create_gauge_chart(value, title, min_value=0, max_value=100):
    fig = go.Figure(go.Indicator(
        mode="gauge+number",
        value=value,
        title={'text': title},
        gauge={'axis': {'range': [min_value, max_value]},
               'bar': {'color': "lightblue"},
               'bgcolor': "white",
               'steps': [{'range': [min_value, max_value], 'color': "lightgrey"}],
               'threshold': {'line': {'color': "red", 'width': 4}, 'thickness': 0.75, 'value': max_value}}))
    return fig

# Streamlit layout
st.title("System Monitoring Dashboard")

# Create placeholders for each gauge
cpu_placeholder = st.empty()
memory_placeholder = st.empty()
download_placeholder = st.empty()
upload_placeholder = st.empty()

# Update the metrics in real-time
while True:
    cpu_usage, memory_usage = get_system_metrics()
    download_speed, upload_speed = get_internet_speed()

    # Create gauge charts
    with cpu_placeholder:
        st.plotly_chart(create_gauge_chart(cpu_usage, "CPU Usage"), use_container_width=True)
    with memory_placeholder:
        st.plotly_chart(create_gauge_chart(memory_usage, "Memory Usage"), use_container_width=True)
    with download_placeholder:
        if download_speed is not None:
            st.plotly_chart(create_gauge_chart(download_speed, "Download Speed (Mbps)", 0, 1000), use_container_width=True)
        else:
            st.write("Error retrieving download speed")
    with upload_placeholder:
        if upload_speed is not None:
            st.plotly_chart(create_gauge_chart(upload_speed, "Upload Speed (Mbps)", 0, 1000), use_container_width=True)
        else:
            st.write("Error retrieving upload speed")

    # Refresh the metrics every 10 seconds
    time.sleep(10)