Analisis2.4

parent 49fc0689
import math
# Explora la relacion entre las visitas de pagina y la duración de sesion
from Gestor import FACTOR_UMBRAL from Constantes import FACTOR_UMBRAL
class Cesta: class Cesta:
def __init__(self, directorios, sesiones, tam, i): def __init__(self, directorios, sesiones, tam, i):
...@@ -13,8 +14,7 @@ class Cesta: ...@@ -13,8 +14,7 @@ class Cesta:
def obtenerFlags(self, sesiones, tam): def obtenerFlags(self, sesiones, tam):
# Se rellenan los flags segun si son de la misma sesion o no para cada directorio # Se rellenan los flags segun si son de la misma sesion o no para cada directorio
for i in range(tam): for i in range(tam):
if sesiones[ if sesiones[i] == self.sesion: # Hay que obtener distribuciones de frecuencia aquí o no ############################3
i] == self.sesion: # Hay que obtener distribuciones de frecuencia aquí o no ############################3
self.flags.append(True) self.flags.append(True)
else: else:
self.flags.append(False) self.flags.append(False)
...@@ -23,7 +23,7 @@ class Cesta: ...@@ -23,7 +23,7 @@ class Cesta:
# Se obtienen los directorios aquellos que cumplen el umbral # Se obtienen los directorios aquellos que cumplen el umbral
def obtenerDirectorios(reg): def obtenerDirectorios(reg):
global FACTOR_UMBRAL global FACTOR_UMBRAL
fu=FACTOR_UMBRAL fu = FACTOR_UMBRAL
umbral = int(len(reg) * fu / 100) umbral = int(len(reg) * fu / 100)
directorios = [] directorios = []
...@@ -42,11 +42,11 @@ def obtenerDirectorios(reg): ...@@ -42,11 +42,11 @@ def obtenerDirectorios(reg):
directorios, contadores, sesiones = quitarExcluidos(directorios, contadores, sesiones, umbral) directorios, contadores, sesiones = quitarExcluidos(directorios, contadores, sesiones, umbral)
#Ordeno por contadores # Ordeno por contadores
for i in range(len(directorios)): for i in range(len(directorios)):
for j in range(len(directorios)): for j in range(len(directorios)):
if contadores[i]>contadores[j]: if contadores[i] > contadores[j]:
contadores[i], contadores[j]=contadores[j], contadores[i] contadores[i], contadores[j] = contadores[j], contadores[i]
directorios[i], directorios[j] = directorios[j], directorios[i] directorios[i], directorios[j] = directorios[j], directorios[i]
sesiones[i], sesiones[j] = sesiones[j], sesiones[i] sesiones[i], sesiones[j] = sesiones[j], sesiones[i]
...@@ -59,7 +59,7 @@ def quitarExcluidos(directorios, contadores, sesiones, umbral): ...@@ -59,7 +59,7 @@ def quitarExcluidos(directorios, contadores, sesiones, umbral):
# Indicamos aquellas que no superan el umbral # Indicamos aquellas que no superan el umbral
for i in range(len(contadores)): for i in range(len(contadores)):
if contadores[i] < umbral: if contadores[i] <= umbral:
excluidos.append(i) excluidos.append(i)
# Las sacamos de las listas resultado en orden # Las sacamos de las listas resultado en orden
...@@ -92,5 +92,6 @@ def obtenerCestaTransformada(directorios, sesiones): ...@@ -92,5 +92,6 @@ def obtenerCestaTransformada(directorios, sesiones):
else: # Si no se elimina else: # Si no se elimina
cesta.pop(i - sacadas) cesta.pop(i - sacadas)
sacadas += 1 sacadas += 1
# Agregar aquellas que la referencian también
return cesta return cesta
RUTA_ARCHIVO = "" # "../access_log_Aug95_reducido"
E_SPIDERING = True
EXTENSIONES_ADMITIDAS = []
EXTENSIONES_NOADMITIDAS = []
UMBRAL_SESIONES = 1800
FACTOR_UMBRAL = 0.5
REG = []
from datetime import datetime 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)
...@@ -14,15 +15,18 @@ class Dato: ...@@ -14,15 +15,18 @@ class Dato:
self.V_Transferencia = None self.V_Transferencia = None
self.Marca_Tiempo = None self.Marca_Tiempo = None
# Otros atributos que se agregaran posteriormente en gestor # Otros atributos que se agregaran posteriormente a la creacion del registro dependiendo de los atributos anteriores
self.ID_Usuario = None self.ID_Usuario = None
self.ID_Sesion = None self.ID_Sesion = None
# Se obtienen todos los datos # Se obtienen todos los datos y se comprueban que son valores válidos, y si no se pone cualquiera de ellos a None, para que se descarte
try: try:
self.obtenerDatos(cadena) self.obtenerDatos(cadena)
self.Status_Code = int(self.Status_Code)
self.V_Transferencia = int(self.V_Transferencia)
self.Marca_Tiempo = int(self.Marca_Tiempo)
except: except:
pass self.Status_Code = None
# 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):
...@@ -50,6 +54,7 @@ class Dato: ...@@ -50,6 +54,7 @@ class Dato:
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.Marca_Tiempo = 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.Host_Remoto is None: if self.Host_Remoto is None:
...@@ -70,7 +75,6 @@ class Dato: ...@@ -70,7 +75,6 @@ class Dato:
return True return True
if self.Marca_Tiempo < 0: if self.Marca_Tiempo < 0:
return True return True
return False return False
...@@ -87,6 +91,8 @@ def sacarLinea(cadena, c, aux, signo): ...@@ -87,6 +91,8 @@ def sacarLinea(cadena, c, aux, signo):
while c < len(cadena) and cadena[c] != signo: while c < len(cadena) and cadena[c] != signo:
aux += cadena[c] aux += cadena[c]
c += 1 c += 1
if not aux:
aux = None
return aux, c + 1 return aux, c + 1
...@@ -112,4 +118,4 @@ def modificarFecha(cadena): ...@@ -112,4 +118,4 @@ def modificarFecha(cadena):
mes = i mes = i
numero = numeros[meses.index(i)] numero = numeros[meses.index(i)]
return cadena.replace(mes, numero) return cadena.replace(mes, numero)
\ No newline at end of file
import tkinter as ttk from tkinter import ttk
from tkinter import * from tkinter import *
from Cesta import obtenerDirectorios from Cesta import obtenerDirectorios
class DirectoriosMasSol: class DirectoriosMasSol:
def __init__(self,reg): def __init__(self, reg):
self.v=Tk() self.v = Tk()
self.v.resizable(0, 0) self.v.resizable(0, 0)
self.v.title("Directorios Mas Solicitados") self.v.title("Directorios Mas Solicitados")
self.v.geometry('600x600') self.v.geometry('600x600')
# Se obtienen los directorios con contadores y la cesta
# Se obtienen los directorios con contadores y la cesta
d, cont, ses = obtenerDirectorios(reg) d, cont, ses = obtenerDirectorios(reg)
num_dir = len(d) num_dir = len(d)
# Creo la tabla y relleno las cabeceras # Creo la tabla y relleno las cabeceras
self.tabla = ttk.Treeview(self.v, height=100, columns=[f"#{n}" for n in range(0, 4)]) self.tabla = ttk.Treeview(self.v, height=100, columns=[f"#{n}" for n in range(0, 5)])
scrollbar_vertical = ttk.Scrollbar(self.v, orient='vertical', command=self.tabla.yview) scrollbar_vertical = ttk.Scrollbar(self.v, orient='vertical', command=self.tabla.yview)
scrollbar_horizontal = ttk.Scrollbar(self.v, orient='horizontal', command=self.tabla.xview)
scrollbar_vertical.pack(side='right', fill=Y) scrollbar_vertical.pack(side='right', fill=Y)
self.tabla.configure( yscrollcommand=scrollbar_vertical.set) scrollbar_horizontal.pack(side='bottom', fill=X)
self.tabla.configure(yscrollcommand=scrollbar_vertical.set)
self.tabla.pack(side=LEFT, fill=BOTH, expand=False) self.tabla.pack(side=LEFT, fill=BOTH, expand=False)
self.tabla.config(show='headings') self.tabla.config(show='headings')
self.v.update() self.v.update()
#Cabeceras tabla # Cabeceras tabla
self.tabla.heading('#1', text="Directorio") self.tabla.heading('#1', text="Indice")
self.tabla.column('#1', width=200, anchor=CENTER) self.tabla.column('#1', width=100, anchor=CENTER)
self.tabla.heading('#2', text="Cuenta") self.tabla.heading('#2', text="Sesion")
self.tabla.column('#2', width=200, anchor=CENTER) self.tabla.column('#2', width=100, anchor=CENTER)
self.tabla.heading('#3', text="Sesion") self.tabla.heading('#3', text="Directorio")
self.tabla.column('#3', width=200, anchor=CENTER) self.tabla.column('#3', width=100, anchor=CENTER)
self.tabla.heading('#4', text="Cuenta")
self.tabla.column('#4', width=100, anchor=CENTER)
self.tabla.heading('#5', text="Porcentaje")
self.tabla.column('#5', width=200, anchor=CENTER)
#Inserto los registros # Inserto los registros
self.tabla.delete(*self.tabla.get_children()) self.tabla.delete(*self.tabla.get_children())
for i in range(len(d)): index = 0
aux=[d[i],cont[i],ses[i]] total = [str(index), "Total", "-", len(reg), "100%"]
self.tabla.insert("", END, values=aux) self.tabla.insert("", 'end', values=total)
for i in range(num_dir):
self.v.mainloop() index += 1
\ No newline at end of file per = ("{:.2f}".format(cont[i]/len(reg) * 100) + "%")
aux = [str(index), ses[i], d[i], cont[i], per]
self.tabla.insert("", 'end', values=aux)
self.v.mainloop()
RUTA_ARCHIVO = "" # "../access_log_Aug95_reducido"
E_SPIDERING = True
EXTENSIONES_ADMITIDAS = []
EXTENSIONES_NOADMITIDAS = []
UMBRAL_SESIONES = 1800
FACTOR_UMBRAL = 0.5
REG = []
'''
def printRegistro(registros):
print("RESULTADOS: ")
informe = (
" - REGISTRO {} -\nHost Remoto: {}\nFecha: {}\nMetodo de Petición: {}\nURL: {}\nProtocolo: {}\nStatus Code: {}\n"
"Volumen de Transferencia: {}Marca de Tiempo: {}\nId Usuario: {}\nId Sesion: {}\n"
)
i = 0
for reg in registros:
i += 1
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)
)
def printDirectorios(d, cont, num_dir, num_reg):
print("DIRECTORIOS MÁS SOLICITADOS (<0.5%): ")
barra = "="
informe = (" - VALOR {} -\nDirectorio: {}\nP(%): {}\nCuenta: {}\nProporción: [{}]\n")
# Se imprime el total de directorios incluidos
total = 0
for suma in cont:
total += suma
barra *= total
print(informe.format("TOTAL", " ", '%.2f' % (total * 100 / num_reg), total, barra))
# Se imprimen todos los directorios
for i in range(num_dir):
c = cont[i]
barra = "=" * c
print(informe.format(i + 1, d[i], '%.2f' % (c * 100 / num_reg), c, barra))
def printCestaTransformada(cesta):
print("CESTA TRANSFORMADA: \n")
informe = ("Sesion: {}\nPagina: {}")
flags = ("{}: {}")
for c in cesta:
print(informe.format(c.sesion, c.pagina))
for i in range(len(c.directorios)):
print(flags.format(c.directorios[i], c.flags[i]))
print("\n")
return
# Se crean los registros, identificando usuarios y sesiones y se muestran
r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS, UMBRAL_SESIONES)
num_reg = len(r)
# printRegistro(r)
# Se obtienen los directorios con contadores y la cesta
umbral = int(num_reg * FACTOR_UMBRAL / 100)
d, cont, ses = obtenerDirectorios(r, umbral)
num_dir = len(d)
printDirectorios(d, cont, num_dir, num_reg)
# Obtiene cesta transformada y la muestra
cesta = obtenerCestaTransformada(d, ses)
printCestaTransformada(cesta)
'''
...@@ -14,8 +14,7 @@ from Filtros import eliminarComportamientoAutomatico ...@@ -14,8 +14,7 @@ from Filtros import eliminarComportamientoAutomatico
from VentanaAbrir import VentanaAbrir from VentanaAbrir import VentanaAbrir
from About_GUI import VentanaAbout from About_GUI import VentanaAbout
from TransfCesta import TransformarCesta from TransfCesta import TransformarCesta
from Gestor import REG from Constantes import REG
def f_abrir(): def f_abrir():
...@@ -35,7 +34,7 @@ def f_abrir(): ...@@ -35,7 +34,7 @@ def f_abrir():
global UMBRAL_SESIONES global UMBRAL_SESIONES
try: try:
UMBRAL_SESIONES = int(float(v.umb.get())) UMBRAL_SESIONES = int(float(v.umb.get()))
except: finally:
UMBRAL_SESIONES = 1800 UMBRAL_SESIONES = 1800
v.cerrarVentana() v.cerrarVentana()
global REG global REG
...@@ -78,7 +77,7 @@ def fElimCAuto(): ...@@ -78,7 +77,7 @@ def fElimCAuto():
global UMBRAL_T global UMBRAL_T
try: try:
UMBRAL_T = float(v.formadmin.get()) UMBRAL_T = float(v.formadmin.get())
except: finally:
UMBRAL_T = 0.5 UMBRAL_T = 0.5
v.cerrarVentana() v.cerrarVentana()
global REG global REG
...@@ -86,16 +85,19 @@ def fElimCAuto(): ...@@ -86,16 +85,19 @@ def fElimCAuto():
REG = eliminarComportamientoAutomatico(REG) REG = eliminarComportamientoAutomatico(REG)
insertaRegistros() insertaRegistros()
def fMasDSol(): def fMasDSol():
global REG global REG
if len(REG)>0: if len(REG) > 0:
v=DirectoriosMasSol(REG) v = DirectoriosMasSol(REG)
def fTransCest(): def fTransCest():
global REG global REG
if len(REG) > 0: if len(REG) > 0:
v = TransformarCesta(REG) v = TransformarCesta(REG)
def barraMenu(ventana): def barraMenu(ventana):
# DEFINIR BARRA DE MENÚ DE LA APLICACION: # DEFINIR BARRA DE MENÚ DE LA APLICACION:
barramenu = Menu(ventana) barramenu = Menu(ventana)
...@@ -140,24 +142,29 @@ def barraMenu(ventana): ...@@ -140,24 +142,29 @@ def barraMenu(ventana):
command=about, command=about,
underline=0, compound=RIGHT) underline=0, compound=RIGHT)
# Obtiene los datos del registro para insertarlos en la tabla
def getDatosRegistro(registro, atributos): def getDatosRegistro(registro, atributos, contador):
ret = [] ret = []
for a in atributos: for a in atributos:
ret.append(getattr(registro, a)) ret.append(getattr(registro, a))
aux = [] aux = []
for i in range(1, len(ret)): aux.append(contador)
for i in range(len(ret)):
aux.append(ret[i]) aux.append(ret[i])
aux.append(ret[0]) aux.append("")
return aux
return aux
# Inserta cada tupla de todos los registros
def insertaRegistros(): def insertaRegistros():
tabla.delete(*tabla.get_children()) tabla.delete(*tabla.get_children())
global REG global REG
cont = 1
for r in REG: for r in REG:
tabla.insert("", END, values=getDatosRegistro(r, atributos)) val = getDatosRegistro(r, atributos, cont)
tabla.insert('', 'end', values=val)
cont += 1
# Creo la ventana # Creo la ventana
...@@ -167,18 +174,22 @@ ventana.title("Analizador de Logs") ...@@ -167,18 +174,22 @@ 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 = []
nombresAtributos.append("")
nombresAtributos.append("Num_Registro")
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(len(nombresAtributos))])
scrollbar_vertical = ttk.Scrollbar(ventana, orient='vertical', command=tabla.yview) scrollbar_vertical = ttk.Scrollbar(ventana, orient='vertical', command=tabla.yview)
scrollbar_vertical.pack(side='right', fill=Y) scrollbar_vertical.pack(side='right', fill=Y)
tabla.configure( yscrollcommand=scrollbar_vertical.set) scrollbar_horizontal = ttk.Scrollbar(ventana, orient='horizontal', command=tabla.xview)
scrollbar_horizontal.pack(side='bottom', fill=X)
tabla.configure(yscrollcommand=scrollbar_vertical.set)
tabla.pack(side=LEFT, fill=BOTH, expand=False) tabla.pack(side=LEFT, fill=BOTH, expand=False)
tabla.config(show='headings') tabla.config(show='headings')
c = 0 c = 0
ventana.update() ventana.update()
......
...@@ -61,4 +61,4 @@ def eSpidering(reg): ...@@ -61,4 +61,4 @@ def eSpidering(reg):
if q in r.Host_Remoto.lower(): if q in r.Host_Remoto.lower():
reg.pop(c) reg.pop(c)
c += 1 c += 1
return reg return reg
\ No newline at end of file
import tkinter as ttk from tkinter import ttk
from tkinter import * from tkinter import *
from Cesta import obtenerDirectorios from Cesta import obtenerDirectorios
from Cesta import obtenerCestaTransformada from Cesta import obtenerCestaTransformada
from Gestor import FACTOR_UMBRAL from Constantes import FACTOR_UMBRAL
class TransformarCesta: class TransformarCesta:
def __init__(self,reg): def __init__(self, reg):
# Se obtienen los directorios con contadores y la cesta # Se obtienen los directorios con contadores y la cesta
global FACTOR_UMBRAL global FACTOR_UMBRAL
umbral = int(len(reg) * FACTOR_UMBRAL / 100) umbral = int(len(reg) * FACTOR_UMBRAL / 100)
...@@ -16,16 +17,14 @@ class TransformarCesta: ...@@ -16,16 +17,14 @@ class TransformarCesta:
# Obtiene cesta transformada y la muestra # Obtiene cesta transformada y la muestra
cesta = obtenerCestaTransformada(d, ses) cesta = obtenerCestaTransformada(d, ses)
#Creo ventana # Creo ventana
self.v=Tk() self.v = Tk()
self.v.state('zoomed') self.v.state('zoomed')
self.v.title("Cesta transformada") self.v.title("Cesta transformada")
self.v.geometry('800x600') self.v.geometry('800x600')
# Creo tabla
self.tabla = ttk.Treeview(self.v, height=100, columns=[f"#{n}" for n in range(len(d) + 2)])
#Creo tabla
self.tabla = ttk.Treeview(self.v, height=100, columns=[f"#{n}" for n in range(0, len(d)+1)])
scrollbar_horizontal = ttk.Scrollbar(self.v, orient='horizontal', command=self.tabla.xview) scrollbar_horizontal = ttk.Scrollbar(self.v, orient='horizontal', command=self.tabla.xview)
scrollbar_vertical = ttk.Scrollbar(self.v, orient='vertical', command=self.tabla.yview) scrollbar_vertical = ttk.Scrollbar(self.v, orient='vertical', command=self.tabla.yview)
...@@ -34,26 +33,27 @@ class TransformarCesta: ...@@ -34,26 +33,27 @@ class TransformarCesta:
self.tabla.configure(xscrollcommand=scrollbar_horizontal.set, yscrollcommand=scrollbar_vertical.set) self.tabla.configure(xscrollcommand=scrollbar_horizontal.set, yscrollcommand=scrollbar_vertical.set)
self.tabla.pack(side=LEFT, fill=BOTH, expand=False) self.tabla.pack(side=LEFT, fill=BOTH, expand=False)
self.tabla.config(show='headings') self.tabla.config(show='headings')
self.v.update() self.v.update()
# Cabeceras tabla # Cabeceras tabla
self.tabla.heading('#1', text="Sesion") self.tabla.heading('#1', text="Indice")
self.tabla.column('#1', width=200, anchor=CENTER) self.tabla.column('#1', width=200, anchor=CENTER)
c=2 self.tabla.heading('#2', text="Sesion")
self.tabla.column('#2', width=200, anchor=CENTER)
c = 3
for i in d: for i in d:
self.tabla.heading('#'+str(c), text=i) self.tabla.heading('#' + str(c), text=i)
self.tabla.column('#'+str(c), width=100, anchor=CENTER) self.tabla.column('#' + str(c), width=100, anchor=CENTER)
c+=1 c += 1
#Insertar datos # Insertar datos
self.tabla.delete(*self.tabla.get_children()) self.tabla.delete(*self.tabla.get_children())
index = 1
for c in cesta: for c in cesta:
l=[c.sesion] la = [str(index), c.sesion]
self.tabla.insert("", END, values=l+c.flags) self.tabla.insert("", END, values=la + c.flags)
index += 1
self.v.mainloop() self.v.mainloop()
No preview for this file type
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