コード例 #1
0
        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;
        }
コード例 #2
0
 public TestArgs()
 {
     Lexer    = new MonitorScriptLexer();
     Parser   = new MonitorScriptParser(Lexer.ErrorSink);
     Result   = new PatternTestResults();
     Patterns = new List <PatternComplex>();
 }
コード例 #3
0
 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;
                 }
             }
         }
     }
 }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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
                }
            }
        }
コード例 #8
0
        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);
        }