Exemple #1
0
        /// <summary>
        /// Imports list of series
        /// </summary>
        /// <param name="importSeries"></param>
        /// <param name="computeDependencies"></param>
        /// <param name="importTag"></param>
        /// <returns>list of series including dependent calculations</returns>
        private SeriesList Import(SeriesList importSeries, bool computeDependencies, string importTag)
        {
            Performance p = new Performance();
            int         calculationCount = 0;
            var         routingList      = new SeriesList();

            foreach (var s in importSeries)
            {
                m_db.Quality.SetFlags(s); // to do, log/email flaged data
                m_db.ImportSeriesUsingTableName(s, m_saveOption);
                CheckForAlarms(s);

                routingList.Add(s);
                if (computeDependencies)
                {
                    var z = ComputeDependenciesSameInterval(s);
                    calculationCount += z.Count;
                    foreach (var cs in z)
                    {
                        CheckForAlarms(cs);
                    }
                    routingList.AddRange(z);
                }
            }

            Export(importTag, routingList);
            Stats(importSeries.Count(), p.ElapsedSeconds, calculationCount, "instant");
            return(routingList);
        }
Exemple #2
0
        /// <summary>
        /// Imports time series data,
        /// 1) set flags
        /// 2) active alarms (TO DO)
        /// 3) compute dependent data (same interval)
        /// 4) compute daily data when encountering midnight values
        /// </summary>
        /// <param name="importSeries"></param>
        /// <param name="computeDependencies"></param>
        /// <param name="computeDailyDependencies"></param>
        public void Import(SeriesList importSeries,
                           bool computeDependencies      = false,
                           bool computeDailyDependencies = false,
                           string importTag = "data")
        {
            var calculationQueue = new List <CalculationSeries>();
            var routingList      = new SeriesList();

            foreach (var s in importSeries)
            {
                m_db.Quality.SetFlags(s);          // to do, log/email flaged data
                m_db.Alarms.Check(s);              // check for alarms; send email make phone calls
                var folderNames = new string[] {}; // TO DO //hydromet/cbtt default.
                m_db.ImportSeriesUsingTableName(s, folderNames, m_saveOption);
                routingList.Add(s);
                if (computeDependencies)
                {
                    var z = ComputeDependenciesSameInterval(s);
                    routingList.AddRange(z);
                }
                if (computeDailyDependencies && NeedDailyCalc(s))
                {  // daily calcs that depend on instant
                    GetDailyDependentCalculations(s, calculationQueue);
                }
            }
            if (calculationQueue.Count > 0)
            {
                PerformDailyComputations(importSeries, calculationQueue, routingList);
            }
            RouteData(importTag, routingList);
        }
Exemple #3
0
        /// <summary>
        /// Imports time series data,
        /// 1) set flags
        /// 2) active alarms (TO DO)
        /// 3) compute dependent data (same interval)
        /// 4) compute daily data when encountering midnight values
        /// </summary>
        /// <param name="importSeries"></param>
        /// <param name="computeDependencies"></param>
        /// <param name="computeDailyDependencies"></param>
        public void Import(SeriesList importSeries,
                           bool computeDependencies      = false,
                           bool computeDailyDependencies = false,
                           string importTag = "data")
        {
            var calculationQueue = new List <CalculationSeries>();
            var routingList      = new SeriesList();

            foreach (var s in importSeries)
            {
                m_db.Quality.SetFlags(s); // to do, log/email flaged data
                ProcessAlarms(s);
                var folderNames = SetupDefaultFolders(s);

                m_db.ImportSeriesUsingTableName(s, folderNames, m_saveOption);
                routingList.Add(s);
                if (computeDependencies)
                {
                    var z = ComputeDependenciesSameInterval(s);
                    routingList.AddRange(z);
                }
                if (computeDailyDependencies && NeedDailyCalc(s))
                {  // daily calcs that depend on instant
                    GetDailyDependentCalculations(s, calculationQueue);
                }
            }
            if (calculationQueue.Count > 0)
            {
                PerformDailyComputations(importSeries, calculationQueue, routingList);
            }
            RouteData(importTag, routingList);
        }
Exemple #4
0
        /// <summary>
        /// Imports time series data,
        /// 1) set flags
        /// 2) active alarms (TO DO)
        /// 3) compute dependent data (same interval)
        /// 4) compute daily data when encountering midnight values
        /// </summary>
        /// <param name="inputSeriesList"></param>
        /// <param name="computeDependencies"></param>
        /// <param name="computeDailyEachMidnight"></param>
        public void Import(SeriesList inputSeriesList,
                           bool computeDependencies      = false,
                           bool computeDailyEachMidnight = false,
                           string importTag = "data")
        {
            var calculationQueue = new SeriesList();
            var routingList      = new SeriesList();

            foreach (var s in inputSeriesList)
            {
                // set flags.
                Logger.WriteLine("Checking Flags ");
                m_db.Quality.SetFlags(s); // to do, log/email flagged data
                // To Do.. check for alarms..


                m_db.ImportSeriesUsingTableName(s, "");
                routingList.Add(s);

                if (computeDependencies)
                {
                    var z = ComputeDependenciesSameInterval(s);
                    routingList.AddRange(z);
                }
                if (computeDailyEachMidnight)
                {
                    var x = GetDailyCalculationsIfMidnight(s);
                    foreach (var item in x)
                    {
                        if (!calculationQueue.ContainsTableName(item))
                        {
                            calculationQueue.Add(item);
                        }
                    }
                }
            }

            if (calculationQueue.Count > 0)
            {
                // do Actual Computations now. (in proper order...)
                var list = new List <CalculationSeries>();
                foreach (Series item in calculationQueue)
                {
                    list.Add(item as CalculationSeries);
                }
                TimeSeriesDependency td = new TimeSeriesDependency(list);
                var sortedCalculations  = td.Sort();
                foreach (CalculationSeries cs in sortedCalculations)
                {
                    Console.Write(">>> " + cs.Table.TableName + ": " + cs.Expression);
                    //var cs = item as CalculationSeries;
                    var t1 = inputSeriesList.MinDateTime.Date;
                    var t2 = inputSeriesList.MaxDateTime;

                    if (t1.Date == t2.AddDays(-1).Date) // spans midnight, compute yesterday.
                    {
                        t1 = t1.Date;
                        t2 = t1.Date;
                    }

                    cs.Calculate(t1, t2);
                    if (cs.Count > 0)
                    {
                        routingList.Add(cs);
                        if (cs.CountMissing() > 0)
                        {
                            Console.WriteLine(" Missing " + cs.CountMissing() + " records");
                        }
                        else
                        {
                            Console.WriteLine(" OK");
                        }
                    }
                }
            }

            SeriesList instantRoute = new SeriesList();
            SeriesList dailyRoute   = new SeriesList();

            // route data to other locations.
            foreach (var item in routingList)
            {
                TimeSeriesName tn = new TimeSeriesName(item.Table.TableName);
                item.Parameter = tn.pcode;
                item.SiteID    = tn.siteid;
                if (item.TimeInterval == TimeInterval.Irregular)
                {
                    instantRoute.Add(item);
                }
                if (item.TimeInterval == TimeInterval.Daily)
                {
                    dailyRoute.Add(item);
                }
            }
            Console.WriteLine("Routing data");
            TimeSeriesRouting.RouteInstant(instantRoute, importTag, m_routing);
            TimeSeriesRouting.RouteDaily(dailyRoute, importTag, m_routing);
        }