Directorios y proporciones obtenidas. Faltan Flags

parent 75075733
......@@ -6,8 +6,9 @@ class Cesta:
self.directorios = directorios
self.flags = None
# Se obtienen los directorios aquellos que cumplen el umbral
def obtenerDirectorios(registros):
def obtenerDirectorios(registros, umbral):
directorios = []
contadores = []
......@@ -17,17 +18,36 @@ def obtenerDirectorios(registros):
directorios.append(r.url)
contadores.append(1)
else:
pos = contadores.index(r.url)
pos = directorios.index(r.url)
contadores[pos] += 1
# Sacamos aquellas que no superan el umbral
umbral = int(len(registros) * 5 / 1000)
directorios, contadores = quitarExcluidos(directorios, contadores, umbral)
return directorios, contadores
# Se quitan los directorios que no vamos a incluir
def quitarExcluidos(directorios, contadores, umbral):
excluidos = []
# Indicamos aquellas que no superan el umbral
for i in range(len(contadores)):
if contadores[i] < umbral:
excluidos.append(i)
# Las sacamos de las listas resultado en orden
sacados = 0
excluidos.sort()
for i in excluidos:
directorios.pop(i - sacados)
contadores.pop(i - sacados)
sacados += 1
return directorios, contadores
# Se obtiene la cesta transformada final
def obtenerCestaTransformada(registros, directorios):
cesta = []
return cesta
\ No newline at end of file
return cesta
......@@ -6,10 +6,11 @@ RUTA_ARCHIVO = "../access_log_Aug95_reducido"
E_SPIDERING = True
EXTENSIONES_ADMITIDAS = []
EXTENSIONES_NOADMITIDAS = []
UMBRAL_DIRECTORIOS = 0.5
UMBRAL_SESIONES = 1800
FACTOR_UMBRAL = 0.5
def printRegistro(registros):
def printRegistro(registros):
print("Resultados: ")
informe = (
" - Registro {} -\nHost Remoto: {}\nFecha: {}\nMetodo de Petición: {}\nURL: {}\nProtocolo: {}\nStatus Code: {}\n"
......@@ -17,43 +18,49 @@ def printRegistro(registros):
)
i = 0
for r in registros:
for reg in registros:
i += 1
print(informe.format(i, r.hostRemoto, r.fecha, r.metodoPeticion, r.url, r.vProtocolo,
r.statusCode, r.volumenTransf, r.marcaTiempo, r.idUsuario, r.idSesion)
print(informe.format(i, reg.hostRemoto, reg.fecha, reg.metodoPeticion, reg.url, reg.vProtocolo,
reg.statusCode, reg.volumenTransf, reg.marcaTiempo, reg.idUsuario, reg.idSesion)
)
def printDirectorios(d, num_dir, num_reg):
def printDirectorios(d, cont, num_dir, num_reg):
print("Directorios más solicitados: ")
barra = "="
informe = (
" - VALOR {} -\nDirectorio: {}\nP (%): {}\n Cuenta: {}\nProporción: {}\n"
" - VALOR {} -\nDirectorio: {}\nP(%): {}\n Cuenta: {}\nProporción: [{}]\n"
)
barra = "*"
# 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):
barra += barra
print(informe.format("", float(num_dir * 100 / num_reg), num_dir, barra))
for di in d:
barra = "*"
c = cont[d.index(di)]
for i in range(c):
barra += barra
print(informe.format(di.url, float(num_dir * 100 / num_reg), c, barra))
c = cont[i]
barra = "=" * c
print(informe.format(i + 1, d[i], '%.2f' % (c * 100 / num_reg), c, barra))
def printCestaTransformada(c):
return
# Se crean los registros, identificando usuarios y sesiones y se muestran
r = obtenerRegistros(RUTA_ARCHIVO, E_SPIDERING, EXTENSIONES_ADMITIDAS, EXTENSIONES_NOADMITIDAS)
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 * UMBRAL_DIRECTORIOS)
d, cont = obtenerDirectorios(r)
umbral = int(num_reg * FACTOR_UMBRAL / 100)
d, cont = obtenerDirectorios(r, umbral)
num_dir = len(d)
printDirectorios(d, num_dir, num_reg)
printDirectorios(d, cont, num_dir, num_reg)
# Obtiene cesta transformada y la muestra
cesta = obtenerCestaTransformada(r, d)
printCestaTransformada(cesta)
......@@ -3,7 +3,7 @@ from idsUsuarioSesion import identificaciones
# Lee el fichero log
def obtenerRegistros(ruta, espidering, extensionesAdmitidas, extensionesNoAdmitidas):
def obtenerRegistros(ruta, espidering, extensionesAdmitidas, extensionesNoAdmitidas, umbral):
ret = leerLog(ruta, extensionesAdmitidas, extensionesNoAdmitidas)
# Compruebo si hay que hacer el e-Spidering
......@@ -11,7 +11,7 @@ def obtenerRegistros(ruta, espidering, extensionesAdmitidas, extensionesNoAdmiti
ret = eSpidering(ret)
print("Procesados ", len(ret), "registros")
return identificaciones(ret)
return identificaciones(ret, umbral)
# Obtengo los registros
......
# Asignamos un umbral como el de EPA para asignar nuevas sesiones a los usuarios
UMBRAL_SESIONES = 1800
# Identifica a los usuarios con un unico ID para cada usuario
def identificaciones(registros):
def identificaciones(registros, umbral):
idsUsados = []
cont = 0
......@@ -18,11 +14,11 @@ def identificaciones(registros):
else: # Si no, simplemente se agrega el id del que ya disponía
reg.idUsuario = idsUsados.index(ip) + 1
return ordenaRegistros(registros)
return ordenaRegistros(registros, umbral)
# Se ordenan los registros segun los usuarios y su marca de tiempo
def ordenaRegistros(registros):
def ordenaRegistros(registros, umbral):
tam = len(registros)
for i in range(tam):
......@@ -39,11 +35,11 @@ def ordenaRegistros(registros):
registros[i] = reg2
registros[j + i] = reg1
return identificacionSesiones(registros)
return identificacionSesiones(registros, umbral)
# Identifica las sesiones de los usuarios
def identificacionSesiones(registros):
def identificacionSesiones(registros, umbral):
tam = len(registros)
registros[0].idSesion = 1
......@@ -53,7 +49,7 @@ def identificacionSesiones(registros):
# Si se supera el umbral o son diferentes usuarios se crea nueva sesion
dif = reg2.marcaTiempo - reg1.marcaTiempo
if dif > UMBRAL_SESIONES or reg1.idUsuario is not reg2.idUsuario:
if dif > umbral or reg1.idUsuario is not reg2.idUsuario:
reg2.idSesion = reg1.idSesion + 1
else: # Si no se asigna la sesion antigua
reg2.idSesion = reg1.idSesion
......
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