private void abrirToolStripMenuItem_Click(object sender, EventArgs e) { modelo = new ResumenLog4MeModel(); MostrarModelo(modelo); if (dialogoAbrir.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Sesion.RutaArchivo = dialogoAbrir.FileName; Sesion.DialogoCarga.IniciarCarga(new DoWorkEventHandler((a, b) => { try { modelo = Sesion.Analyzer.ObtenerResumen(Sesion.RutaArchivo); Sesion.Excepciones = modelo.Excepciones; MostrarModelo(modelo); if (Sesion.Excepciones != null) { Invoke(new Action(() => { if (Sesion.Excepciones != null) { grid_Excepciones.DataSource = Sesion.Excepciones.Select(excepcion => new ExcepcionModel() { ThreadGUID = excepcion.Metodo.Hilo.ThreadGUID, Clase = excepcion.Metodo.Clase, MethodGUID = excepcion.Metodo.MethodGUID, Metodo = excepcion.Metodo.Nombre, Tipo = excepcion.Tipo, Mensaje = excepcion.Mensaje, StackTrace = excepcion.StackTrace, Data = excepcion.Data }).ToList(); } })); } } catch (Exception ex) { Sesion.DialogoCarga.PermiteCerrar = true; Sesion.DialogoCarga.Close(); MetroMessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); } })); } }
public ResumenLog4MeModel ObtenerResumen(string ruta) { ResumenLog4MeModel retorno = new ResumenLog4MeModel(); retorno.Analisis.Inicio = DateTime.Now; retorno.Log.Nombre = ruta; IDictionary <string, bool> Hilos = new Dictionary <string, bool>(); IDictionary <string, RegistroInLineTO> flujoInicio = new Dictionary <string, RegistroInLineTO>(); IDictionary <string, RegistroInLineTO> flujoRetorno = new Dictionary <string, RegistroInLineTO>(); IDictionary <string, RegistroInLineTO> metodoInicio = new Dictionary <string, RegistroInLineTO>(); IDictionary <string, RegistroInLineTO> metodoRetorno = new Dictionary <string, RegistroInLineTO>(); Reader.LeerArchivo(ruta, (registro => { if (!Hilos.ContainsKey(registro.ThreadGUID)) { Hilos.Add(registro.ThreadGUID, true); } if (!retorno.Log.Inicio.HasValue) { retorno.Log.Inicio = registro.Fecha; } if (registro.Tipo == "Excepcion") { retorno.ExcepcionesLanzadas++; retorno.Excepciones.Add(new ExcepcionTO() { Tipo = registro.TipoExcepcion, StackTrace = registro.StackTrace, Mensaje = registro.Mensaje, Data = registro.Data, Metodo = new MetodoTO() { MethodGUID = registro.MethodGUID, Hilo = new HiloTO() { ThreadGUID = registro.ThreadGUID } } }); } if (registro.Tipo == "Inicio") { retorno.MetodosEjecutados++; if (flujoInicio.ContainsKey(registro.ThreadGUID)) { if (flujoInicio[registro.ThreadGUID].Fecha > registro.Fecha) { flujoInicio[registro.ThreadGUID] = registro; } } else { flujoInicio.Add(registro.ThreadGUID, registro); } if (metodoInicio.ContainsKey(registro.MethodGUID)) { if (metodoInicio[registro.MethodGUID].Fecha > registro.Fecha) { metodoInicio[registro.MethodGUID] = registro; } } else { metodoInicio.Add(registro.MethodGUID, registro); } } if (registro.Tipo == "Retorno") { if (flujoRetorno.ContainsKey(registro.ThreadGUID)) { if (flujoRetorno[registro.ThreadGUID].Fecha < registro.Fecha) { flujoRetorno[registro.ThreadGUID] = registro; } } else { flujoRetorno.Add(registro.ThreadGUID, registro); } if (metodoRetorno.ContainsKey(registro.MethodGUID)) { if (metodoRetorno[registro.MethodGUID].Fecha < registro.Fecha) { metodoRetorno[registro.MethodGUID] = registro; } } else { metodoRetorno.Add(registro.MethodGUID, registro); } } retorno.Log.Termino = registro.Fecha; })); retorno.FlujosEjecutados = Hilos.Count; retorno.FlujoMasDemoroso = ObtenerMasCostoso(flujoInicio, flujoRetorno, false); retorno.MetodoMasDemoroso = ObtenerMasCostoso(metodoInicio, metodoRetorno, true); retorno.Analisis.Termino = DateTime.Now; return(retorno); }
public void MostrarModelo(ResumenLog4MeModel model) { Invoke(new Action(() => { #region Tiempo Análisis lb_FechaInicioTiempoAnalisis.Text = model.Analisis.Inicio.HasValue ? model.Analisis.Inicio.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_FechaTerminoTiempoAnalisis.Text = model.Analisis.Termino.HasValue ? model.Analisis.Inicio.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_TotalTiempoAnalisis.Text = model.Analisis.Total.HasValue ? model.Analisis.Total.Value.ToString() : HORA_DEFECTO; #endregion Tiempo Análisis #region Tiempo Log lb_FechaInicioLog.Text = model.Log.Inicio.HasValue ? model.Analisis.Inicio.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_FechaTerminoLog.Text = model.Log.Termino.HasValue ? model.Analisis.Inicio.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_TotalTiempoLog.Text = model.Log.Total.HasValue ? model.Analisis.Total.Value.ToString() : HORA_DEFECTO; #endregion Tiempo Log #region Cuentas if (model.MetodosEjecutados > 0) { int valor = model.MetodosEjecutados - model.ExcepcionesLanzadas; this.chart1.Palette = ChartColorPalette.Pastel; chart1.Series.Clear(); chart1.Legends.Add(""); Series serie = new Series() { ChartType = SeriesChartType.Doughnut }; serie.Points.Add(new DataPoint(valor, valor) { LegendText = string.Format("{0} Correcto", valor), Color = Color.FromArgb(154, 205, 50) }); serie.Points.Add(new DataPoint(model.ExcepcionesLanzadas, model.ExcepcionesLanzadas) { LegendText = string.Format("{0} Excepciones", model.ExcepcionesLanzadas), Color = Color.Red }); chart1.Series.Add(serie); } #endregion Cuentas #region Flujo mas demoroso btn_ThreadGUIDFlujoMasDemoroso.Text = model.FlujoMasDemoroso.ID; lb_FechaInicioFlujoMasDemoroso.Text = model.FlujoMasDemoroso.Inicio.HasValue ? model.FlujoMasDemoroso.Inicio.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_FechaTerminoFlujoMasDemoroso.Text = model.FlujoMasDemoroso.Termino.HasValue ? model.FlujoMasDemoroso.Termino.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_TotalFechaFlujoMasDemoroso.Text = model.FlujoMasDemoroso.Total.HasValue ? model.FlujoMasDemoroso.Total.Value.ToString() : HORA_DEFECTO; #endregion Flujo mas demoroso #region Método mas demoroso lb_MethodGUIDMetodoMasDemoroso.Text = model.MetodoMasDemoroso.ID; lb_NomreMetodoMasDemoroso.Text = model.MetodoMasDemoroso.Nombre; lb_FechaInicioMetodoMasDemoroso.Text = model.MetodoMasDemoroso.Inicio.HasValue ? model.MetodoMasDemoroso.Inicio.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_FechaTerminoMetodoMasDemoroso.Text = model.MetodoMasDemoroso.Termino.HasValue ? model.MetodoMasDemoroso.Termino.Value.ToString(FORMATO_FECHA_HORA, CultureInfo.InvariantCulture) : FECHA_HORA_DEFECTO; lb_TotalFechaMetodoMasDemoroso.Text = model.MetodoMasDemoroso.Total.HasValue ? model.MetodoMasDemoroso.Total.Value.ToString() : HORA_DEFECTO; #endregion Método mas demoroso })); }