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