Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
            }
        }
Пример #5
0
        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);
                }
            }
        }