/// <summary> /// Routes data to incoming and/or outgoing directories /// </summary> /// <param name="importTag"></param> /// <param name="routingList"></param> private void RouteData(string importTag, SeriesList routingList) { 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); } } Logger.WriteLine("Routing data"); TimeSeriesRouting.RouteInstant(instantRoute, importTag, m_routing); TimeSeriesRouting.RouteDaily(dailyRoute, importTag, m_routing); }
/// <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); }