示例#1
0
        public void Analyze(string[] contentFilters, params string[] files)
        {
            var indexer = new SvcIndexer();

            indexer.Progress += HandleIndexerProgress;

            foreach (var file in files)
            {
                OnProgress(file, FileAccess.Read, 1, 0);
                var reader = new StreamReader(file);

                // Filters, empty for now.
                string[] filters = contentFilters ?? new string[] { };

                // Read file
                IEnumerable <TraceEvent> events = indexer.Index(reader);
                List <long> occurrences         = new List <long>();
                if (filters.Length > 0)
                {
                    foreach (var filter in filters)
                    {
                        occurrences.AddRange(indexer.FindOccurrences(reader, filter));
                    }
                }

                // Only use Transport
                events = events.Where(e => e.Source == "Transport");

                string outputfile = files.First() + ".csv";
                OnProgress(outputfile, FileAccess.Write, 1, 0);
                using (StreamWriter sw = new StreamWriter(outputfile, true))
                {
                    sw.WriteLine("Date;DurationInMs;Method;URL");
                    foreach (var pair in events.GroupBy(e => e.ActivityID))
                    {
                        var first = pair.OrderBy(p => p.TimeCreated).First();
                        var last  = pair.OrderBy(p => p.TimeCreated).Last();

                        // If there is a filter but the first/last pair do not match, skip this pair.
                        if (filters.Length > 0 && !occurrences.Where(o => first.ContainsPosition(o) || last.ContainsPosition(o)).Any())
                        {
                            continue;
                        }

                        var    duration     = last.TimeCreated - first.TimeCreated;
                        string date         = first.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss.fff");
                        string durationInMs = first == last ? "N/A" : ((long)duration.TotalMilliseconds).ToString();
                        string method       = first.Method;
                        string url          = first.To;
                        sw.WriteLine(string.Format("{0};{1};{2};{3}",
                                                   "\"" + date.Replace("\"", "\"\"") + "\"",
                                                   "\"" + durationInMs.Replace("\"", "\"\"") + "\"",
                                                   "\"" + method.Replace("\"", "\"\"") + "\"",
                                                   "\"" + url.Replace("\"", "\"\"") + "\""
                                                   ));
                    }
                }
                OnProgress(outputfile, FileAccess.Write, 1, 1);
            }
        }
示例#2
0
        public void Analyze(string[] contentFilters, params string[] files)
        {
            var indexer = new SvcIndexer();
            indexer.Progress += HandleIndexerProgress;

            foreach (var file in files)
            {
                OnProgress(file, FileAccess.Read, 1, 0);
                var reader = new StreamReader(file);

                // Filters, empty for now.
                string[] filters = contentFilters ?? new string[] { };

                // Read file
                IEnumerable<TraceEvent> events = indexer.Index(reader);
                List<long> occurrences = new List<long>();
                if (filters.Length > 0)
                {
                    foreach (var filter in filters)
                    {
                        occurrences.AddRange(indexer.FindOccurrences(reader, filter));
                    }
                }

                // Only use Transport
                events = events.Where(e => e.Source == "Transport");

                string outputfile = files.First() + ".csv";
                OnProgress(outputfile, FileAccess.Write, 1, 0);
                using (StreamWriter sw = new StreamWriter(outputfile, true))
                {
                    sw.WriteLine("Date;DurationInMs;Method;URL");
                    foreach (var pair in events.GroupBy(e => e.ActivityID))
                    {
                        var first = pair.OrderBy(p => p.TimeCreated).First();
                        var last = pair.OrderBy(p => p.TimeCreated).Last();

                        // If there is a filter but the first/last pair do not match, skip this pair.
                        if (filters.Length > 0 && !occurrences.Where(o => first.ContainsPosition(o) || last.ContainsPosition(o)).Any())
                        {
                            continue;
                        }

                        var duration = last.TimeCreated - first.TimeCreated;
                        string date = first.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss.fff");
                        string durationInMs = first == last ? "N/A" : ((long)duration.TotalMilliseconds).ToString();
                        string method = first.Method;
                        string url = first.To;
                        sw.WriteLine(string.Format("{0};{1};{2};{3}",
                            "\"" + date.Replace("\"", "\"\"") + "\"",
                            "\"" + durationInMs.Replace("\"", "\"\"") + "\"",
                            "\"" + method.Replace("\"", "\"\"") + "\"",
                            "\"" + url.Replace("\"", "\"\"") + "\""
                        ));
                    }
                }
                OnProgress(outputfile, FileAccess.Write, 1, 1);
            }
        }