Esempio n. 1
0
        private static int VerifyResults(CommandLineOptions options, JObject json)
        {
            var jresult = JObject.Parse(File.ReadAllText(options.ExpectedResultsFile));

            json["maxCpuUsage"] = _maxCpuUsage;
            json["avgCpuUsage"] = _avgCpuUsage;

            json["maxMemUsage"] = _maxMemUsage;
            json["avgMemUsage"] = _avgMemUsage;

            // TailLogs

            IList<JToken> inputs = json["timberwinr"]["inputs"].Children().ToList();
            foreach (JToken t in inputs)
            {
                JProperty inputProp = t.First as JProperty;
                switch (inputProp.Name)
                {
                    case "udp":
                        if (VerifyConditions(json, new string[] { "udp" }, inputProp, jresult) != 0)
                            return 1;
                        break;
                    case "tcp":
                        if (VerifyConditions(json, new string[] { "tcp" }, inputProp, jresult) != 0)
                            return 1;
                        break;
                    case "log":
                    case "taillog":
                        if (VerifyConditions(json, new string[] { "log", "taillog" }, inputProp, jresult) != 0)
                            return 1;
                        break;
                }
            }

            return 0;
        }
Esempio n. 2
0
        private static void StartJsonRolling(CommandLineOptions options)
        {
            if (options.JsonRollingLogFiles.Length > 0)
            {
                foreach (var logFile in options.JsonRollingLogFiles)
                {
                    _totalMessagesToSend += options.NumMessages;

                    if (options.Verbose)
                        LogManager.GetCurrentClassLogger()
                            .Info("Starting RollingLogFile Generator for {0}",
                                Path.GetFullPath(Path.Combine(options.JsonLogDir, logFile)));
                    _tasks.Add(Task.Factory.StartNew(() =>
                    {
                        var p = new JsonLogFileTestParameters()
                        {
                            NumMessages = options.NumMessages,
                            LogFileDir = options.JsonLogDir,
                            LogFileName = logFile,
                            SleepTimeMilliseconds = options.JsonRate
                        };
                        JsonRollingLogFileGenerator.Generate(p);
                        Thread.Sleep(250);
                    }));

                }
            }
        }
Esempio n. 3
0
        static void StartUdp(CommandLineOptions options)
        {
            if (options.Udp > 0)
            {
                if (options.Verbose)
                    LogManager.GetCurrentClassLogger()
                        .Info("Starting UDP Generator for {0}:{1}", options.UdpHost, options.Udp);

                _tasks.Add(Task.Factory.StartNew(() =>
                {
                    var p = new UdpTestParameters()
                    {
                        Port = options.Udp,
                        Host = options.UdpHost,
                        NumMessages = options.NumMessages,
                        SleepTimeMilliseconds = options.UdpRate
                    };
                    _totalMessagesToSend += UdpTestGenerator.Generate(p);
                }));
            }
        }
Esempio n. 4
0
        private static void SetupTestDirectory(CommandLineOptions options)
        {
            if (options.TestDir != "." && Directory.Exists(options.TestDir))
                Directory.Delete(options.TestDir, true);

            if (!Directory.Exists(options.TestDir))
                Directory.CreateDirectory(options.TestDir);

            CopySourceFile(options.TestFile, options.TestDir);
            CopySourceFile(options.TimberWinRConfigFile, options.TestDir);
            CopySourceFile(options.ExpectedResultsFile, options.TestDir);

            Directory.SetCurrentDirectory(options.TestDir);
        }
Esempio n. 5
0
        static Task[] RunGenerators(CommandLineOptions options)
        {
            _totalMessagesToSend = options.TotalMessages;

            _monitorTask = Task.Factory.StartNew(() =>
                {
                    using (var syncHandle = new ManualResetEventSlim())
                    {
                        try
                        {
                            // Execute the query
                            while (!_cancellationTokenSource.Token.IsCancellationRequested)
                            {
                                sampleUsages();
                                // LogManager.GetCurrentClassLogger().Info("Starting CPU Usage: {0}, RAM Usage: {1}", getCurrentCpuUsage(), getAvailableRAM());
                                syncHandle.Wait(TimeSpan.FromMilliseconds(options.JsonRate), _cancellationTokenSource.Token);
                            }
                        }
                        catch (OperationCanceledException)
                        {
                        }
                        catch (Exception ex)
                        {
                            LogManager.GetCurrentClassLogger().Error(ex);
                        }
                    }
                }, _cancellationTokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Current);

            StartJson(options);
            StartJsonRolling(options);
            StartUdp(options);
            StartTcp(options);

            return _tasks.ToArray();
        }
