GUI analisis creados

parent 43e86f90
import tkinter as ttk import tkinter as ttk
from tkinter import * from tkinter import *
class VentanaAbout: class VentanaAbout:
def __init__(self): def __init__(self):
...@@ -12,4 +13,4 @@ class VentanaAbout: ...@@ -12,4 +13,4 @@ class VentanaAbout:
lb2.place(x=60, y=50) lb2.place(x=60, y=50)
lb3 = ttk.Label(self.app, text="Juan Santos Poyato") lb3 = ttk.Label(self.app, text="Juan Santos Poyato")
lb3.place(x=60, y=80) lb3.place(x=60, y=80)
self.app.mainloop() self.app.mainloop()
\ No newline at end of file
...@@ -66,4 +66,4 @@ def estadisticasDuracionSesiones(registros): ...@@ -66,4 +66,4 @@ def estadisticasDuracionSesiones(registros):
malto = histograma[i] malto = histograma[i]
moda = i moda = i
# Devuelvo todos los parametros # Devuelvo todos los parametros
return histograma, media, moda, maxDur, minDur, desviacionTipica return histograma, maxDur, minDur, moda, media, desviacionTipica
...@@ -10,7 +10,7 @@ def analisisTiempoMedioPorPagina(registros): ...@@ -10,7 +10,7 @@ def analisisTiempoMedioPorPagina(registros):
# Obtengo los id de las sesiones existentes # Obtengo los id de las sesiones existentes
idsExistentes = getDistintasSesiones(reg) idsExistentes = getDistintasSesiones(reg)
# Obtengo las distintas paginas existentes # Obtengo las distintas paginas existentes
paginas = getDistintasPaginas() paginas = getDistintasPaginas(registros)
# Creo una lista para guardar el tiempo medio que han pasado los usuarios en las paginas # Creo una lista para guardar el tiempo medio que han pasado los usuarios en las paginas
tiempos = [] # El indice del vector tiempos es igual al indice vector paginas tiempos = [] # El indice del vector tiempos es igual al indice vector paginas
max = -1 max = -1
......
...@@ -3,7 +3,7 @@ from datetime import datetime ...@@ -3,7 +3,7 @@ from datetime import datetime
# Definimos la clase dato con: Host Remoto, fecha, metodo de petición, url, protocolo, etc... # Definimos la clase dato con: Host Remoto, fecha, metodo de petición, url, protocolo, etc...
class Dato: class Dato:
#Constructor por defecto para instanciarlo en GUI (No tocar) # Constructor por defecto para instanciarlo en GUI (No tocar)
def __init__(self, cadena): def __init__(self, cadena):
# Atributos # Atributos
self.Host_Remoto = None self.Host_Remoto = None
......
UMBRAL_T=1#<<Parametrizar esto UMBRAL_T = 1 # <<Parametrizar esto
def getFormatosFromCSV(cad): def getFormatosFromCSV(cad):
if cad != "" and cad[len(cad)-1]!=';': if cad != "" and cad[len(cad) - 1] != ';':
cad=cad+';' cad = cad + ';'
ret=[] ret = []
c=0 c = 0
aux="" aux = ""
while c < len(cad): while c < len(cad):
if cad[c] == ';': if cad[c] == ';':
if aux[0]!='.': if aux[0] != '.':
aux='.'+aux aux = '.' + aux
ret.append(aux) ret.append(aux)
aux="" aux = ""
else: else:
aux+=cad[c] aux += cad[c]
c+=1 c += 1
return ret return ret
def ordenarPorSesion(registros): def ordenarPorSesion(registros):
for i in range(len(registros)): for i in range(len(registros)):
for j in range(len(registros)): for j in range(len(registros)):
......
...@@ -7,13 +7,13 @@ from Filtros import eliminarComportamientoAutomatico ...@@ -7,13 +7,13 @@ from Filtros import eliminarComportamientoAutomatico
from AnalisisTMedioPagina import analisisTiempoMedioPorPagina from AnalisisTMedioPagina import analisisTiempoMedioPorPagina
from AnalisisPaginasVisitadas import getEstadisticasPaginasVisitadas from AnalisisPaginasVisitadas import getEstadisticasPaginasVisitadas
RUTA_ARCHIVO = ""#"../access_log_Aug95_reducido" RUTA_ARCHIVO = "" # "../access_log_Aug95_reducido"
E_SPIDERING = True E_SPIDERING = True
EXTENSIONES_ADMITIDAS = [] EXTENSIONES_ADMITIDAS = []
EXTENSIONES_NOADMITIDAS = [] EXTENSIONES_NOADMITIDAS = []
UMBRAL_SESIONES = 1800 UMBRAL_SESIONES = 1800
FACTOR_UMBRAL = 0.5 FACTOR_UMBRAL = 0.5
REG=[] REG = []
''' '''
def printRegistro(registros): def printRegistro(registros):
......
...@@ -2,14 +2,17 @@ from tkinter import filedialog ...@@ -2,14 +2,17 @@ from tkinter import filedialog
from tkinter import * from tkinter import *
from tkinter import ttk from tkinter import ttk
from tkinter import messagebox from tkinter import messagebox
from ObtencionRegistro import obtenerRegistros from GuiEstadisticas import getEstadisticas
from GuiEstadisticas import estadisticasTMedioPag
from eliminarComportamientoAutomatico_GUI import FiltrarComportamientoAutomatico
from AnalisisPaginasVisitadas import getEstadisticasPaginasVisitadas
from AnalisisDuracionSesion import estadisticasDuracionSesiones
from Dato import Dato from Dato import Dato
from Filtros import getFormatosFromCSV from Filtros import getFormatosFromCSV
from VentanaAbrir import VentanaAbrir from VentanaAbrir import VentanaAbrir
from About_GUI import VentanaAbout from About_GUI import VentanaAbout
from Gestor import * from Gestor import *
#r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS, UMBRAL_SESIONES)
def f_abrir(): def f_abrir():
global RUTA_ARCHIVO global RUTA_ARCHIVO
...@@ -17,17 +20,17 @@ def f_abrir(): ...@@ -17,17 +20,17 @@ def f_abrir():
filetypes=( filetypes=(
("all files", "*.*"), ("txt files", "*.txt"), ("log files", "*.log"))) ("all files", "*.*"), ("txt files", "*.txt"), ("log files", "*.log")))
v=VentanaAbrir() v = VentanaAbrir()
global EXTENSIONES_ADMITIDAS global EXTENSIONES_ADMITIDAS
EXTENSIONES_ADMITIDAS= getFormatosFromCSV(v.formadmin.get()) EXTENSIONES_ADMITIDAS = getFormatosFromCSV(v.formadmin.get())
global EXTENSIONES_NOADMITIDAS global EXTENSIONES_NOADMITIDAS
EXTENSIONES_NOADMITIDAS = getFormatosFromCSV(v.formnoadmin.get()) EXTENSIONES_NOADMITIDAS = getFormatosFromCSV(v.formnoadmin.get())
global E_SPIDERING global E_SPIDERING
E_SPIDERING=v.es!=0 E_SPIDERING = v.es != 0
global UMBRAL_SESIONES global UMBRAL_SESIONES
try: try:
UMBRAL_SESIONES=int(float(v.umb.get())) UMBRAL_SESIONES = int(float(v.umb.get()))
except: except:
UMBRAL_SESIONES = 1800 UMBRAL_SESIONES = 1800
v.cerrarVentana() v.cerrarVentana()
...@@ -41,8 +44,43 @@ def f_abrir(): ...@@ -41,8 +44,43 @@ def f_abrir():
def f_salir(): def f_salir():
quit() quit()
def about(): def about():
v=VentanaAbout() v = VentanaAbout()
def fDurSes():
global REG
if len(REG) > 0:
histograma, maxDur, minDur, moda, media, desviacionTipica = estadisticasDuracionSesiones(REG)
getEstadisticas(histograma, maxDur, minDur, moda, media, desviacionTipica)
def fPagVisit():
global REG
if len(REG) > 0:
histograma, maxDur, minDur, moda, media, desviacionTipica = getEstadisticasPaginasVisitadas(REG)
getEstadisticas(histograma, maxDur, minDur, moda, media, desviacionTipica)
def fTmPag():
global REG
if len(REG) > 0:
estadisticasTMedioPag(REG)
def fElimCAuto():
v = FiltrarComportamientoAutomatico()
global UMBRAL_T
try:
UMBRAL_T = float(v.formadmin.get())
except:
UMBRAL_T = 0.5
v.cerrarVentana()
global REG
if len(REG) > 0:
REG = eliminarComportamientoAutomatico(REG)
insertaRegistros()
def barraMenu(ventana): def barraMenu(ventana):
...@@ -63,21 +101,30 @@ def barraMenu(ventana): ...@@ -63,21 +101,30 @@ def barraMenu(ventana):
menu2 = Menu(barramenu) menu2 = Menu(barramenu)
barramenu.add_cascade(menu=menu2, label='Analisis') barramenu.add_cascade(menu=menu2, label='Analisis')
# Boton Abrir # Analisis aqui:
'''menu2.add_command(label='Abrir...', menu2.add_command(label='Duracion sesion',
command=f_abrir, command=fDurSes,
underline=0, compound=RIGHT)
menu2.add_command(label='Paginas visitadas', command=fPagVisit,
underline=0, compound=RIGHT)
menu2.add_command(label='Tiempo Medio Pagina', command=fTmPag,
underline=0, compound=RIGHT)
menu2.add_command(label='Eliminar comportamiento automático', command=fElimCAuto,
underline=0, compound=RIGHT) underline=0, compound=RIGHT)
menu2.add_separator() # Agrega un separador
# Boton Salir
menu2.add_command(label='Salir', command=f_salir,
underline=0, compound=RIGHT)'''
menu3 = Menu(barramenu) menu3 = Menu(barramenu)
barramenu.add_cascade(menu=menu3, label='Ayuda') barramenu.add_cascade(menu=menu3, label='Cesta')
menu3.add_command(label='About...', menu3.add_command(label='Generar cesta...',
command=about, command=about,
underline=0, compound=RIGHT) underline=0, compound=RIGHT)
menu4 = Menu(barramenu)
barramenu.add_cascade(menu=menu4, label='Ayuda')
menu4.add_command(label='About...',
command=about,
underline=0, compound=RIGHT)
def getDatosRegistro(registro, atributos): def getDatosRegistro(registro, atributos):
ret = [] ret = []
for a in atributos: for a in atributos:
...@@ -89,6 +136,7 @@ def getDatosRegistro(registro, atributos): ...@@ -89,6 +136,7 @@ def getDatosRegistro(registro, atributos):
aux.append(ret[0]) aux.append(ret[0])
return aux return aux
def insertaRegistros(): def insertaRegistros():
tabla.delete(*tabla.get_children()) tabla.delete(*tabla.get_children())
global REG global REG
...@@ -96,42 +144,38 @@ def insertaRegistros(): ...@@ -96,42 +144,38 @@ def insertaRegistros():
tabla.insert("", END, values=getDatosRegistro(r, atributos)) tabla.insert("", END, values=getDatosRegistro(r, atributos))
#Creo la ventana # Creo la ventana
ventana=Tk() ventana = Tk()
ventana.state('zoomed') ventana.state('zoomed')
ventana.title("Analizador de Logs") ventana.title("Analizador de Logs")
#Obtengo los atributos de la clase dato # Obtengo los atributos de la clase dato
atributos=Dato("").__dict__ atributos = Dato("").__dict__
nombresAtributos=[] nombresAtributos = []
for n in atributos: for n in atributos:
nombresAtributos.append(n) nombresAtributos.append(n)
# Creo la tabla y relleno las cabeceras
#Creo la tabla y relleno las cabeceras tabla = ttk.Treeview(ventana, height=100, columns=[f"#{n}" for n in range(0, len(nombresAtributos))])
tabla=ttk.Treeview(ventana,height=100,columns=[f"#{n}" for n in range(0, len(nombresAtributos))])
tabla.grid_propagate(True) tabla.grid_propagate(True)
tabla.config(show='headings') tabla.config(show='headings')
tabla.grid(row=0, column=0,sticky='ns') tabla.grid(row=0, column=0, sticky='ns')
c=0 c = 0
ventana.update() ventana.update()
ancho=ventana.winfo_width() ancho = ventana.winfo_width()
for i in nombresAtributos: for i in nombresAtributos:
tabla.heading('#' + str(c) + '', text=i) tabla.heading('#' + str(c) + '', text=i)
tabla.column('#' + str(c) + '', width=(ancho//len(nombresAtributos)), anchor=CENTER) tabla.column('#' + str(c) + '', width=(ancho // len(nombresAtributos)), anchor=CENTER)
c+=1 c += 1
tabla.heading('#' + str(c) + '', text=nombresAtributos[0]) tabla.heading('#' + str(c) + '', text=nombresAtributos[0])
#Scrollbar # Scrollbar
vsb = ttk.Scrollbar(ventana, orient="vertical", command=tabla.yview) vsb = ttk.Scrollbar(ventana, orient="vertical", command=tabla.yview)
vsb.place(x=ancho-15, y=25, height=ventana.winfo_height()-35) vsb.place(x=ancho - 15, y=25, height=ventana.winfo_height() - 35)
tabla.configure(yscrollcommand=vsb.set) tabla.configure(yscrollcommand=vsb.set)
barraMenu(ventana) barraMenu(ventana)
ventana.mainloop()
ventana.mainloop()
\ No newline at end of file
import matplotlib.pyplot as plt
import numpy as np
from tkinter import messagebox
from AnalisisTMedioPagina import analisisTiempoMedioPorPagina
def getEstadisticas(histograma, max, min, moda, media, desviacionTipica):
l = []
for i in range(len(histograma)):
l.append(i)
arrayHisto = np.array(histograma)
arrayY = np.array(l)
plt.bar(arrayHisto, arrayY, align="center")
plt.title("Histograma")
plt.show()
cad = "Max:" + str(max) + " Min:" + str(min) + " Moda:" + str(moda) + " Media:" + str(
round(media, 2)) + " DV:" + str(round(desviacionTipica, 2))
messagebox.showinfo(message=cad, title="Estadisticas")
def estadisticasTMedioPag(reg):
paginas, tiempos, histograma = analisisTiempoMedioPorPagina(reg)
fig = plt.figure("Estadisticas")
g1 = fig.add_subplot(211)
g2 = fig.add_subplot(212)
tmp = np.array(tiempos)
g1.bar(paginas, tmp, align="center")
g1.set_xticks(paginas)
# g1.set_xtickslabels(paginas)
g1.set_ylabel("Tiempo Medio")
l = []
for i in range(len(histograma)):
l.append(i)
arrayHisto = np.array(histograma)
arrayY = np.array(l)
g2.bar(arrayHisto, arrayY, align="center")
g2.set_ylabel("Histograma")
plt.show()
import tkinter as ttk import tkinter as ttk
from tkinter import * from tkinter import *
class VentanaAbrir: class VentanaAbrir:
def __init__(self): def __init__(self):
self.es=IntVar() self.es = IntVar()
self.app = Tk() self.app = Tk()
self.app.title("Abrir...") self.app.title("Abrir...")
self.app.geometry('450x200') self.app.geometry('450x200')
checkb = ttk.Checkbutton(self.app, text="eSpidering",variable=self.es,onvalue=1,offvalue=0) checkb = ttk.Checkbutton(self.app, text="eSpidering", variable=self.es, onvalue=1, offvalue=0)
checkb.place(x=40, y=30) checkb.place(x=40, y=30)
self.lb1 = ttk.Label(self.app, text="Formatos admitidos (separar con ;):") self.lb1 = ttk.Label(self.app, text="Formatos admitidos (separar con ;):")
self.lb1.place(x=40, y=60) self.lb1.place(x=40, y=60)
...@@ -25,7 +26,6 @@ class VentanaAbrir: ...@@ -25,7 +26,6 @@ class VentanaAbrir:
self.boton = ttk.Button(self.app, text="Aceptar", command=self.app.quit) self.boton = ttk.Button(self.app, text="Aceptar", command=self.app.quit)
self.boton.place(x=150, y=160) self.boton.place(x=150, y=160)
self.app.mainloop() self.app.mainloop()
print("destruido...")
def cerrarVentana(self): def cerrarVentana(self):
self.app.destroy() self.app.destroy()
\ No newline at end of file
import tkinter as ttk
from tkinter import *
class FiltrarComportamientoAutomatico:
def __init__(self):
self.app = Tk()
self.app.title("Eliminar comportamiento automatico")
self.app.geometry('650x100')
lb1 = ttk.Label(self.app, text="Considerar comportamiento automatico con un tiempo medio por pagina menor a: ")
lb1.place(x=40, y=30)
self.formadmin = ttk.Entry(self.app)
self.formadmin.place(x=500, y=30)
self.boton = ttk.Button(self.app, text="Aceptar", command=self.app.quit)
self.boton.place(x=40, y=60)
self.app.mainloop()
def cerrarVentana(self):
self.app.destroy()
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 sign in to comment