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)
|