Tabla registros GUI funcionando

parent 75e9b958
...@@ -8,14 +8,14 @@ def getDuracionSesion(id, registrosOrdenados): ...@@ -8,14 +8,14 @@ def getDuracionSesion(id, registrosOrdenados):
iMin = -1 iMin = -1
iMax = -1 iMax = -1
for i in range(len(registrosOrdenados)): for i in range(len(registrosOrdenados)):
if registrosOrdenados[i].idSesion == id: if registrosOrdenados[i].ID_Sesion == id:
if iMin == -1: if iMin == -1:
iMin = i iMin = i
else: else:
iMax = i iMax = i
if -1 == iMax: # Si solo se ha hecho un acceso en la sesion, devolvemos None para ignorar la sesion if -1 == iMax: # Si solo se ha hecho un acceso en la sesion, devolvemos None para ignorar la sesion
return None return None
return abs(registrosOrdenados[iMax].marcaTiempo - registrosOrdenados[iMin].marcaTiempo) return abs(registrosOrdenados[iMax].Marca_Tiempo - registrosOrdenados[iMin].Marca_Tiempo)
def estadisticasDuracionSesiones(registros): def estadisticasDuracionSesiones(registros):
......
...@@ -13,8 +13,8 @@ def getEstadisticasPaginasVisitadas(registros): ...@@ -13,8 +13,8 @@ def getEstadisticasPaginasVisitadas(registros):
for p in paginas: for p in paginas:
sesiones = set() sesiones = set()
for r in registros: for r in registros:
if r.url == p: if r.URL_Solicitada == p:
sesiones.add(r.idSesion) sesiones.add(r.ID_Sesion)
cantidad = len(sesiones) cantidad = len(sesiones)
ocurrencias.append(cantidad) ocurrencias.append(cantidad)
if max < cantidad: if max < cantidad:
......
...@@ -26,12 +26,12 @@ def obtenerDirectorios(registros, umbral): ...@@ -26,12 +26,12 @@ def obtenerDirectorios(registros, umbral):
# Obtenemos los registros diferentes con sus contadores # Obtenemos los registros diferentes con sus contadores
for r in registros: for r in registros:
if r.url not in directorios: if r.URL_Solicitada not in directorios:
directorios.append(r.url) directorios.append(r.URL_Solicitada)
contadores.append(1) contadores.append(1)
sesiones.append(r.idSesion) sesiones.append(r.ID_Sesion)
else: else:
pos = directorios.index(r.url) pos = directorios.index(r.URL_Solicitada)
contadores[pos] += 1 contadores[pos] += 1
directorios, contadores, sesiones = quitarExcluidos(directorios, contadores, sesiones, umbral) directorios, contadores, sesiones = quitarExcluidos(directorios, contadores, sesiones, umbral)
......
...@@ -3,24 +3,27 @@ from datetime import datetime ...@@ -3,24 +3,27 @@ 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)
def __init__(self, cadena): def __init__(self, cadena):
# Atributos # Atributos
self.hostRemoto = None self.Host_Remoto = None
self.fecha = None self.Fecha = None
self.metodoPeticion = None self.Metodo_Peticion = None
self.url = None self.URL_Solicitada = None
self.vProtocolo = None self.V_Protocolo = None
self.statusCode = None self.Status_Code = None
self.volumenTransf = None self.V_Transferencia = None
self.marcaTiempo = None self.Marca_Tiempo = None
# Otros atributos que se agregaran posteriormente en gestor # Otros atributos que se agregaran posteriormente en gestor
self.idUsuario = None self.ID_Usuario = None
self.idSesion = None self.ID_Sesion = None
# Se obtienen todos los datos # Se obtienen todos los datos
self.obtenerDatos(cadena) try:
self.obtenerDatos(cadena)
except:
pass
# Funcion que asigna los valores debidos a la clase # Funcion que asigna los valores debidos a la clase
def obtenerDatos(self, cadena): def obtenerDatos(self, cadena):
...@@ -29,44 +32,44 @@ class Dato: ...@@ -29,44 +32,44 @@ class Dato:
aux = "" aux = ""
# Obtenemos todos los valores necesarios, hostRemoto, fecha # Obtenemos todos los valores necesarios, hostRemoto, fecha
self.hostRemoto, c = sacarLinea(cadena, c, aux, ' ') self.Host_Remoto, c = sacarLinea(cadena, c, aux, ' ')
self.fecha, c = leerFecha(cadena, c, aux) self.Fecha, c = leerFecha(cadena, c, aux)
# Obtenemos modo de petición, url y protocolo # Obtenemos modo de petición, url y protocolo
c = leerLinea(cadena, c, '"') c = leerLinea(cadena, c, '"')
self.metodoPeticion, c = sacarLinea(cadena, c, aux, ' ') self.Metodo_Peticion, c = sacarLinea(cadena, c, aux, ' ')
self.url, c = sacarLinea(cadena, c, aux, ' ') self.URL_Solicitada, c = sacarLinea(cadena, c, aux, ' ')
self.vProtocolo, c = sacarLinea(cadena, c, aux, '"') self.V_Protocolo, c = sacarLinea(cadena, c, aux, '"')
# Obtenemos estado del código y el volumen de tranferencia # Obtenemos estado del código y el volumen de tranferencia
c += 1 c += 1
self.statusCode, c = sacarLinea(cadena, c, aux, ' ') self.Status_Code, c = sacarLinea(cadena, c, aux, ' ')
self.volumenTransf, c = sacarLinea(cadena, c, aux, ' ') self.V_Transferencia, c = sacarLinea(cadena, c, aux, ' ')
# Obtenemos la marca de tiempo segun al primer dia de agosto de 1995 (priemera entrada) y la fecha del registro # Obtenemos la marca de tiempo segun al primer dia de agosto de 1995 (priemera entrada) y la fecha del registro
fechaRegistro = self.fecha.timestamp() fechaRegistro = self.Fecha.timestamp()
fechaBase = datetime.strptime("01/08/1995:00:00:00", '%d/%m/%Y:%H:%M:%S').timestamp() fechaBase = datetime.strptime("01/08/1995:00:00:00", '%d/%m/%Y:%H:%M:%S').timestamp()
self.marcaTiempo = int(fechaRegistro - fechaBase) self.Marca_Tiempo = int(fechaRegistro - fechaBase)
# Se consideran valores erroneos, anomalos o nulos para descartarse este dato (se ignora # Se consideran valores erroneos, anomalos o nulos para descartarse este dato (se ignora
def isPerdido(self): def isPerdido(self):
if self.hostRemoto is None: if self.Host_Remoto is None:
return True return True
if self.fecha is None: if self.Fecha is None:
return True return True
if self.metodoPeticion is None: if self.Metodo_Peticion is None:
return True return True
if self.url is None: if self.URL_Solicitada is None:
return True return True
if self.vProtocolo is None: if self.V_Protocolo is None:
return True return True
if self.statusCode is None: if self.Status_Code is None:
return True return True
if self.volumenTransf is None: if self.V_Transferencia is None:
return True return True
if self.marcaTiempo is None: if self.Marca_Tiempo is None:
return True return True
if self.marcaTiempo < 0: if self.Marca_Tiempo < 0:
return True return True
return False return False
......
...@@ -3,7 +3,7 @@ UMBRAL_T=1#<<Parametrizar esto ...@@ -3,7 +3,7 @@ UMBRAL_T=1#<<Parametrizar esto
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)):
if registros[i].idSesion < registros[j].idSesion: if registros[i].ID_Sesion < registros[j].ID_Sesion:
registros[i], registros[j] = registros[j], registros[i] registros[i], registros[j] = registros[j], registros[i]
return registros return registros
...@@ -11,14 +11,14 @@ def ordenarPorSesion(registros): ...@@ -11,14 +11,14 @@ def ordenarPorSesion(registros):
def getDistintasSesiones(registros): def getDistintasSesiones(registros):
s = set() s = set()
for r in registros: for r in registros:
s.add(r.idSesion) s.add(r.ID_Sesion)
return list(s) return list(s)
def getDistintasPaginas(registros): def getDistintasPaginas(registros):
paginas = set() paginas = set()
for r in registros: for r in registros:
paginas.add(r.url) paginas.add(r.URL_Solicitada)
return list(paginas) return list(paginas)
...@@ -27,8 +27,8 @@ def getDistintasPaginas(registros): ...@@ -27,8 +27,8 @@ def getDistintasPaginas(registros):
def getTiempoEnPagina(id, pagina, registros): def getTiempoEnPagina(id, pagina, registros):
s = 0 # <-- Suma de los tiempos pasados entre paginas s = 0 # <-- Suma de los tiempos pasados entre paginas
for i in range(len(registros) - 1): for i in range(len(registros) - 1):
if registros[i].url == pagina and registros[i].idSesion == id and registros[i + 1].idSesion == id: if registros[i].URL_Solicitada == pagina and registros[i].ID_Sesion == id and registros[i + 1].ID_Sesion == id:
s += abs(registros[i + 1].marcaTiempo - registros[i].marcaTiempo) s += abs(registros[i + 1].Marca_Tiempo - registros[i].Marca_Tiempo)
return s return s
...@@ -36,25 +36,25 @@ def getTiempoEnPagina(id, pagina, registros): ...@@ -36,25 +36,25 @@ def getTiempoEnPagina(id, pagina, registros):
def eliminarComportamientoAutomatico(registros): def eliminarComportamientoAutomatico(registros):
# Ordeno por sesion # Ordeno por sesion
reg = ordenarPorSesion(registros) reg = ordenarPorSesion(registros)
sesionActual = reg[0].idSesion sesionActual = reg[0].ID_Sesion
iMin = -1 iMin = -1
iMax = -1 iMax = -1
idSesionesNoValidas = set() idSesionesNoValidas = set()
for i in range(len(reg)): for i in range(len(reg)):
if reg[i].idSesion == sesionActual: if reg[i].ID_Sesion == sesionActual:
if iMin == -1: if iMin == -1:
iMin = i iMin = i
else: else:
iMax = i iMax = i
else: else:
if iMin != iMax: # <--- Si ha visitado mas de dos paginas en la sesion miro el tiempo if iMin != iMax: # <--- Si ha visitado mas de dos paginas en la sesion miro el tiempo
tiempo = abs(reg[iMax].marcaTiempo - reg[iMin].marcaTiempo) tiempo = abs(reg[iMax].Marca_Tiempo - reg[iMin].Marca_Tiempo)
if tiempo < UMBRAL_T: if tiempo < UMBRAL_T:
idSesionesNoValidas.add(sesionActual) idSesionesNoValidas.add(sesionActual)
sesionActual = reg[i].idSesion sesionActual = reg[i].ID_Sesion
# Me quedo con los registros con ids validos # Me quedo con los registros con ids validos
ret = [] ret = []
for r in reg: for r in reg:
if r.idSesion not in idSesionesNoValidas: if r.ID_Sesion not in idSesionesNoValidas:
ret.append(r) ret.append(r)
return ret return ret
...@@ -25,8 +25,8 @@ def printRegistro(registros): ...@@ -25,8 +25,8 @@ def printRegistro(registros):
i = 0 i = 0
for reg in registros: for reg in registros:
i += 1 i += 1
print(informe.format(i, reg.hostRemoto, reg.fecha, reg.metodoPeticion, reg.url, reg.vProtocolo, print(informe.format(i, reg.Host_Remoto, reg.Fecha, reg.Metodo_Peticion, reg.URL_Solicitada, reg.V_Protocolo,
reg.statusCode, reg.volumenTransf, reg.marcaTiempo, reg.idUsuario, reg.idSesion) reg.Status_Code, reg.V_Transferencia, reg.Marca_Tiempo, reg.ID_Usuario, reg.ID_Sesion)
) )
...@@ -78,12 +78,3 @@ printDirectorios(d, cont, num_dir, num_reg) ...@@ -78,12 +78,3 @@ printDirectorios(d, cont, num_dir, num_reg)
cesta = obtenerCestaTransformada(d, ses) cesta = obtenerCestaTransformada(d, ses)
printCestaTransformada(cesta) printCestaTransformada(cesta)
''' '''
histograma, max, min, moda, media, desviacionTipica=getEstadisticasPaginasVisitadas(r)
print("Max:"+str(max)+"\n")
print("Min:"+str(min)+"\n")
print("Moda:"+str(moda)+"\n")
print("Media:"+str(media)+"\n")
print("DV:"+str(desviacionTipica)+"\n")
print(histograma)
\ No newline at end of file
from tkinter import*
from tkinter import ttk
from tkinter import messagebox
from Gui_Utils import rellenarTablaRegistros
from ObtencionRegistro import obtenerRegistros
from Dato import Dato
from Gestor import *
r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS, UMBRAL_SESIONES)
#Creo la ventana
ventana=Tk()
ventana.state('zoomed')
ventana.title("Analizador de Logs")
#Obtengo los atributos de la clase dato
atributos=Dato("").__dict__
nombresAtributos=[]
for n in atributos:
nombresAtributos.append(n)
#Creo la tabla y relleno las cabeceras
tabla=ttk.Treeview(ventana,height=100,columns=[f"#{n}" for n in range(0, len(nombresAtributos))])
tabla.grid_propagate(True)
tabla.config(show='headings')
tabla.grid(row=0, column=0,sticky='ns')
c=0
ventana.update()
x=ventana.winfo_width()
for i in nombresAtributos:
tabla.heading('#' + str(c) + '', text=i)
tabla.column('#' + str(c) + '', width=(x//len(nombresAtributos)), anchor=CENTER)
c+=1
tabla.heading('#' + str(c) + '', text=nombresAtributos[0])
rellenarTablaRegistros(r,tabla,nombresAtributos)
ventana.mainloop()
\ No newline at end of file
from tkinter import *
def getDatosRegistro(registro,atributos):
ret=[]
for a in atributos:
ret.append(getattr(registro,a))
aux=[]
for i in range(1,len(ret)):
aux.append(ret[i])
aux.append(ret[0])
return aux
def rellenarTablaRegistros(registros, tabla,atributos):
index = iid = 0
for r in registros:
tabla.insert("", END, values=getDatosRegistro(r,atributos))
...@@ -36,7 +36,7 @@ def obtenerDato(ret, extensionesAdmitidas, extensionesNoAdmitidas, aux): ...@@ -36,7 +36,7 @@ def obtenerDato(ret, extensionesAdmitidas, extensionesNoAdmitidas, aux):
# Compruebo si el dato pertenece a una extension NO admitida # Compruebo si el dato pertenece a una extension NO admitida
admitir = True admitir = True
for ext in extensionesNoAdmitidas: for ext in extensionesNoAdmitidas:
if ext in aux.url: if ext in aux.URL_Solicitada:
admitir = False admitir = False
# Si no se corresponde con ninguna extension NO admitida, compruebo si hay que filtrar con las admitidas # Si no se corresponde con ninguna extension NO admitida, compruebo si hay que filtrar con las admitidas
...@@ -46,7 +46,7 @@ def obtenerDato(ret, extensionesAdmitidas, extensionesNoAdmitidas, aux): ...@@ -46,7 +46,7 @@ def obtenerDato(ret, extensionesAdmitidas, extensionesNoAdmitidas, aux):
else: else:
# Filtro con las admitidas # Filtro con las admitidas
for ext in extensionesAdmitidas: for ext in extensionesAdmitidas:
if ext in aux.url: if ext in aux.URL_Solicitada:
ret.append(aux) ret.append(aux)
return ret return ret
...@@ -58,7 +58,7 @@ def eSpidering(reg): ...@@ -58,7 +58,7 @@ def eSpidering(reg):
c = 0 c = 0
for r in reg: for r in reg:
for q in aQuitar: for q in aQuitar:
if q in r.hostRemoto.lower(): if q in r.Host_Remoto.lower():
reg.pop(c) reg.pop(c)
c += 1 c += 1
return reg return reg
...@@ -5,14 +5,14 @@ def identificaciones(registros, umbral): ...@@ -5,14 +5,14 @@ def identificaciones(registros, umbral):
# Se obtienen todos los usuarios # Se obtienen todos los usuarios
for reg in registros: for reg in registros:
ip = reg.hostRemoto ip = reg.Host_Remoto
# Si todavia no se le ha dado un id, se le da y se agrega a la lista de identificados # Si todavia no se le ha dado un id, se le da y se agrega a la lista de identificados
if ip not in idsUsados: if ip not in idsUsados:
cont += 1 cont += 1
reg.idUsuario = cont reg.ID_Usuario = cont
idsUsados.append(ip) idsUsados.append(ip)
else: # Si no, simplemente se agrega el id del que ya disponía else: # Si no, simplemente se agrega el id del que ya disponía
reg.idUsuario = idsUsados.index(ip) + 1 reg.ID_Usuario = idsUsados.index(ip) + 1
return ordenaRegistros(registros, umbral) return ordenaRegistros(registros, umbral)
...@@ -27,11 +27,11 @@ def ordenaRegistros(registros, umbral): ...@@ -27,11 +27,11 @@ def ordenaRegistros(registros, umbral):
reg2 = registros[j + i] reg2 = registros[j + i]
# Se organiza por id usuario si son diferentes # Se organiza por id usuario si son diferentes
if reg2.idUsuario < reg1.idUsuario: if reg2.ID_Usuario < reg1.ID_Usuario:
registros[i] = reg2 registros[i] = reg2
registros[j + i] = reg1 registros[j + i] = reg1
else: # Se organiza por marca de tiempo si son iguales else: # Se organiza por marca de tiempo si son iguales
if reg2.idUsuario is reg1.idUsuario and reg2.marcaTiempo < reg1.marcaTiempo: if reg2.ID_Usuario is reg1.ID_Usuario and reg2.Marca_Tiempo < reg1.Marca_Tiempo:
registros[i] = reg2 registros[i] = reg2
registros[j + i] = reg1 registros[j + i] = reg1
...@@ -41,17 +41,17 @@ def ordenaRegistros(registros, umbral): ...@@ -41,17 +41,17 @@ def ordenaRegistros(registros, umbral):
# Identifica las sesiones de los usuarios # Identifica las sesiones de los usuarios
def identificacionSesiones(registros, umbral): def identificacionSesiones(registros, umbral):
tam = len(registros) tam = len(registros)
registros[0].idSesion = 1 registros[0].ID_Sesion = 1
for i in range(1, tam): for i in range(1, tam):
reg2 = registros[i] reg2 = registros[i]
reg1 = registros[i - 1] reg1 = registros[i - 1]
# Si se supera el umbral o son diferentes usuarios se crea nueva sesion # Si se supera el umbral o son diferentes usuarios se crea nueva sesion
dif = reg2.marcaTiempo - reg1.marcaTiempo dif = reg2.Marca_Tiempo - reg1.Marca_Tiempo
if dif > umbral or reg1.idUsuario is not reg2.idUsuario: if dif > umbral or reg1.ID_Usuario is not reg2.ID_Usuario:
reg2.idSesion = reg1.idSesion + 1 reg2.ID_Sesion = reg1.ID_Sesion + 1
else: # Si no se asigna la sesion antigua else: # Si no se asigna la sesion antigua
reg2.idSesion = reg1.idSesion reg2.ID_Sesion = reg1.ID_Sesion
return registros return registros
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