import psutil import streamlit as st import plotly.graph_objs as go import time from collections import deque # Inicializa os dados dados_cpu = deque(maxlen=500) dados_mem = deque(maxlen=500) tempos = deque(maxlen=500) # Função para coletar dados de CPU e memória def coletar_dados(): uso_cpu = psutil.cpu_percent(interval=0.1) uso_mem = psutil.virtual_memory().percent dados_cpu.append(uso_cpu) dados_mem.append(uso_mem) tempos.append(time.strftime('%H:%M:%S')) # Inicializa o aplicativo Streamlit st.title('Monitor de CPU e Memória em Tempo Real') # Seleção do tipo de gráfico tipo_grafico = st.selectbox( 'Selecione o tipo de gráfico:', ['Linha', 'Barra', 'Área', 'Dispersão', 'Histograma', 'Box', 'Violin', 'Heatmap', 'Pie', 'Sunburst'] ) # Inicializa os gráficos placeholder_cpu = st.empty() placeholder_mem = st.empty() # Função para criar os gráficos def criar_graficos(tipo_grafico): if tipo_grafico == 'Linha': trace_cpu = go.Scatter(x=list(tempos), y=list(dados_cpu), mode='lines', name='Uso da CPU') trace_mem = go.Scatter(x=list(tempos), y=list(dados_mem), mode='lines', name='Uso da Memória') elif tipo_grafico == 'Barra': trace_cpu = go.Bar(x=list(tempos), y=list(dados_cpu), name='Uso da CPU') trace_mem = go.Bar(x=list(tempos), y=list(dados_mem), name='Uso da Memória') elif tipo_grafico == 'Área': trace_cpu = go.Scatter(x=list(tempos), y=list(dados_cpu), fill='tozeroy', name='Uso da CPU') trace_mem = go.Scatter(x=list(tempos), y=list(dados_mem), fill='tozeroy', name='Uso da Memória') elif tipo_grafico == 'Dispersão': trace_cpu = go.Scatter(x=list(tempos), y=list(dados_cpu), mode='markers', name='Uso da CPU') trace_mem = go.Scatter(x=list(tempos), y=list(dados_mem), mode='markers', name='Uso da Memória') elif tipo_grafico == 'Histograma': trace_cpu = go.Histogram(x=list(dados_cpu), name='Uso da CPU') trace_mem = go.Histogram(x=list(dados_mem), name='Uso da Memória') elif tipo_grafico == 'Box': trace_cpu = go.Box(y=list(dados_cpu), name='Uso da CPU') trace_mem = go.Box(y=list(dados_mem), name='Uso da Memória') elif tipo_grafico == 'Violin': trace_cpu = go.Violin(y=list(dados_cpu), name='Uso da CPU') trace_mem = go.Violin(y=list(dados_mem), name='Uso da Memória') elif tipo_grafico == 'Heatmap': trace_cpu = go.Heatmap(z=[list(dados_cpu)], name='Uso da CPU') trace_mem = go.Heatmap(z=[list(dados_mem)], name='Uso da Memória') elif tipo_grafico == 'Pie': trace_cpu = go.Pie(labels=['CPU'], values=[sum(dados_cpu)], name='Uso da CPU') trace_mem = go.Pie(labels=['Memória'], values=[sum(dados_mem)], name='Uso da Memória') elif tipo_grafico == 'Sunburst': trace_cpu = go.Sunburst(labels=['CPU'], parents=[''], values=[sum(dados_cpu)], name='Uso da CPU') trace_mem = go.Sunburst(labels=['Memória'], parents=[''], values=[sum(dados_mem)], name='Uso da Memória') else: trace_cpu = go.Scatter(x=list(tempos), y=list(dados_cpu), mode='lines', name='Uso da CPU') trace_mem = go.Scatter(x=list(tempos), y=list(dados_mem), mode='lines', name='Uso da Memória') layout_cpu = go.Layout(title='Uso da CPU', xaxis_title='Tempo', yaxis_title='Porcentagem') layout_mem = go.Layout(title='Uso da Memória', xaxis_title='Tempo', yaxis_title='Porcentagem') fig_cpu = go.Figure(data=[trace_cpu], layout=layout_cpu) fig_mem = go.Figure(data=[trace_mem], layout=layout_mem) return fig_cpu, fig_mem # Loop para atualização dos gráficos a cada segundo while True: coletar_dados() fig_cpu, fig_mem = criar_graficos(tipo_grafico) with placeholder_cpu.container(): st.plotly_chart(fig_cpu) with placeholder_mem.container(): st.plotly_chart(fig_mem) time.sleep(1)