internal void RunScriptsOnAll(Pattern pattern) { CheckAutoSave(); PrepareResults(); if (pattern == null) { var r = new PatternTestResults(); r.Log.Add($"{DateTime.Now.ToShortTimeString()} You must select a Pattern"); RenderResults(r); return; } StatusPanel.SP_DisplayRemainingTime = false; StatusPanel.StatusUpdate(StatusModel.Update("Preparing File List")); MonitorScriptIDEViewModel.RunScriptsOnAll(new TestArgs { Script = tbScript.Text, ShowTokens = ckbShowTokens.Checked, ResultCallback = RenderResults, Pattern = pattern, StatusUpdate = StatusPanel.StatusUpdate }, RunScriptOnAllCallback); return; }
public TestArgs() { Lexer = new MonitorScriptLexer(); Parser = new MonitorScriptParser(Lexer.ErrorSink); Result = new PatternTestResults(); Patterns = new List <PatternComplex>(); }
private static void PostProcessPatterns(PatternTestResults result) { foreach (var summary in result.PatternSummaries) { var removeEventNames = new List <string>(); foreach (var freq in summary.Frequencies.Where(n => n.Path == null)) { if (summary.Frequencies.Count(n => n.Name == freq.Name) > 1) { removeEventNames.Add(freq.Name); } } for (int i = summary.Frequencies.Count - 1; i >= 0; i--) { if (summary.Frequencies[i].Path == null && removeEventNames.Contains(summary.Frequencies[i].Name)) { removeEventNames.Remove(summary.Frequencies[i].Name); summary.Frequencies.RemoveAt(i); if (removeEventNames.Count == 0) { break; } } } } }
public PatternTestResults Scan(List <PatternComplex> patterns, string path, PatternTestResults result) { _result = result ?? throw new Exception("result must never be null!"); _path = path; try { var file = XmlDal.CacheModel.GetFile(path); var scanner = new RealTimePatternScanService(); foreach (PatternComplex item in patterns.Where(n => n.Sources.Contains(file.SourceType))) { var pattern = item.Clone(); pattern.PrepareForScan(); pattern.OnFound += PatternFound; pattern.OnReset += PatternReset; scanner.AddPattern(pattern); } if (scanner.IsEmpty) { return(_result); } var rawTextString = file.RawTextString; scanner.Start(); scanner.Scan(rawTextString, file.SourceType); scanner.Stop(); PostProces(_result); if (_result.PatternSummaries.Count() == 0) { _result.Log.Add($"{DateTime.Now.ToShortTimeString()} NO PATTERNS FOUND..."); } _result.Log.Add($"{DateTime.Now.ToShortTimeString()} Pattern Scan Complete..."); return(_result); } finally { _result = null; _path = null; } }
private void RenderResults(PatternTestResults result) { if (InvokeRequired) { Invoke(new Action <PatternTestResults>(RenderResults), result); return; } _lastResults = result; try { #region Result Map if (result.PatternSummaries.Count() == 0) { ckbResults.Checked = false; ckbShowOutput.Checked = true; } else { scMain.Panel2Collapsed = false; List <PatternTestResult> patterns = new List <PatternTestResult>(); foreach (var item in result.PatternSummaries) { patterns.AddRange(item.Patterns); } StatusPanel.StatusUpdate(StatusModel.Update($"Rendering...")); RenderTreeView(patterns); RenderGrid(patterns); RenderSummary(result.PatternSummaries); ckbResults.Checked = true; } #endregion t.Text = string.Join(Environment.NewLine, result.Log.ToArray()); AdjustSplitterDistance(); } finally { StatusPanel.StatusUpdate(StatusModel.Completed); } }
public static DataTable PrepareCSVExport(PatternTestResults lastResults) { var dt = new DataTable(); // TODO: Need to update with new data structure. - Sara //dt.Columns.Add(new DataColumn("Id", typeof(int))); //dt.Columns.Add(new DataColumn("Total Duration", typeof(string))); //dt.Columns.Add(new DataColumn("Total Duration Outside", typeof(string))); //dt.Columns.Add(new DataColumn("Total Duration Inside", typeof(string))); //dt.Columns.Add(new DataColumn("Total IdleTime Outside", typeof(string))); //dt.Columns.Add(new DataColumn("Total IdleTime Inside", typeof(string))); //dt.Columns.Add(new DataColumn("Total Within Baseline", typeof(string))); //dt.Columns.Add(new DataColumn("Total Outside Baseline", typeof(string))); //dt.Columns.Add(new DataColumn("Total No Baseline", typeof(string))); //dt.Columns.Add(new DataColumn("Within Baseline", typeof(string))); //dt.Columns.Add(new DataColumn("Outside Baseline", typeof(string))); //dt.Columns.Add(new DataColumn("No Baseline", typeof(string))); //dt.Columns.Add(new DataColumn("Duration", typeof(string))); //dt.Columns.Add(new DataColumn("Duration Outside Of Duration", typeof(string))); //dt.Columns.Add(new DataColumn("Duration Inside Of Duration", typeof(string))); //dt.Columns.Add(new DataColumn("IdleTime Outside Of Duration", typeof(string))); //dt.Columns.Add(new DataColumn("IdleTime Inside Of Duration", typeof(string))); //dt.Columns.Add(new DataColumn("DateTime", typeof(string))); //dt.Columns.Add(new DataColumn("EventPattern", typeof(string))); //var maxPatternsForExcel = lastResults.Patterns.Where(n => n.Events.Any()).Max(n => n.Events[0].DurationPatternForExcel.Count()); //var _col = 'a'; //for (int n = 0; n < maxPatternsForExcel; n++) //{ // dt.Columns.Add(new DataColumn($"{_col}", typeof(char))); // _col++; //} //var i = 1; //foreach (var item in lastResults.Patterns) //{ // var _totalDurationOutside = new TimeSpan(); // var _totalDurationInside = new TimeSpan(); // var _totalIdleTimeOutside = new TimeSpan(); // var _totalIdleTimeInside = new TimeSpan(); // var _totalWithinBaseline = 0; // var _totalOutsideBaseline = 0; // var _totalNoBaseline = 0; // foreach (var e in item.Events) // { // _totalDurationOutside = _totalDurationOutside.Add(e.DurationOutsideOfDuration); // _totalDurationInside = new TimeSpan().Add(e.DurationInsideOfDuration); // _totalIdleTimeOutside = _totalIdleTimeOutside.Add(e.IdleTimeOutsideOfDuration); // _totalIdleTimeInside = _totalIdleTimeInside.Add(e.IdleTimeInsideOfDuration); // _totalWithinBaseline += (e.WithinBaseline ? 1 : 0); // _totalOutsideBaseline += (e.OutsideBaseline ? 1 : 0); // _totalNoBaseline += (e.NoBaseline ? 1 : 0); // } // foreach (var e in item.Events) // { // var row = new List<object> // { // i, // item.TotalDuration.ToExcelString(), // _totalDurationOutside.ToExcelString(), // new TimeSpan().ToExcelString(), // _totalIdleTimeOutside.ToExcelString(), // _totalIdleTimeInside.ToExcelString(), // _totalWithinBaseline.ToExcelString(), // _totalOutsideBaseline.ToExcelString(), // _totalNoBaseline.ToExcelString() // }; // row.Add(e.WithinBaseline.ToExcelString()); // row.Add(e.OutsideBaseline.ToExcelString()); // row.Add(e.NoBaseline.ToExcelString()); // row.Add(e.Duration.ToExcelString()); // row.Add(e.DurationOutsideOfDuration.ToExcelString()); // row.Add(e.DurationInsideOfDuration.ToExcelString()); // row.Add(e.IdleTimeOutsideOfDuration.ToExcelString()); // row.Add(e.IdleTimeInsideOfDuration.ToExcelString()); // row.Add(e.DateTime.Value.ToString(DateTimeExt.DATE_FORMAT)); // row.Add(e.Name); // for (int n = 0; n < maxPatternsForExcel; n++) // { // if (n < e.DurationPatternForExcel.Count) // row.Add(e.DurationPatternForExcel[n] ? 'x' : ' '); // else // row.Add(' '); // } // // Add Row // DataRow dr = dt.NewRow(); // dr.ItemArray = row.ToArray(); // dt.Rows.Add(dr); // } // i++; //} return(dt); }
private void PostProces(PatternTestResults result) { foreach (var item in result.PatternSummaries) { foreach (var p in item.Patterns) { var _totalIdleTime = new TimeSpan(); if (p.Options.IdleTimeOption) { _totalIdleTime = IdleTimePostProcess(p); } PostProcessFrequency(p, item); PostProcessUnexpected(p.Events, item); PostProcessKnownIdle(p.Events, item); PostProcessDuration(p.Events, item); #region Summary if (p.Options.TotalTimeOption) { p.Events.Add(new PatternTestResultEventPattern($"{p.TotalDuration.ToFixedTimeString()} - {MonitorScriptService.TOTALTIME}", EventType.TotalTime, p.Path, p.StartiLine, p.EndiLine, p.Events.Last().Line, p.Events.Last().DateTime, p.TotalDuration)); p.Name = $"{p.Name} {p.TotalDuration.ToShortReadableString()}"; } #region TotalIdleTime if (p.Options.IdleTimeOption) { p.Events.Add(new PatternTestResultEventPattern($"{_totalIdleTime.ToFixedTimeString()} - {MonitorScriptService.TOTALIDLETIME}", EventType.TotalIdleTime, p.Path, p.StartiLine, p.EndiLine, p.Events.Last().Line, p.Events.Last().DateTime, _totalIdleTime)); } #endregion TotalIdleTime if (true) //p.Warnings.Count() > 0) { p.Events.Add(new PatternTestResultEventPattern($" Warning - Stop not found ....", EventType.Warning, p.Path, p.StartiLine, p.EndiLine, p.Events.Last().Line, p.Events.Last().DateTime, new TimeSpan())); } #endregion Summary } } }
private static bool RunPatternScan(TestArgs args) { args.StatusUpdate(StatusModel.Update("Preparing Scan")); if (!AbstractSyntaxTreeToPatterns(args)) { return(false); } #region Prepare Files for scanning if (args.Files.Count == 0) { var temp = DateTime.Now.ToShortTimeString(); args.Result.Log.Add($@"{temp} {PATTERN_SYNTAX_ERROR} {new string(' ', temp.Length)} You must open or select a file before you can scan for the Pattern!"); return(false); } var files = args.Files.Distinct().ToList(); long current = 0; var total = files.Count(); var sw2 = new Stopwatch("Filtering Files for Pattern Scan"); var sourceTypes = new List <string>(); foreach (var pattern in args.Patterns) { foreach (var source in pattern.Sources) { if (!sourceTypes.Contains(source)) { sourceTypes.Add(source); } } } // Only Scan Files that have a Pattern for their given SourceType List <string> ff = new List <string>(); foreach (var source in sourceTypes) { var p = XmlDal.CacheModel.Options.CachedSourceTypes.FirstOrDefault(n => n.Type == source); if (p != null) { ff.AddRange(p.Files); } } var query = from f in ff join f2 in args.Files on f equals f2 select f; current = 0; total = query.Count(); #endregion PreProcessPatterns(args); Parallel.ForEach(query, (path) => { if (Shutdown.Now) { return; } var file = XmlDal.CacheModel.GetFile(path); var sw = new Stopwatch($"Pattern Scan on \"{file.Path}\""); Interlocked.Increment(ref current); int _current = (int)Interlocked.Read(ref current); args.StatusUpdate(StatusModel.Update("Scanning for Patterns", $@"{_current} of {total}", total, _current)); var result = new PatternTestResults(args.Result); new PatternScanService().Scan(args.Patterns, file.Path, result); lock (args) { args.Result.Merge(result); } // If we do not unload each file after a Scan then we will eat up all the memory. - Sara XmlDal.CacheModel.GetFile(file.Path).UnLoad(); sw.Stop(100); }); PostProcessPatterns(args.Result); return(true); }