private double CalculateNextX(Random rnd, DoubleSeries s, PFSeriesConfig c, Function f, string fHead, long i) { double t = i / c.TimeQuotient; var arg = ConfigurationParser.ParseArgument("t", t); var periodicPart = ConfigurationParser.ComputeFunction(fHead, f, arg); var ar_part_drivers = 0.0; var ma_part_drivers = 0.0; lock (seriesDict) CalculateDriverParts(c.Drivers, out ar_part_drivers, out ma_part_drivers); var et = rnd.NextGaussian_BoxMuller(c.Mean, c.StdDev); // next noise var xt = c.C + periodicPart + ar_part_drivers + ma_part_drivers + et; lock (seriesDict) { if (s.X.Count > MAX_BUFFER_SIZE) { s.X.RemoveAt(0); } s.X.Add(xt); } return(xt); }
private double CalculateNextXSimple(Random rnd, DoubleSeries s, PFSeriesConfig c, Function f, string fHead, long i) { double t = i / c.TimeQuotient; var arg = ConfigurationParser.ParseArgument("t", t); var xt = ConfigurationParser.ComputeFunction(fHead, f, arg); s.X.Add(xt); return(xt); }
private static void TestConfigurationParser() { Console.WriteLine("DataStreamGenerator Configuration Parser .NET"); Console.WriteLine("=============================================\n"); string tomlFile = @"C:\Users\P41608\Desktop\DSG_conf1.toml"; ConfigurationParser.GetSeriesConfigurations(tomlFile); }
static void Main(string[] args) { Console.WriteLine("DataStreamGenerator v1.0"); Console.WriteLine("------------------------\n"); // parse configuration toml file string tomlFile = @"\configs\DSG_conf2.toml"; Console.WriteLine($"parsing configuration file: {tomlFile}"); var generatorConfig = ConfigurationParser.GetGeneratorConfig(tomlFile); var configDict = ConfigurationParser.GetSeriesConfigurations(tomlFile); var seriesDict = new Dictionary <string, DoubleSeries>(); // convert to taskable jobs Console.WriteLine("convert configuration to jobs"); foreach (var sc in configDict) { if (sc.Value.GetType() == typeof(ARSeriesConfig) || sc.Value.GetType() == typeof(ARMASeriesConfig) || sc.Value.GetType() == typeof(PFSeriesConfig)) { seriesDict.Add(sc.Key, new DoubleSeries()); } } // setup environment Random rnd; if (generatorConfig.Seed >= 0) { rnd = new Random(generatorConfig.Seed); } else { rnd = new Random(); } Random groupNameRnd = new Random(); // if ENV=development var group = generatorConfig.Id + "_" + groupNameRnd.Next(1, 10000); var brokerHostName = generatorConfig.BrokerHostName; // Stream or Generate switch (generatorConfig.Type.Trim().ToLower()) { case "stream": Stream(generatorConfig, group, seriesDict, configDict, rnd); break; case "generate": Generate(generatorConfig, seriesDict, rnd); break; } }
private void StreamSeries(StreamingJob job, PFSeriesConfig c) { DateTime dtts = new DateTime(1000, 1, 1, 0, 0, 0, 0); string fHead = $"PF({string.Join(",", c.Arguments)})"; Function f = ConfigurationParser.ParseFunction(fHead, c.Expression); for (long i = 0; true; i++) { job.Token.ThrowIfCancellationRequested(); double xt = 0.0; lock (seriesDict) xt = CalculateNextX(rnd, series, c, f, fHead, i); if (c.Export && i > c.Delay) { double outlierCandidate = rnd.NextDouble(); if (outlierCandidate < c.OutlierRatio3s) { xt = GenerateOutlier(rnd, xt, series.X, 3, 4); } else if (outlierCandidate < c.OutlierRatio2s) { xt = GenerateOutlier(rnd, xt, series.X, 2, 3); } // string timestamp = DateTime.Now.ToString(DATETIME_FORMAT); // v1 string timestamp = dtts.ToString(generatorConfig.DateTimeFormat); // v2 var msg = JsonConvert.SerializeObject(GenerateMessage(c, group, timestamp, xt)); job.Client.Publish(config.Topic, Encoding.UTF8.GetBytes(msg)); Thread.Sleep(c.Interval); dtts = dtts.AddMilliseconds(c.Interval); // v2 } else if (i > c.Delay) { Thread.Sleep(c.Interval); } } }