Tabla registros GUI funcionando

parent 75e9b958
......@@ -8,14 +8,14 @@ def getDuracionSesion(id, registrosOrdenados):
iMin = -1
iMax = -1
for i in range(len(registrosOrdenados)):
if registrosOrdenados[i].idSesion == id:
if registrosOrdenados[i].ID_Sesion == id:
if iMin == -1:
iMin = i
else:
iMax = i
if -1 == iMax: # Si solo se ha hecho un acceso en la sesion, devolvemos None para ignorar la sesion
return None
return abs(registrosOrdenados[iMax].marcaTiempo - registrosOrdenados[iMin].marcaTiempo)
return abs(registrosOrdenados[iMax].Marca_Tiempo - registrosOrdenados[iMin].Marca_Tiempo)
def estadisticasDuracionSesiones(registros):
......
......@@ -13,8 +13,8 @@ def getEstadisticasPaginasVisitadas(registros):
for p in paginas:
sesiones = set()
for r in registros:
if r.url == p:
sesiones.add(r.idSesion)
if r.URL_Solicitada == p:
sesiones.add(r.ID_Sesion)
cantidad = len(sesiones)
ocurrencias.append(cantidad)
if max < cantidad:
......
......@@ -26,12 +26,12 @@ def obtenerDirectorios(registros, umbral):
# Obtenemos los registros diferentes con sus contadores
for r in registros:
if r.url not in directorios:
directorios.append(r.url)
if r.URL_Solicitada not in directorios:
directorios.append(r.URL_Solicitada)
contadores.append(1)
sesiones.append(r.idSesion)
sesiones.append(r.ID_Sesion)
else:
pos = directorios.index(r.url)
pos = directorios.index(r.URL_Solicitada)
contadores[pos] += 1
directorios, contadores, sesiones = quitarExcluidos(directorios, contadores, sesiones, umbral)
......
......@@ -3,24 +3,27 @@ from datetime import datetime
# Definimos la clase dato con: Host Remoto, fecha, metodo de petición, url, protocolo, etc...
class Dato:
#Constructor por defecto para instanciarlo en GUI (No tocar)
def __init__(self, cadena):
# Atributos
self.hostRemoto = None
self.fecha = None
self.metodoPeticion = None
self.url = None
self.vProtocolo = None
self.statusCode = None
self.volumenTransf = None
self.marcaTiempo = None
self.Host_Remoto = None
self.Fecha = None
self.Metodo_Peticion = None
self.URL_Solicitada = None
self.V_Protocolo = None
self.Status_Code = None
self.V_Transferencia = None
self.Marca_Tiempo = None
# Otros atributos que se agregaran posteriormente en gestor
self.idUsuario = None
self.idSesion = None
self.ID_Usuario = None
self.ID_Sesion = None
# Se obtienen todos los datos
self.obtenerDatos(cadena)
try:
self.obtenerDatos(cadena)
except:
pass
# Funcion que asigna los valores debidos a la clase
def obtenerDatos(self, cadena):
......@@ -29,44 +32,44 @@ class Dato:
aux = ""
# Obtenemos todos los valores necesarios, hostRemoto, fecha
self.hostRemoto, c = sacarLinea(cadena, c, aux, ' ')
self.fecha, c = leerFecha(cadena, c, aux)
self.Host_Remoto, c = sacarLinea(cadena, c, aux, ' ')
self.Fecha, c = leerFecha(cadena, c, aux)
# Obtenemos modo de petición, url y protocolo
c = leerLinea(cadena, c, '"')
self.metodoPeticion, c = sacarLinea(cadena, c, aux, ' ')
self.url, c = sacarLinea(cadena, c, aux, ' ')
self.vProtocolo, c = sacarLinea(cadena, c, aux, '"')
self.Metodo_Peticion, c = sacarLinea(cadena, c, aux, ' ')
self.URL_Solicitada, c = sacarLinea(cadena, c, aux, ' ')
self.V_Protocolo, c = sacarLinea(cadena, c, aux, '"')
# Obtenemos estado del código y el volumen de tranferencia
c += 1
self.statusCode, c = sacarLinea(cadena, c, aux, ' ')
self.volumenTransf, c = sacarLinea(cadena, c, aux, ' ')
self.Status_Code, 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
fechaRegistro = self.fecha.timestamp()
fechaRegistro = self.Fecha.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
def isPerdido(self):
if self.hostRemoto is None:
if self.Host_Remoto is None:
return True
if self.fecha is None:
if self.Fecha is None:
return True
if self.metodoPeticion is None:
if self.Metodo_Peticion is None:
return True
if self.url is None:
if self.URL_Solicitada is None:
return True
if self.vProtocolo is None:
if self.V_Protocolo is None:
return True
if self.statusCode is None:
if self.Status_Code is None:
return True
if self.volumenTransf is None:
if self.V_Transferencia is None:
return True
if self.marcaTiempo is None:
if self.Marca_Tiempo is None:
return True
if self.marcaTiempo < 0:
if self.Marca_Tiempo < 0:
return True
return False
......
......@@ -3,7 +3,7 @@ UMBRAL_T=1#<<Parametrizar esto
def ordenarPorSesion(registros):
for i 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]
return registros
......@@ -11,14 +11,14 @@ def ordenarPorSesion(registros):
def getDistintasSesiones(registros):
s = set()
for r in registros:
s.add(r.idSesion)
s.add(r.ID_Sesion)
return list(s)
def getDistintasPaginas(registros):
paginas = set()
for r in registros:
paginas.add(r.url)
paginas.add(r.URL_Solicitada)
return list(paginas)
......@@ -27,8 +27,8 @@ def getDistintasPaginas(registros):
def getTiempoEnPagina(id, pagina, registros):
s = 0 # <-- Suma de los tiempos pasados entre paginas
for i in range(len(registros) - 1):
if registros[i].url == pagina and registros[i].idSesion == id and registros[i + 1].idSesion == id:
s += abs(registros[i + 1].marcaTiempo - registros[i].marcaTiempo)
if registros[i].URL_Solicitada == pagina and registros[i].ID_Sesion == id and registros[i + 1].ID_Sesion == id:
s += abs(registros[i + 1].Marca_Tiempo - registros[i].Marca_Tiempo)
return s
......@@ -36,25 +36,25 @@ def getTiempoEnPagina(id, pagina, registros):
def eliminarComportamientoAutomatico(registros):
# Ordeno por sesion
reg = ordenarPorSesion(registros)
sesionActual = reg[0].idSesion
sesionActual = reg[0].ID_Sesion
iMin = -1
iMax = -1
idSesionesNoValidas = set()
for i in range(len(reg)):
if reg[i].idSesion == sesionActual:
if reg[i].ID_Sesion == sesionActual:
if iMin == -1:
iMin = i
else:
iMax = i
else:
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:
idSesionesNoValidas.add(sesionActual)
sesionActual = reg[i].idSesion
sesionActual = reg[i].ID_Sesion
# Me quedo con los registros con ids validos
ret = []
for r in reg:
if r.idSesion not in idSesionesNoValidas:
if r.ID_Sesion not in idSesionesNoValidas:
ret.append(r)
return ret
......@@ -25,8 +25,8 @@ def printRegistro(registros):
i = 0
for reg in registros:
i += 1
print(informe.format(i, reg.hostRemoto, reg.fecha, reg.metodoPeticion, reg.url, reg.vProtocolo,
reg.statusCode, reg.volumenTransf, reg.marcaTiempo, reg.idUsuario, reg.idSesion)
print(informe.format(i, reg.Host_Remoto, reg.Fecha, reg.Metodo_Peticion, reg.URL_Solicitada, reg.V_Protocolo,
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)
cesta = obtenerCestaTransformada(d, ses)
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):
# Compruebo si el dato pertenece a una extension NO admitida
admitir = True
for ext in extensionesNoAdmitidas:
if ext in aux.url:
if ext in aux.URL_Solicitada:
admitir = False
# 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):
else:
# Filtro con las admitidas
for ext in extensionesAdmitidas:
if ext in aux.url:
if ext in aux.URL_Solicitada:
ret.append(aux)
return ret
......@@ -58,7 +58,7 @@ def eSpidering(reg):
c = 0
for r in reg:
for q in aQuitar:
if q in r.hostRemoto.lower():
if q in r.Host_Remoto.lower():
reg.pop(c)
c += 1
return reg
......@@ -5,14 +5,14 @@ def identificaciones(registros, umbral):
# Se obtienen todos los usuarios
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
if ip not in idsUsados:
cont += 1
reg.idUsuario = cont
reg.ID_Usuario = cont
idsUsados.append(ip)
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)
......@@ -27,11 +27,11 @@ def ordenaRegistros(registros, umbral):
reg2 = registros[j + i]
# Se organiza por id usuario si son diferentes
if reg2.idUsuario < reg1.idUsuario:
if reg2.ID_Usuario < reg1.ID_Usuario:
registros[i] = reg2
registros[j + i] = reg1
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[j + i] = reg1
......@@ -41,17 +41,17 @@ def ordenaRegistros(registros, umbral):
# Identifica las sesiones de los usuarios
def identificacionSesiones(registros, umbral):
tam = len(registros)
registros[0].idSesion = 1
registros[0].ID_Sesion = 1
for i in range(1, tam):
reg2 = registros[i]
reg1 = registros[i - 1]
# Si se supera el umbral o son diferentes usuarios se crea nueva sesion
dif = reg2.marcaTiempo - reg1.marcaTiempo
if dif > umbral or reg1.idUsuario is not reg2.idUsuario:
reg2.idSesion = reg1.idSesion + 1
dif = reg2.Marca_Tiempo - reg1.Marca_Tiempo
if dif > umbral or reg1.ID_Usuario is not reg2.ID_Usuario:
reg2.ID_Sesion = reg1.ID_Sesion + 1
else: # Si no se asigna la sesion antigua
reg2.idSesion = reg1.idSesion
reg2.ID_Sesion = reg1.ID_Sesion
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