Example #1
0
        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);
        }
Example #2
0
        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();
                    }
                }
            }
        }
Example #3
0
        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;
                }
            }
        }
Example #4
0
        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);
        }
Example #5
0
        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));
            }
        }
Example #6
0
        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);
            }
        }