spjasper commited on
Commit
7e1d35a
·
1 Parent(s): 705d3ec

version inicial

Browse files
Files changed (1) hide show
  1. app.py +16 -12
app.py CHANGED
@@ -6,15 +6,24 @@ from sklearn.ensemble import IsolationForest
6
  import matplotlib.pyplot as plt
7
  import seaborn as sns
8
 
9
- # --- PASO 1: LA FUNCIÓN DE ANÁLISIS (SIN CAMBIOS) ---
10
  def analizar_logs_completo(archivo_log):
11
  if archivo_log is None:
12
  return "Por favor, sube un archivo de log para comenzar el análisis.", None, None, None, None
13
 
14
  try:
15
- # --- Lectura y Preparación de Datos ---
16
- df_logs = pd.read_csv(archivo_log.name, header=None, names=['raw_log'], sep='\n', on_bad_lines='skip', engine='python')
17
- df_logs.dropna(inplace=True)
 
 
 
 
 
 
 
 
 
18
 
19
  if df_logs.empty:
20
  return "El archivo de log está vacío o no se pudo leer correctamente.", None, None, None, None
@@ -88,16 +97,16 @@ def analizar_logs_completo(archivo_log):
88
  return summary_md, templates_md, anomalies_md, fig1, fig2
89
 
90
  except Exception as e:
91
- error_message = f"Ha ocurrido un error durante el análisis: {e}"
 
92
  return error_message, None, None, None, None
93
 
94
- # --- PASO 2: CONSTRUIR LA INTERFAZ DE GRADIO (VERSIÓN CORREGIDA) ---
95
 
 
96
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
97
  gr.Markdown("# 🔍 Analizador Avanzado de Logs con Machine Learning")
98
  gr.Markdown("Sube un archivo de log (.log, .txt) para realizar un análisis completo que incluye detección de errores por reglas y detección de anomalías con un modelo de ML (Isolation Forest).")
99
 
100
- # --- Definir la Disposición Visual de la UI ---
101
  with gr.Row():
102
  with gr.Column(scale=1):
103
  log_file_input = gr.File(label="Sube tu archivo de log", file_types=[".log", ".txt"])
@@ -111,9 +120,6 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
111
  templates_output = gr.Markdown(label="Plantillas Comunes")
112
  anomalies_output = gr.Markdown(label="Anomalías Detectadas")
113
 
114
- # --- Definir el Componente de Ejemplos ---
115
- # Al definirlo aquí, aparecerá debajo de las columnas anteriores.
116
- # Todos los componentes (inputs y outputs) ya existen y se pueden referenciar.
117
  gr.Examples(
118
  examples=[["sample.log"]],
119
  inputs=log_file_input,
@@ -123,8 +129,6 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
123
  label="O prueba con un archivo de ejemplo"
124
  )
125
 
126
- # --- Conectar el Evento del Botón ---
127
- # Esta es la acción principal cuando el usuario hace clic en el botón.
128
  analyze_button.click(
129
  fn=analizar_logs_completo,
130
  inputs=log_file_input,
 
6
  import matplotlib.pyplot as plt
7
  import seaborn as sns
8
 
9
+ # --- PASO 1: LA FUNCIÓN DE ANÁLISIS (CON LECTURA DE ARCHIVO CORREGIDA) ---
10
  def analizar_logs_completo(archivo_log):
11
  if archivo_log is None:
12
  return "Por favor, sube un archivo de log para comenzar el análisis.", None, None, None, None
13
 
14
  try:
15
+ # --- Lectura y Preparación de Datos (MÉTODO CORREGIDO) ---
16
+ # Leemos el archivo de la forma más robusta: línea por línea, ignorando errores de codificación.
17
+ with open(archivo_log.name, 'r', encoding='utf-8', errors='ignore') as f:
18
+ lines = f.readlines()
19
+
20
+ # Creamos el DataFrame a partir de la lista de líneas
21
+ df_logs = pd.DataFrame(lines, columns=['raw_log'])
22
+
23
+ # Limpiamos líneas vacías o con solo espacios en blanco que puedan causar problemas
24
+ df_logs['raw_log'] = df_logs['raw_log'].str.strip()
25
+ df_logs.dropna(subset=['raw_log'], inplace=True)
26
+ df_logs = df_logs[df_logs['raw_log'] != '']
27
 
28
  if df_logs.empty:
29
  return "El archivo de log está vacío o no se pudo leer correctamente.", None, None, None, None
 
97
  return summary_md, templates_md, anomalies_md, fig1, fig2
98
 
99
  except Exception as e:
100
+ import traceback
101
+ error_message = f"Ha ocurrido un error durante el análisis:\n\n{traceback.format_exc()}"
102
  return error_message, None, None, None, None
103
 
 
104
 
105
+ # --- PASO 2: CONSTRUIR LA INTERFAZ DE GRADIO (SIN CAMBIOS) ---
106
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
107
  gr.Markdown("# 🔍 Analizador Avanzado de Logs con Machine Learning")
108
  gr.Markdown("Sube un archivo de log (.log, .txt) para realizar un análisis completo que incluye detección de errores por reglas y detección de anomalías con un modelo de ML (Isolation Forest).")
109
 
 
110
  with gr.Row():
111
  with gr.Column(scale=1):
112
  log_file_input = gr.File(label="Sube tu archivo de log", file_types=[".log", ".txt"])
 
120
  templates_output = gr.Markdown(label="Plantillas Comunes")
121
  anomalies_output = gr.Markdown(label="Anomalías Detectadas")
122
 
 
 
 
123
  gr.Examples(
124
  examples=[["sample.log"]],
125
  inputs=log_file_input,
 
129
  label="O prueba con un archivo de ejemplo"
130
  )
131
 
 
 
132
  analyze_button.click(
133
  fn=analizar_logs_completo,
134
  inputs=log_file_input,