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:
def __init__(self, directorios, sesiones, tam, i):
......@@ -13,8 +14,7 @@ class Cesta:
def obtenerFlags(self, sesiones, tam):
# Se rellenan los flags segun si son de la misma sesion o no para cada directorio
for i in range(tam):
if sesiones[
i] == self.sesion: # Hay que obtener distribuciones de frecuencia aquí o no ############################3
if sesiones[i] == self.sesion: # Hay que obtener distribuciones de frecuencia aquí o no ############################3
self.flags.append(True)
else:
self.flags.append(False)
......@@ -23,7 +23,7 @@ class Cesta:
# Se obtienen los directorios aquellos que cumplen el umbral
def obtenerDirectorios(reg):
global FACTOR_UMBRAL
fu=FACTOR_UMBRAL
fu = FACTOR_UMBRAL
umbral = int(len(reg) * fu / 100)
directorios = []
......@@ -42,11 +42,11 @@ def obtenerDirectorios(reg):
directorios, contadores, sesiones = quitarExcluidos(directorios, contadores, sesiones, umbral)
#Ordeno por contadores
# Ordeno por contadores
for i in range(len(directorios)):
for j in range(len(directorios)):
if contadores[i]>contadores[j]:
contadores[i], contadores[j]=contadores[j], contadores[i]
if contadores[i] > contadores[j]:
contadores[i], contadores[j] = contadores[j], contadores[i]
directorios[i], directorios[j] = directorios[j], directorios[i]
sesiones[i], sesiones[j] = sesiones[j], sesiones[i]
......@@ -59,7 +59,7 @@ def quitarExcluidos(directorios, contadores, sesiones, umbral):
# Indicamos aquellas que no superan el umbral
for i in range(len(contadores)):
if contadores[i] < umbral:
if contadores[i] <= umbral:
excluidos.append(i)
# Las sacamos de las listas resultado en orden
......@@ -92,5 +92,6 @@ def obtenerCestaTransformada(directorios, sesiones):
else: # Si no se elimina
cesta.pop(i - sacadas)
sacadas += 1
# Agregar aquellas que la referencian también
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
# 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)
......@@ -14,15 +15,18 @@ class Dato:
self.V_Transferencia = 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_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:
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:
pass
self.Status_Code = None
# Funcion que asigna los valores debidos a la clase
def obtenerDatos(self, cadena):
......@@ -50,6 +54,7 @@ class Dato:
fechaBase = datetime.strptime("01/08/1995:00:00:00", '%d/%m/%Y:%H:%M:%S').timestamp()
self.Marca_Tiempo = int(fechaRegistro - fechaBase)
# Se consideran valores erroneos, anomalos o nulos para descartarse este dato (se ignora
def isPerdido(self):
if self.Host_Remoto is None:
......@@ -70,7 +75,6 @@ class Dato:
return True
if self.Marca_Tiempo < 0:
return True
return False
......@@ -87,6 +91,8 @@ def sacarLinea(cadena, c, aux, signo):
while c < len(cadena) and cadena[c] != signo:
aux += cadena[c]
c += 1
if not aux:
aux = None
return aux, c + 1
......
import tkinter as ttk
from tkinter import ttk
from tkinter import *
from Cesta import obtenerDirectorios
class DirectoriosMasSol:
def __init__(self,reg):
self.v=Tk()
def __init__(self, reg):
self.v = Tk()
self.v.resizable(0, 0)
self.v.title("Directorios Mas Solicitados")
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)
num_dir = len(d)
# 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_horizontal = ttk.Scrollbar(self.v, orient='horizontal', command=self.tabla.xview)
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.config(show='headings')
self.v.update()
#Cabeceras tabla
self.tabla.heading('#1', text="Directorio")
self.tabla.column('#1', width=200, anchor=CENTER)
self.tabla.heading('#2', text="Cuenta")
self.tabla.column('#2', width=200, anchor=CENTER)
self.tabla.heading('#3', text="Sesion")
self.tabla.column('#3', width=200, anchor=CENTER)
# Cabeceras tabla
self.tabla.heading('#1', text="Indice")
self.tabla.column('#1', width=100, anchor=CENTER)
self.tabla.heading('#2', text="Sesion")
self.tabla.column('#2', width=100, anchor=CENTER)
self.tabla.heading('#3', text="Directorio")
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())
for i in range(len(d)):
aux=[d[i],cont[i],ses[i]]
self.tabla.insert("", END, values=aux)
index = 0
total = [str(index), "Total", "-", len(reg), "100%"]
self.tabla.insert("", 'end', values=total)
for i in range(num_dir):
index += 1
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
from VentanaAbrir import VentanaAbrir
from About_GUI import VentanaAbout
from TransfCesta import TransformarCesta
from Gestor import REG
from Constantes import REG
def f_abrir():
......@@ -35,7 +34,7 @@ def f_abrir():
global UMBRAL_SESIONES
try:
UMBRAL_SESIONES = int(float(v.umb.get()))
except:
finally:
UMBRAL_SESIONES = 1800
v.cerrarVentana()
global REG
......@@ -78,7 +77,7 @@ def fElimCAuto():
global UMBRAL_T
try:
UMBRAL_T = float(v.formadmin.get())
except:
finally:
UMBRAL_T = 0.5
v.cerrarVentana()
global REG
......@@ -86,16 +85,19 @@ def fElimCAuto():
REG = eliminarComportamientoAutomatico(REG)
insertaRegistros()
def fMasDSol():
global REG
if len(REG)>0:
v=DirectoriosMasSol(REG)
if len(REG) > 0:
v = DirectoriosMasSol(REG)
def fTransCest():
global REG
if len(REG) > 0:
v = TransformarCesta(REG)
def barraMenu(ventana):
# DEFINIR BARRA DE MENÚ DE LA APLICACION:
barramenu = Menu(ventana)
......@@ -140,24 +142,29 @@ def barraMenu(ventana):
command=about,
underline=0, compound=RIGHT)
def getDatosRegistro(registro, atributos):
# Obtiene los datos del registro para insertarlos en la tabla
def getDatosRegistro(registro, atributos, contador):
ret = []
for a in atributos:
ret.append(getattr(registro, a))
aux = []
for i in range(1, len(ret)):
aux.append(contador)
for i in range(len(ret)):
aux.append(ret[i])
aux.append(ret[0])
return aux
aux.append("")
return aux
# Inserta cada tupla de todos los registros
def insertaRegistros():
tabla.delete(*tabla.get_children())
global REG
cont = 1
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
......@@ -167,18 +174,22 @@ ventana.title("Analizador de Logs")
# Obtengo los atributos de la clase dato
atributos = Dato("").__dict__
nombresAtributos = []
nombresAtributos.append("")
nombresAtributos.append("Num_Registro")
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 = 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.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.config(show='headings')
c = 0
ventana.update()
......
import tkinter as ttk
from tkinter import ttk
from tkinter import *
from Cesta import obtenerDirectorios
from Cesta import obtenerCestaTransformada
from Gestor import FACTOR_UMBRAL
from Constantes import FACTOR_UMBRAL
class TransformarCesta:
def __init__(self,reg):
def __init__(self, reg):
# Se obtienen los directorios con contadores y la cesta
global FACTOR_UMBRAL
umbral = int(len(reg) * FACTOR_UMBRAL / 100)
......@@ -16,16 +17,14 @@ class TransformarCesta:
# Obtiene cesta transformada y la muestra
cesta = obtenerCestaTransformada(d, ses)
#Creo ventana
self.v=Tk()
# Creo ventana
self.v = Tk()
self.v.state('zoomed')
self.v.title("Cesta transformada")
self.v.geometry('800x600')
#Creo tabla
self.tabla = ttk.Treeview(self.v, height=100, columns=[f"#{n}" for n in range(0, len(d)+1)])
# Creo tabla
self.tabla = ttk.Treeview(self.v, height=100, columns=[f"#{n}" for n in range(len(d) + 2)])
scrollbar_horizontal = ttk.Scrollbar(self.v, orient='horizontal', command=self.tabla.xview)
scrollbar_vertical = ttk.Scrollbar(self.v, orient='vertical', command=self.tabla.yview)
......@@ -34,26 +33,27 @@ class TransformarCesta:
self.tabla.configure(xscrollcommand=scrollbar_horizontal.set, yscrollcommand=scrollbar_vertical.set)
self.tabla.pack(side=LEFT, fill=BOTH, expand=False)
self.tabla.config(show='headings')
self.v.update()
# Cabeceras tabla
self.tabla.heading('#1', text="Sesion")
self.tabla.heading('#1', text="Indice")
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:
self.tabla.heading('#'+str(c), text=i)
self.tabla.column('#'+str(c), width=100, anchor=CENTER)
c+=1
self.tabla.heading('#' + str(c), text=i)
self.tabla.column('#' + str(c), width=100, anchor=CENTER)
c += 1
#Insertar datos
# Insertar datos
self.tabla.delete(*self.tabla.get_children())
index = 1
for c in cesta:
l=[c.sesion]
self.tabla.insert("", END, values=l+c.flags)
la = [str(index), c.sesion]
self.tabla.insert("", END, values=la + c.flags)
index += 1
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