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