Esempio n. 6
0
        static void ResetTests(CommandLineOptions options)
        {
            if (File.Exists(".timberwinrdb"))
                File.Delete(".timberwinrdb");

            if (File.Exists("TimberWinR.TestGenerator\\TimberWinRTestGen.log"))
                File.Delete("TimberWinR.TestGenerator\\TimberWinRTestGen.log");

            if (File.Exists("TimberWinR\\TimberWinR.log"))
                File.Delete("TimberWinR\\TimberWinR.log");

            if (options.JsonLogFiles.Length > 0)
            {
                foreach (var logFile in options.JsonLogFiles)
                {
                    if (File.Exists(logFile))
                        File.Delete(logFile);
                }
            }

            if (options.JsonRollingLogFiles.Length > 0)
            {
                foreach (var logFile in options.JsonRollingLogFiles)
                {
                    if (File.Exists(logFile))
                        File.Delete(logFile);
                }
            }
        }
Esempio n. 7
0
        private static string[] ParseTestArguments(string testFile, ref CommandLineOptions options)
        {
            options = new CommandLineOptions();
            JObject jtest = JObject.Parse(File.ReadAllText(testFile));
            IList<JToken> inputs = jtest["arguments"].Children().ToList();
            List<string> testargs = new List<string>();
            foreach (JProperty it in inputs)
            {
                testargs.Add(it.Name);

                var cc = it.Value.Children().Count();
                if (cc > 0)
                {
                    for (int i = 0; i < cc; i++)
                    {
                        testargs.Add(it.Value[i].ToString());
                    }
                }
                else
                {
                    testargs.Add(it.Value.ToString());
                }
            }
            var fargs = testargs.ToArray();
            return fargs;
        }
Esempio n. 8
0
        static int Main(string[] args)
        {
            _totalMessagesToSend = 0;

            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName = "% Processor Time";
            cpuCounter.InstanceName = "_Total";

            ramCounter.CategoryName = "Memory";
            ramCounter.CounterName = "% Committed Bytes In Use";

            Options = new CommandLineOptions();

            if (CommandLine.Parser.Default.ParseArguments(args, Options))
            {
                var testFile = Options.TestFile;
                if (!string.IsNullOrEmpty(testFile))
                {
                    if (!File.Exists(Options.TestFile))
                        throw new Exception(string.Format("No such test file: {0} found", Options.TestFile));

                    var fargs = ParseTestArguments(testFile, ref Options);
                    if (!CommandLine.Parser.Default.ParseArguments(fargs, Options))
                        return 2;
                }

                SetupTestDirectory(Options);

                var swOverall = Stopwatch.StartNew();
                swOverall.Start();

                InitializeLogging(Options.LogLevel);

                LogManager.GetCurrentClassLogger().Info("Starting CPU Usage: {0}, RAM Usage: {1}", getCurrentCpuUsage(), getAvailableRAM());

                // Reset the tests.
                ResetTests(Options);

                var sw = Stopwatch.StartNew();

                // Startup TimberWinR
                if (Options.StartTimberWinR)
                    StartTimberWinR(Options.TimberWinRConfigFile, Options.LogLevel, ".", false);

                // Run the Generators
                var arrayOfTasks = RunGenerators(Options);

                // Wait for all Generators to finish
                try
                {
                    Task.WaitAll(arrayOfTasks);
                }
                catch (AggregateException aex)
                {
                    LogManager.GetCurrentClassLogger().Error(aex);
                }

                LogManager.GetCurrentClassLogger().Info("Generation Finished: " + sw.Elapsed);
                sw.Reset();
                sw.Start();

                // All generators are finished, wait till senders are done.
                WaitForOutputTransmission();

                LogManager.GetCurrentClassLogger().Info("Finished Transmission: " + sw.Elapsed);
                sw.Reset();
                sw.Start();

                // Get all the stats
                JObject jsonTimberWinr;

                if (Options.StartTimberWinR)
                    jsonTimberWinr = ShutdownTimberWinR();
                else
                {
                    jsonTimberWinr = GetDiagnosticsOutput();
                    if (jsonTimberWinr == null)
                        return 3;
                }

                LogManager.GetCurrentClassLogger().Info("Finished Shutdown: " + sw.Elapsed);
                sw.Stop();

                swOverall.Stop();
                LogManager.GetCurrentClassLogger().Info("Total Elapsed Time: {0}", swOverall.Elapsed);

                int results = VerifyResults(Options, jsonTimberWinr);

                Console.ReadKey();
                return results;
            }

            return 1;
        }