public static bool GetUltimaSemanaHistorificada(out int semana, out int anyo) { bool result = false; anyo = 0; semana = 0; using (var db = new DATA_DYNAEntities()) { DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; Calendar cal = dfi.Calendar; DateTime fechaInicio = DateTime.Now; DateTime fechaFin = fechaInicio; if (db.DatosDynatrace.Count() > 0) { // Hay datos en base de datos y miramos si hay que historificar if (db.DatosDynatraceSemana.Count() > 0) { // Ya existen semanas historificadas. // Comprobar la última semana historificada. int ultimoAnyoHistorificado = db.DatosDynatraceSemana.Max(x => x.Anyo); semana = db.DatosDynatraceSemana.Where(x => x.Anyo == ultimoAnyoHistorificado).Max(x => x.Semana) + 1; DateTime primerDiaSemana = FirstDateOfWeek(ultimoAnyoHistorificado, semana, CultureInfo.CurrentCulture); DateTime ultimoDiaSemana = primerDiaSemana.AddDays(6); int semanaPrimerDia = cal.GetWeekOfYear(primerDiaSemana, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); int semanaUltimoDia = cal.GetWeekOfYear(ultimoDiaSemana, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); if (semanaPrimerDia == semanaUltimoDia) { // La semana que queremos historificar es OK. semana = semanaPrimerDia; anyo = ultimoAnyoHistorificado; } else { // Es la primera semana del año. semana = 1; anyo = ultimoAnyoHistorificado + 1; } primerDiaSemana = FirstDateOfWeek(anyo, semana, CultureInfo.CurrentCulture); ultimoDiaSemana = primerDiaSemana.AddDays(6); if (db.DatosDynatrace.Any(x => x.Fecha_dato == primerDiaSemana) && db.DatosDynatrace.Any(x => x.Fecha_dato == ultimoDiaSemana)) { // Existen datos fecha inicio y fecha fin. result = true; } else { Registro.Mensaje(string.Format("La semana {0} del año {1} no ha finalizado.", semana, anyo)); } } else { // No hay datos historificados y devolvemos la primera semana de todos los datos // para historificarla. fechaInicio = db.DatosDynatrace.Min(x => x.Fecha_dato); fechaFin = fechaInicio.AddDays(6); anyo = fechaFin.Year; semana = cal.GetWeekOfYear(fechaFin, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); if (db.DatosDynatrace.Any(x => x.Fecha_dato == fechaFin)) { result = true; } else { Registro.Mensaje(string.Format("La semana {0} del año {1} no ha finalizado.", semana, anyo)); semana = 0; anyo = 0; } } } else { Registro.Mensaje("No existen datos que historificar."); } } return(result); }
public static void HistorificarDatosSemanas(int periodo, int anyo) { DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; Calendar cal = dfi.Calendar; using (var db = new DATA_DYNAEntities()) { int semanaActual = cal.GetWeekOfYear(DateTime.Now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); DateTime fechaInicial = new Week(anyo, periodo).FirstDayOfWeek; DateTime fechaFin = new Week(anyo, periodo).LastDayOfWeek.AddDays(1); //HISTORIFICACION DE MÉTODOS var query = db.DatosDynatraceSemana.Where(s => s.Semana == periodo && s.Anyo == anyo).FirstOrDefault <DatosDynatraceSemana>(); if (query != null) //Ya se ha historificado { Registro.Mensaje(string.Format("La semana {0} ya está historificada", periodo)); return; } else //Historificamos la semana { var datosBruto = db.DatosDynatrace.Where(p => p.Fecha_dato >= fechaInicial && p.Fecha_dato < fechaFin).GroupBy(s => new { s.Metrica, s.Canal }).ToList(); foreach (var row in datosBruto) { float numPromedioTotal = 0; float numPercentilTotal = 0; float promedioTotal = 0; float percentilTotal = 0; float excepcionTotal = 0; int dias = 0; var registroSemanal = new DatosDynatraceSemana(); string metrica = ""; string canal = ""; foreach (var col in row) { numPromedioTotal = numPromedioTotal + col.NumPromedio; numPercentilTotal = numPercentilTotal + col.NumPercentil; promedioTotal = promedioTotal + col.Promedio; percentilTotal = percentilTotal + col.Percentil95; excepcionTotal = excepcionTotal + col.Excepciones; metrica = col.Metrica; canal = col.Canal; if (col.Promedio != 0) { dias++; } } registroSemanal.NumPromedio = numPromedioTotal; registroSemanal.NumPercentil = numPercentilTotal; registroSemanal.Promedio = (dias == 0) ? 0 : promedioTotal / dias; registroSemanal.Percentil95 = (dias == 0) ? 0 : percentilTotal / dias; registroSemanal.Excepciones = excepcionTotal; registroSemanal.Metrica = metrica; registroSemanal.Canal = canal; registroSemanal.Semana = periodo; registroSemanal.NumDiasActividad = dias; registroSemanal.Anyo = anyo; db.DatosDynatraceSemana.Add(registroSemanal); db.SaveChanges(); } } } }
public static void Calcula(int operacion, int periodo, int anyo) { DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo; Calendar cal = dfi.Calendar; using (var db = new DATA_DYNAEntities()) { if (operacion.Equals(1)) //Historificamos semanas { int semanaActual = cal.GetWeekOfYear(DateTime.Now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); /* * if (semanaActual <= periodo) * { * Registro.Mensaje(string.Format("No se puede historificar la semana {0} hasta que haya acabado", semanaActual)); * return; * } */ //IFormatProvider culture = new CultureInfo("en-ES", true); DateTime fechaInicial = new Week(anyo, periodo).FirstDayOfWeek; DateTime fechaFin = new Week(anyo, periodo).LastDayOfWeek.AddDays(1); //HISTORIFICACION DE MÉTODOS var query = db.DatosDynatraceSemana.Where(s => s.Semana == periodo && s.Anyo == anyo).FirstOrDefault <DatosDynatraceSemana>(); if (query != null) //Ya se ha historificado { Registro.Mensaje(string.Format("La semana {0} ya está historificada", periodo)); return; } else //Historificamos la semana { var datosBruto = db.DatosDynatrace.Where(p => p.Fecha_dato >= fechaInicial && p.Fecha_dato < fechaFin).GroupBy(s => new { s.Metrica, s.Canal }).ToList(); foreach (var row in datosBruto) { float numPromedioTotal = 0; float numPercentilTotal = 0; float promedioTotal = 0; float percentilTotal = 0; float excepcionTotal = 0; int dias = 0; var registroSemanal = new DatosDynatraceSemana(); string metrica = ""; string canal = ""; foreach (var col in row) { numPromedioTotal = numPromedioTotal + col.NumPromedio; numPercentilTotal = numPercentilTotal + col.NumPercentil; promedioTotal = promedioTotal + col.Promedio; percentilTotal = percentilTotal + col.Percentil95; excepcionTotal = excepcionTotal + col.Excepciones; metrica = col.Metrica; canal = col.Canal; if (col.Promedio != 0) { dias++; } } registroSemanal.NumPromedio = numPromedioTotal; registroSemanal.NumPercentil = numPercentilTotal; registroSemanal.Promedio = (dias == 0) ? 0 : promedioTotal / dias; registroSemanal.Percentil95 = (dias == 0) ? 0 : percentilTotal / dias; registroSemanal.Excepciones = excepcionTotal; registroSemanal.Metrica = metrica; registroSemanal.Canal = canal; registroSemanal.Semana = periodo; registroSemanal.NumDiasActividad = dias; registroSemanal.Anyo = anyo; db.DatosDynatraceSemana.Add(registroSemanal); db.SaveChanges(); } } //HISTORIFICACION DE WEBREQUEST var query2 = db.WebRequestsDynatraceSemana.Where(s => s.Semana == periodo && s.Anyo == anyo).FirstOrDefault <WebRequestsDynatraceSemana>(); if (query2 != null) //Ya se ha historificado { Registro.Mensaje(string.Format("La semana {0} ya está historificada", periodo)); return; } else //Historificamos la semana { var datosBruto2 = db.WebRequestsDynatrace.Where(p => p.Fecha_dato >= fechaInicial && p.Fecha_dato < fechaFin).GroupBy(s => new { s.URI, s.Canal }).ToList(); foreach (var row in datosBruto2) { float numTotal = 0; float tasaFalloTotal = 0; int dias = 0; var registroSemanal = new WebRequestsDynatraceSemana(); string URI = ""; string canal = ""; foreach (var col in row) { numTotal = numTotal + col.Numero; tasaFalloTotal = tasaFalloTotal + col.TasaFallo; URI = col.URI; canal = col.Canal; if (col.Numero != 0) { dias++; } } registroSemanal.TasaFallo = tasaFalloTotal / dias; registroSemanal.Numero = (int)numTotal; registroSemanal.URI = URI; registroSemanal.Canal = canal; registroSemanal.Semana = periodo; registroSemanal.Anyo = anyo; registroSemanal.NumDiasActividad = dias; db.WebRequestsDynatraceSemana.Add(registroSemanal); db.SaveChanges(); } } } else if (operacion.Equals(2)) //Historificamos meses { //int mesActual = cal.GetMOnthOfYear(DateTime.Now, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); int mesActual = DateTime.Now.Month; /* * if (mesActual <= periodo) * { * Registro.Mensaje(string.Format("No se puede historificar el mes {0} hasta que haya acabado", mesActual)); * return; * } */ //IFormatProvider culture = new CultureInfo("en-ES", true); DateTime fechaInicial = new DateTime(anyo, periodo, 1); DateTime fechaFin = fechaInicial.AddMonths(1).AddDays(-1); //HISTORIFICACION DE MÉTODOS var query = db.DatosDynatraceMes.Where(s => s.Mes == periodo && s.Anyo == anyo).FirstOrDefault <DatosDynatraceMes>(); if (query != null) //Ya se ha historificado { Registro.Mensaje(string.Format("El mes {0} ya está historificado", periodo)); return; } else //Historificamos el mes { var datosBruto = db.DatosDynatrace.Where(p => p.Fecha_dato >= fechaInicial && p.Fecha_dato < fechaFin).GroupBy(s => new { s.Metrica, s.Canal }).ToList(); foreach (var row in datosBruto) { float numPromedioTotal = 0; float numPercentilTotal = 0; float promedioTotal = 0; float percentilTotal = 0; float excepcionTotal = 0; int dias = 0; var registroMensual = new DatosDynatraceMes(); string metrica = ""; string canal = ""; foreach (var col in row) { numPromedioTotal = numPromedioTotal + col.NumPromedio; numPercentilTotal = numPercentilTotal + col.NumPercentil; promedioTotal = promedioTotal + col.Promedio; percentilTotal = percentilTotal + col.Percentil95; excepcionTotal = excepcionTotal + col.Excepciones; metrica = col.Metrica; canal = col.Canal; if (col.Promedio != 0) { dias++; } } registroMensual.NumPromedio = numPromedioTotal; registroMensual.NumPercentil = numPercentilTotal; registroMensual.Promedio = (dias == 0) ? 0 : promedioTotal / dias; registroMensual.Percentil95 = (dias == 0) ? 0 : percentilTotal / dias; registroMensual.Excepciones = excepcionTotal; registroMensual.Metrica = metrica; registroMensual.Canal = canal; registroMensual.Mes = periodo; registroMensual.NumDiasActividad = dias; registroMensual.Anyo = anyo; db.DatosDynatraceMes.Add(registroMensual); db.SaveChanges(); } } //HISTORIFICACION DE WEBREQUEST var query2 = db.WebRequestsDynatraceMes.Where(s => s.Mes == periodo && s.Anyo == anyo).FirstOrDefault <WebRequestsDynatraceMes>(); if (query2 != null) //Ya se ha historificado { Registro.Mensaje(string.Format("El mes {0} ya está historificado", periodo)); return; } else //Historificamos el mes { var datosBruto2 = db.WebRequestsDynatrace.Where(p => p.Fecha_dato >= fechaInicial && p.Fecha_dato < fechaFin).GroupBy(s => new { s.URI, s.Canal }).ToList(); foreach (var row in datosBruto2) { float numTotal = 0; float tasaFalloTotal = 0; int dias = 0; var registroMensual = new WebRequestsDynatraceMes(); string URI = ""; string canal = ""; foreach (var col in row) { numTotal = numTotal + col.Numero; tasaFalloTotal = tasaFalloTotal + col.TasaFallo; URI = col.URI; canal = col.Canal; if (col.Numero != 0) { dias++; } } registroMensual.TasaFallo = tasaFalloTotal / dias; registroMensual.Numero = numTotal; registroMensual.URI = URI; registroMensual.Canal = canal; registroMensual.Mes = periodo; registroMensual.NumDiasActividad = dias; registroMensual.Anyo = anyo; db.WebRequestsDynatraceMes.Add(registroMensual); db.SaveChanges(); } } } else { return; } } }
public static bool GetUltimoMesHistorificado(out int mes, out int anyo) { bool result = false; mes = 0; anyo = 0; using (var db = new DATA_DYNAEntities()) { DateTime fechaInicio = DateTime.Now; DateTime fechaFin = fechaInicio; int diasDelMes = 0; if (db.DatosDynatrace.Count() > 0) { if (db.DatosDynatraceMes.Count() > 0) { // Ya tenemos datos historificados en la tabla de Mes. // Ultimo mes historificado int ultimoAnyo = db.DatosDynatraceMes.Max(x => x.Anyo); int ultimoMes = db.DatosDynatraceMes.Where(x => x.Anyo == ultimoAnyo).Max(x => x.Mes) + 1; if (ultimoMes > 12) { anyo = ultimoAnyo + 1; mes = ultimoMes = 1; } else { anyo = ultimoAnyo; mes = ultimoMes; } // Comprobamos que existen datos para historificar. diasDelMes = DateTime.DaysInMonth(anyo, mes); fechaInicio = new DateTime(anyo, mes, 1); fechaFin = new DateTime(anyo, mes, diasDelMes); } else { // No tenemos datos mensuales historificados. // Devolvemos el primer mes a historificar. fechaInicio = db.DatosDynatrace.Min(x => x.Fecha_dato); diasDelMes = DateTime.DaysInMonth(fechaInicio.Year, fechaInicio.Month); fechaFin = new DateTime(fechaInicio.Year, fechaInicio.Month, diasDelMes); mes = fechaInicio.Month; anyo = fechaInicio.Year; } bool bFechaInicio = db.DatosDynatrace.Any(x => x.Fecha_dato == fechaInicio); int iFechaInicio = db.DatosDynatrace.Where(x => x.Fecha_dato == fechaInicio).Count(); bool bFechaFin = db.DatosDynatrace.Any(x => x.Fecha_dato == fechaFin); int iFechaFin = db.DatosDynatrace.Where(x => x.Fecha_dato == fechaFin).Count(); if (db.DatosDynatrace.Any(x => x.Fecha_dato == fechaInicio) && db.DatosDynatrace.Any(x => x.Fecha_dato == fechaFin)) { result = true; } else { Registro.Mensaje(string.Format("El mes {0} del año {1} no se puede historificiar porque no ha terminado.", mes, anyo)); mes = 0; anyo = 0; } } else { // No existen datos a historificar. Registro.Mensaje("No existen datos que historificar."); } } return(result); }
public static void Carga(int operacion, string ruta) { //string[] ficheros = Directory.GetFiles(@"E:\ExcelDynatrace\", "*.xlsx"); string[] ficheros = Directory.GetFiles(@ruta, "*.xlsx"); foreach (string fichero in ficheros) { string nombreFichero = fichero.Replace(ruta, "").Replace("\\", ""); Registro.Mensaje(string.Format("Inicio de la carga del fichero {0} ...", nombreFichero)); IFormatProvider culture = new CultureInfo("es-ES", true); DateTime fecha = DateTime.ParseExact(nombreFichero.Substring(7, 10), "yyyy-MM-dd", culture).AddDays(-1); using (var db = new DATA_DYNAEntities()) { //Verificamos si ya se ha cargado ese día var cargado = db.DatosDynatrace.Where(m => m.Fecha_dato == fecha).FirstOrDefault(); if (cargado != null) //Ya se ha cargado { Registro.Mensaje(string.Format("El día {0} ya ha sido cargado", fecha.ToShortDateString())); string rutaDuplicado = Path.Combine(ruta, "Duplicados"); string nombreDuplicado = Path.GetFileName(nombreFichero); string destino = Path.Combine(rutaDuplicado, nombreDuplicado); if (!Directory.Exists(destino)) { Directory.CreateDirectory(rutaDuplicado); } if (File.Exists(destino)) { File.Delete(destino); } File.Move(fichero, destino); return; } //Procesamos la pestaña Chart (métodos) SLDocument sl = new SLDocument(fichero, "Chart"); int iRow = 7; int excepciones = 0; float promedio = 0; int numpromedio = 0; string tipoMetrica = ""; while (!string.IsNullOrEmpty(sl.GetCellValueAsString(iRow, 1))) { string level = sl.GetCellValueAsString(iRow, 1); string measure = sl.GetCellValueAsString(iRow, 2); string aggregation = sl.GetCellValueAsString(iRow, 4); float average = (float)sl.GetCellValueAsDecimal(iRow, 5); int count = sl.GetCellValueAsInt32(iRow, 7); if (level == "1") { string[] submetricas = measure.Replace(" ", "").Split('-'); string metrica = submetricas[1].Trim(); string tipo = submetricas[2]; if (aggregation == "Average" & tipo.Substring(0, 3) == "Exc") { excepciones = count; tipoMetrica = "EXCEPCIONES|" + metrica; } else if (aggregation == "Average" & tipo.Substring(0, 3) == "Pur") { promedio = average; numpromedio = count; tipoMetrica = "PROMEDIOS|" + metrica; } else if (aggregation == "95th Percentile" & tipo.Substring(0, 3) == "Pur") { var oMiExcel = new DatosDynatrace(); oMiExcel.Metrica = metrica.Trim(); string canal = "TODOS"; oMiExcel.Canal = canal; oMiExcel.Excepciones = excepciones; oMiExcel.Promedio = promedio; oMiExcel.Percentil95 = average; oMiExcel.NumPromedio = numpromedio; oMiExcel.NumPercentil = count; oMiExcel.Fecha_dato = fecha; tipoMetrica = "PERCENTILES|" + metrica; db.DatosDynatrace.Add(oMiExcel); db.SaveChanges(); } } else //level=2 { //separamos tipoMetrica para saber el tipo de metrica y la metrica string[] paso = tipoMetrica.Split('|'); string tipoVariable = paso[0]; string varMetrica = paso[1].Trim(); var resultado = db.DatosDynatrace.Where(m => m.Canal == measure && m.Metrica == varMetrica && m.Fecha_dato == fecha).FirstOrDefault <DatosDynatrace>(); if (resultado == null) //no existe registro { var oMiExcelCanal = new DatosDynatrace(); oMiExcelCanal.Metrica = varMetrica.Trim(); oMiExcelCanal.Canal = measure; oMiExcelCanal.Fecha_dato = fecha; if (tipoVariable == "EXCEPCIONES") { oMiExcelCanal.Excepciones = count; oMiExcelCanal.Promedio = 0; oMiExcelCanal.Percentil95 = 0; oMiExcelCanal.NumPromedio = 0; oMiExcelCanal.NumPercentil = 0; } else if (tipoVariable == "PROMEDIOS") { oMiExcelCanal.Excepciones = 0; oMiExcelCanal.Promedio = average; oMiExcelCanal.Percentil95 = 0; oMiExcelCanal.NumPromedio = count; oMiExcelCanal.NumPercentil = 0; } else if (tipoVariable == "PERCENTILES") { oMiExcelCanal.Excepciones = 0; oMiExcelCanal.Promedio = 0; oMiExcelCanal.Percentil95 = average; oMiExcelCanal.NumPromedio = 0; oMiExcelCanal.NumPercentil = count; } //Insertamos el registro nuevo db.DatosDynatrace.Add(oMiExcelCanal); db.SaveChanges(); } else //hay registro ya en bbdd para esa métrica y tipo { if (tipoVariable == "EXCEPCIONES") { resultado.Excepciones = count; } else if (tipoVariable == "PROMEDIOS") { resultado.Promedio = average; resultado.NumPromedio = count; } else if (tipoVariable == "PERCENTILES") { resultado.Percentil95 = average; resultado.NumPercentil = count; } //Actualizamos el registro con el dato modificado db.DatosDynatrace.Add(resultado); db.Entry(resultado).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } } iRow++; } //Procesamos las WebRequests sl = new SLDocument(fichero, "Web Requests"); iRow = 9; while (!string.IsNullOrEmpty(sl.GetCellValueAsString(iRow, 1))) { string uri = sl.GetCellValueAsString(iRow, 4); string canal = sl.GetCellValueAsString(iRow, 5); float tasaFallo = (float)sl.GetCellValueAsDecimal(iRow, 6); int count = sl.GetCellValueAsInt32(iRow, 8); var oMiExcel = new WebRequestsDynatrace(); oMiExcel.URI = uri; oMiExcel.Canal = canal; oMiExcel.TasaFallo = tasaFallo; oMiExcel.Numero = count; oMiExcel.Fecha_dato = fecha; try { db.WebRequestsDynatrace.Add(oMiExcel); db.SaveChanges(); } catch (DbEntityValidationException ex) { Registro.Mensaje(string.Format("Se ha truncado algún valor: {0}", ex.Data)); oMiExcel.URI = "URI Truncada: " + uri.Substring(0, 110); db.WebRequestsDynatrace.Add(oMiExcel); db.SaveChanges(); } iRow++; } int contador = db.DatosDynatrace.Where(x => x.Fecha_dato == fecha).Count(); Registro.Mensaje(string.Format("Se han cargado {0} registros del fichero {1}", contador, nombreFichero)); Registro.Mensaje(string.Format("Fin de la carga del fichero {0}", nombreFichero)); } //Movemos el fichero a la carpeta de procesados //string rutaDestino = @"E:\ExcelDynatrace\Procesados"; string rutaDestino = Path.Combine(ruta, "Procesados"); string nombre_fichero = Path.GetFileName(fichero); string ficheroDestino = Path.Combine(rutaDestino, nombre_fichero); if (!Directory.Exists(rutaDestino)) { Directory.CreateDirectory(rutaDestino); } if (File.Exists(ficheroDestino)) { File.Delete(ficheroDestino); } File.Move(fichero, ficheroDestino); //Registro.Mensaje(string.Format("Se ha cargado la información del fichero {0}", nombreFichero)); } }
static void Main(string[] args) { try { string directorio = @"C:\Dynatrace\Ficheros"; // string directorio = @"C:\\Proyectos\\WebEstadisticas\\Documentacion\\Ficheros"; bool seguir = true; int operacion = -1; int anyo = 0; int mes = 0; int periodo = 0; int iteracion = 0; do { Registro.Mensaje(string.Format("Comprobando si existen ficheros en la ruta {0}", directorio)); //Comprobar si hay ficheros string[] ficheros = Directory.GetFiles(@directorio, "*.xlsx"); if (ficheros.Length > 0) { operacion = 0; } else { operacion = 1; } switch (operacion) { case 0: operacion = -1; Registro.Mensaje(string.Format("Cargando Estadísticas de la ruta {0}", directorio)); CargaEstadisticas.Carga(0, directorio); break; case 2: // No se va a historificar nada desde codigo, lo voy a historificar con un PROCEDURE //int periodo = calc.GetUltimaSemanaHistorificada(out anyo); if (Historificacion.GetUltimaSemanaHistorificada(out periodo, out anyo)) { operacion = 1; Registro.Mensaje(string.Format("Historificando semana {0} del año {1}", periodo, anyo)); Historificacion.Calcula(operacion, periodo, anyo); } else { operacion = 2; if (Historificacion.GetUltimoMesHistorificado(out mes, out anyo)) { Registro.Mensaje(string.Format("Historificando mes {0} del año {1}", mes, anyo)); Historificacion.Calcula(operacion, mes, anyo); } else { iteracion++; } } operacion = -1; break; default: //Registro.Mensaje("Operacion no implementada. Solo se permite 0, 1, 2 y 99 para Salir."); break; } iteracion++; if (iteracion > 5) { Registro.Mensaje("Ha finalizado correctamente la carga de datos e historificación de los mismos."); seguir = false; } else { System.Threading.Thread.Sleep(15000); } } while (seguir); } catch (Exception ex) { Registro.Mensaje(ex.Message); } }