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
......@@ -3,31 +3,67 @@ import numpy as np
import matplotlib.pyplot as plt
from datetime import date
import seaborn
import random # importing the random module
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',
user='user',
passwd='pass',
auth_plugin='mysql_native_password'
)
Possui o mecanismo de comunicação com o site, quando ocorrer um erro irá aparecer um card vermelho no final
do site
'''
############ argumentos ############
user_sql= "bruno" # usuario do detector que serão usados os dados
output= 'graficododia.png' # nome do arquivo histograma
minutos= 30 # tamanho do bin
dormir= 2*60 # tempo que o programa dorme para acumular mais dados em segundos
Eventos= "Eventos/"+str(minutos)+"min" # titulo de y do histograma
############ 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
# print(db_connection) # mostra se foi conectado
datainicial = tuple(listA)
datafinal = tuple(listB)
# Create a Cursor object to execute queries.
return((time.mktime(datainicial),time.mktime(datafinal)))
cur = db_connection.cursor()
def manejo_pasta(file):
# Seleciona banco de dados previamento criado a ser usado.
nome=date.today().strftime("histograma%d%m%Y")
cur.execute("USE COSMICPAMPA;")
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):
"""Plot data distribution
"""
Args:
data (list): List with data to be plotted.
......@@ -38,11 +74,12 @@ def plot_dist(data, x_label, y_label, tittle, number_bins, plot_output):
plot_output (str): Path to plot output.
"""
#plt.xlim([0, 24])
plt.xlim([0, 24])
seaborn.set(color_codes='dark')
seaborn.set_style("white")
plt.figure(1, figsize=(9, 6))
plt.xticks(np.arange(0, 25, 1.0))
sns_plot = seaborn.histplot(data, bins=number_bins, color="#5881C1")
sns_plot.set(xlabel=x_label, ylabel=y_label)
plt.title(tittle)
......@@ -50,42 +87,99 @@ def plot_dist(data, x_label, y_label, tittle, number_bins, plot_output):
plt.show()
plt.close()
# Recebe os dados
horas_grafico= 24
where= time.time()*1000 - horas_grafico*60*60*1000
mensagem=f'select hora from eventos where hora >= {where} and usuario="bruno";'
print(mensagem)
cur.execute(mensagem)
def trocatexto(nomefile,outword, inword):
'''
Programa que recebe um arquivo e substitui uma palavra por outra
e escreve novamente no arquivo
Args:
nomefile (str): nome do arquivo que será modificado
outword (str): palavra que será procurada no arquivo para ser substituida
inword (str): pela pela qual a outword será substituida
'''
with open(nomefile,"r") as arquivo: #abre sem apagar o arquivo
lido = arquivo.read() # lê o arquivo armazenado em nomefile
mudado = lido.replace(outword,inword) #troca a str em outword pelo str em inword
with open(nomefile,"w") as arqu: #apaga texto do arquivo
arqu.write(mudado) # escreve novo com as palavras trocadas
def erro(html): # func
with open(html,"r") as arquivo: #abre sem apagar o arquivo
lido = arquivo.read() # lê o arquivo armazenado em nomefile
string_erro = lido[10584:-25]
return(string_erro)
dados = np.array([],dtype=float) # array de horas em ms que chegaram
############ loop principal ############
endereco_html = "/var/www/html/testou.html"
trocatexto(endereco_html,"verme","verde")
trocatexto(endereco_html,erro(endereco_html),"ok")
tempo_inicial , tempo_final= dateiniciofim() #começo e fim do dia que o programa rodou
tempo_sql = tempo_inicial # para que haja seleção de dados antes da meia noite anterior
try:
while True:
##### troca de dia #####
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():
for row in cur.fetchall() :
dados= np.append(dados,row)
print(len(dados))
# Arquivo texto
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
for i in range(1,len(dados)):
dados[i]= (dados[i] - dados[0])/(1000*60*60)
#dados[i]= (dados[i] - dados[0])
dados[0]=0.0
d1 = today.strftime("%A %d/%b/%Y")
# 1ms * 1s/1000ms * 1min/60s * 1h/60min
bins=int(extensaodehoras*2)
# Data para o título
if bins < 1: # para garantir que haja sempre pelo menos um bin
today = date.today()
bins=1
## dd/mm/YY
plot_dist(dados, "Horas", Eventos, d1, bins, output)
d1 = today.strftime("%A %d/%b/%Y")
d2 = today.strftime("%Y%m%d")
#output= 'teste'+d2+'.png'
output= 'graficododia.png'
# pausa de 1 minutos no loop para chegar novos dados
# Printando histograma
time.sleep(dormir)
minutos= 30
bins=int(24*60/minutos)
Eventos= "Eventos/"+str(minutos)+"min"
plot_dist(dados, "Horas", Eventos, d1, bins, output)
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