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 numpy as np
import matplotlib.pyplot as plt
from datetime import date
import seaborn
import random # importing the random module
import time
#### SQL
# Conectando ao sql
db_connection = mysql.connector.connect(
host='localhost',
user='user',
passwd='pass',
auth_plugin='mysql_native_password'
)
# print(db_connection) # mostra se foi conectado
# Create a Cursor object to execute queries.
cur = db_connection.cursor()
# Seleciona banco de dados previamento criado a ser usado.
cur.execute("USE COSMICPAMPA;")
import mysql.connector
import numpy as np
import matplotlib.pyplot as plt
from datetime import date
import seaborn
import time
from time import localtime
import os
'''
Programa que maneja os histogramas, faz a atualização deles com dados do mysql de um usuario específico.
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
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:
data (list): List with data to be plotted.
x_label (str): Plot x-label.
y_label (str): Plot y-label.
tittle (str): Plot tittle.
number_bins (int): Number of bins for distribution.
plot_output (str): Path to plot output.
"""
#plt.xlim([0, 24])
seaborn.set(color_codes='dark')
seaborn.set_style("white")
plt.figure(1, figsize=(9, 6))
sns_plot = seaborn.histplot(data, bins=number_bins, color="#5881C1")
sns_plot.set(xlabel=x_label, ylabel=y_label)
plt.title(tittle)
sns_plot.figure.savefig(plot_output, bbox_inches='tight', dpi=400)
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)
dados = np.array([],dtype=float) # array de horas em ms que chegaram
for row in cur.fetchall() :
dados= np.append(dados,row)
print(len(dados))
# Arquivo texto
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
# 1ms * 1s/1000ms * 1min/60s * 1h/60min
# Data para o título
today = date.today()
## dd/mm/YY
d1 = today.strftime("%A %d/%b/%Y")
d2 = today.strftime("%Y%m%d")
#output= 'teste'+d2+'.png'
output= 'graficododia.png'
# Printando histograma
minutos= 30
bins=int(24*60/minutos)
Eventos= "Eventos/"+str(minutos)+"min"
plot_dist(dados, "Horas", Eventos, d1, bins, output)
plot_output (str): Path to plot output.
"""
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)
sns_plot.figure.savefig(plot_output, bbox_inches='tight', dpi=400)
plt.show()
plt.close()
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)
############ 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():
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