Commit df6e759f authored by Bruno Thomazi Zanette's avatar Bruno Thomazi Zanette 🎱
Browse files

Replace ReadPlotdata.py for grafico.py que acumula função do manejo.py

parent a6e7e7b1
import mysql.connector import mysql.connector
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from datetime import date from datetime import date
import seaborn import seaborn
import random # importing the random module import time
import time from time import localtime
import os
#### SQL
# Conectando ao sql '''
Programa que maneja os histogramas, faz a atualização deles com dados do mysql de um usuario específico.
db_connection = mysql.connector.connect(
host='localhost', Possui o mecanismo de comunicação com o site, quando ocorrer um erro irá aparecer um card vermelho no final
user='user', do site
passwd='pass',
auth_plugin='mysql_native_password' '''
) ############ argumentos ############
# print(db_connection) # mostra se foi conectado user_sql= "bruno" # usuario do detector que serão usados os dados
# Create a Cursor object to execute queries. output= 'graficododia.png' # nome do arquivo histograma
cur = db_connection.cursor() minutos= 30 # tamanho do bin
# Seleciona banco de dados previamento criado a ser usado. dormir= 2*60 # tempo que o programa dorme para acumular mais dados em segundos
cur.execute("USE COSMICPAMPA;") Eventos= "Eventos/"+str(minutos)+"min" # titulo de y do histograma
def plot_dist(data, x_label, y_label, tittle, number_bins, plot_output):
"""Plot data distribution
############ Funções ############
def dateiniciofim(): #função que dá a hora do inicio e final do dia atual em segundos da epoch
listA=list(localtime())
listB=list(localtime())
for i in range (3,6):#posições que são zero
listA[i]=0 # zerando hora minuto segundo
if i==3:
listB[i]=23 #23 horas
elif i==4:
listB[i]=59 #23 min
else:
listB[i]=60 #60 seg
datainicial = tuple(listA)
datafinal = tuple(listB)
return((time.mktime(datainicial),time.mktime(datafinal)))
def manejo_pasta(file):
nome=date.today().strftime("histograma%d%m%Y")
os.rename(file,f'/home/brunoz31/graficos/{nome}')
def mensagem_sql(usuario, tempo):
horas_grafico= 24
where= tempo*1000
mensagem=f'select hora from eventos where hora >= {where} and usuario="{usuario}";'
return(mensagem)
def plot_dist(data, x_label, y_label, tittle, number_bins, plot_output):
"""
Args: Args:
data (list): List with data to be plotted. data (list): List with data to be plotted.
x_label (str): Plot x-label. x_label (str): Plot x-label.
y_label (str): Plot y-label. y_label (str): Plot y-label.
tittle (str): Plot tittle. tittle (str): Plot tittle.
number_bins (int): Number of bins for distribution. number_bins (int): Number of bins for distribution.
plot_output (str): Path to plot output. plot_output (str): Path to plot output.
""" """
#plt.xlim([0, 24]) plt.xlim([0, 24])
seaborn.set(color_codes='dark') seaborn.set(color_codes='dark')
seaborn.set_style("white") seaborn.set_style("white")
plt.figure(1, figsize=(9, 6)) plt.figure(1, figsize=(9, 6))
sns_plot = seaborn.histplot(data, bins=number_bins, color="#5881C1") plt.xticks(np.arange(0, 25, 1.0))
sns_plot.set(xlabel=x_label, ylabel=y_label) sns_plot = seaborn.histplot(data, bins=number_bins, color="#5881C1")
plt.title(tittle) sns_plot.set(xlabel=x_label, ylabel=y_label)
sns_plot.figure.savefig(plot_output, bbox_inches='tight', dpi=400) plt.title(tittle)
plt.show() sns_plot.figure.savefig(plot_output, bbox_inches='tight', dpi=400)
plt.close() plt.show()
plt.close()
# Recebe os dados
horas_grafico= 24 def trocatexto(nomefile,outword, inword):
where= time.time()*1000 - horas_grafico*60*60*1000 '''
mensagem=f'select hora from eventos where hora >= {where} and usuario="bruno";' Programa que recebe um arquivo e substitui uma palavra por outra
print(mensagem) e escreve novamente no arquivo
cur.execute(mensagem)
Args:
dados = np.array([],dtype=float) # array de horas em ms que chegaram nomefile (str): nome do arquivo que será modificado
outword (str): palavra que será procurada no arquivo para ser substituida
for row in cur.fetchall() : inword (str): pela pela qual a outword será substituida
dados= np.append(dados,row) '''
with open(nomefile,"r") as arquivo: #abre sem apagar o arquivo
print(len(dados)) lido = arquivo.read() # lê o arquivo armazenado em nomefile
# Arquivo texto
mudado = lido.replace(outword,inword) #troca a str em outword pelo str em inword
for i in range(1,len(dados)):
dados[i]= (dados[i] - dados[0])/(1000*60*60) with open(nomefile,"w") as arqu: #apaga texto do arquivo
#dados[i]= (dados[i] - dados[0]) arqu.write(mudado) # escreve novo com as palavras trocadas
dados[0]=0.0
def erro(html): # func
# 1ms * 1s/1000ms * 1min/60s * 1h/60min with open(html,"r") as arquivo: #abre sem apagar o arquivo
lido = arquivo.read() # lê o arquivo armazenado em nomefile
# Data para o título string_erro = lido[10584:-25]
return(string_erro)
today = date.today()
############ loop principal ############
## dd/mm/YY
endereco_html = "/var/www/html/testou.html"
d1 = today.strftime("%A %d/%b/%Y") trocatexto(endereco_html,"verme","verde")
d2 = today.strftime("%Y%m%d") trocatexto(endereco_html,erro(endereco_html),"ok")
#output= 'teste'+d2+'.png'
output= 'graficododia.png' tempo_inicial , tempo_final= dateiniciofim() #começo e fim do dia que o programa rodou
# Printando histograma tempo_sql = tempo_inicial # para que haja seleção de dados antes da meia noite anterior
try:
minutos= 30 while True:
bins=int(24*60/minutos)
Eventos= "Eventos/"+str(minutos)+"min" ##### troca de dia #####
plot_dist(dados, "Horas", Eventos, d1, bins, output)
if time.time() > tempo_final:
manejo_pasta(output)# manda o histograma para a pasta graficos quando passa da meia noite
tempo_inicial , tempo_final= dateiniciofim() #novo tempo inical e final
tempo_sql = tempo_inicial # tempo utilizado para consulta sql atualizado
##### Recebe os dados #####
db_connection = mysql.connector.connect( # Conectando ao sql
host='localhost',
user='COSMICPAMPApy',
passwd='5H4$%mrnsp4901',
auth_plugin='mysql_native_password'
)
cur = db_connection.cursor() # Create a Cursor object to execute queries.
cur.execute("USE COSMICPAMPA;") # Seleciona banco de dados previamento criado a ser usado.
mensagem = mensagem_sql(user_sql,tempo_sql) # comando sql que será executado
cur.execute(mensagem) # executa o comando sql
dados = np.array([],dtype=float) # vetor que armazena os dados em ms
for row in cur.fetchall():
dados= np.append(dados,row)
extensaodehoras = (dados[-1] - dados[0])/(1000*60*60) # usado para que o número de bins creçam conforme a chegada de mais dados
for i in range(0,len(dados)):
dados[i]= (dados[i] - tempo_inicial*1000)/(1000*60*60) # transformando os dados em horas
##### histograma #####
today = date.today()# Data para o título
d1 = today.strftime("%A %d/%b/%Y")
bins=int(extensaodehoras*2)
if bins < 1: # para garantir que haja sempre pelo menos um bin
bins=1
plot_dist(dados, "Horas", Eventos, d1, bins, output)
# pausa de 1 minutos no loop para chegar novos dados
time.sleep(dormir)
except Exception as e:
trocatexto(endereco_html,"verde","verme")
trocatexto(endereco_html,"ok",f"O erro foi {e} no programa grafico.py")
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment