/// <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); }
/// <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); }
/// <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); }
/// <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); }