|
|
import streamlit as st |
|
|
import psutil |
|
|
import speedtest |
|
|
import plotly.graph_objects as go |
|
|
import time |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
def get_internet_speed(): |
|
|
try: |
|
|
st = speedtest.Speedtest() |
|
|
st.get_best_server() |
|
|
download_speed = st.download() / 1_000_000 |
|
|
upload_speed = st.upload() / 1_000_000 |
|
|
return download_speed, upload_speed |
|
|
except: |
|
|
return None, None |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
st.title("System Monitoring Dashboard") |
|
|
|
|
|
|
|
|
cpu_placeholder = st.empty() |
|
|
memory_placeholder = st.empty() |
|
|
download_placeholder = st.empty() |
|
|
upload_placeholder = st.empty() |
|
|
|
|
|
|
|
|
while True: |
|
|
cpu_usage, memory_usage = get_system_metrics() |
|
|
download_speed, upload_speed = get_internet_speed() |
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
time.sleep(10) |
|
|
|