async Task RunForSymRTC(
            IEnumerableAsync <Sym.Message[]> messages,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            IPrefixMatcher matcher     = postprocessing.CreatePrefixMatcher();
            var            logMessages = messages.MatchTextPrefixes(matcher).Multiplex();

            Sym.IMeetingsStateInspector symMeetingsStateInspector = new Sym.MeetingsStateInspector(matcher);
            Sym.IMediaStateInspector    symMediaStateInspector    = new Sym.MediaStateInspector(matcher, symMeetingsStateInspector);

            var symMeetingEvents = symMeetingsStateInspector.GetEvents(logMessages);
            var symMediagEvents  = symMediaStateInspector.GetEvents(logMessages);

            matcher.Freeze();

            var events = postprocessorInput.TemplatesTracker.TrackTemplates(EnumerableAsync.Merge(
                                                                                symMeetingEvents,
                                                                                symMediagEvents
                                                                                ));

            var serialize = postprocessing.StateInspector.SavePostprocessorOutput(
                events,
                null,
                evtTrigger => TextLogEventTrigger.Make((Sym.Message)evtTrigger),
                postprocessorInput
                );

            await Task.WhenAll(serialize, logMessages.Open());
        }
        async Task RunForSymLog(
            IEnumerableAsync <Sym.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            IPrefixMatcher matcher                  = postprocessing.CreatePrefixMatcher();
            var            inputMultiplexed         = input.Multiplex();
            var            symEvents                = RunForSymMessages(matcher, inputMultiplexed, postprocessorInput.TemplatesTracker, out var symLog);
            var            endOfTimelineEventSource = postprocessing.Timeline.CreateEndOfTimelineEventSource <Sym.Message>();
            var            messagingEventsSource    = postprocessing.Timeline.CreateMessagingEventsSource();
            var            messagingEvents          = messagingEventsSource.GetEvents(
                ((Sym.IMessagingEvents) new Sym.MessagingEvents()).GetEvents(inputMultiplexed));
            var eofEvts = endOfTimelineEventSource.GetEvents(inputMultiplexed);

            matcher.Freeze();

            var events = EnumerableAsync.Merge(
                symEvents,
                messagingEvents,
                eofEvts
                );

            var serialize = postprocessing.Timeline.CreatePostprocessorOutputBuilder()
                            .SetEvents(events)
                            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((Sym.Message)evtTrigger))
                            .Build(postprocessorInput);

            await Task.WhenAll(serialize, symLog.Open(), inputMultiplexed.Open());
        }
        async Task RunForChromeDebug(LogSourcePostprocessorInput input)
        {
            var reader           = new CDL.Reader(postprocessing.TextLogParser, input.CancellationToken).Read(input.OpenLogFile, s => s.Dispose(), input.ProgressHandler);
            var multiplexedInput = reader.Multiplex();

            IPrefixMatcher prefixMatcher          = postprocessing.CreatePrefixMatcher();
            var            matchedMessages        = multiplexedInput.MatchTextPrefixes(prefixMatcher).Multiplex();
            var            webRtcStateInspector   = new CDL.WebRtcStateInspector(prefixMatcher);
            var            processIdDetector      = new CDL.ProcessIdDetector();
            var            nodeDetectionTokenTask = (new CDL.NodeDetectionTokenSource(processIdDetector, webRtcStateInspector)).GetToken(matchedMessages);

            var matcher          = postprocessing.CreatePrefixMatcher();
            var extensionSources = pluginModel.ChromeDebugLogMessagingEventSources.Select(src => src(
                                                                                              matcher, multiplexedInput, input.TemplatesTracker)).ToArray();

            var events = EnumerableAsync.Merge(extensionSources.Select(s => s.Events).ToArray());

            var serialize = postprocessing.Correlation.CreatePostprocessorOutputBuilder()
                            .SetSameNodeDetectionToken(nodeDetectionTokenTask)
                            .SetMessagingEvents(events)
                            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.FromUnknownTrigger(evtTrigger))
                            .Build(input);

            var tasks = new List <Task>();

            tasks.Add(serialize);
            tasks.AddRange(extensionSources.SelectMany(s => s.MultiplexingEnumerables.Select(e => e.Open())));
            tasks.Add(matchedMessages.Open());
            tasks.Add(multiplexedInput.Open());
            await Task.WhenAll(tasks);
        }
        async Task RunForSpringServiceLog(
            IEnumerableAsync <SVC.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            var inputMultiplexed = input.Multiplex();

            var messagingEventsSource = postprocessing.Timeline.CreateMessagingEventsSource();
            var messagingEvents       = messagingEventsSource.GetEvents(
                ((SVC.IMessagingEvents) new SVC.MessagingEvents()).GetEvents(inputMultiplexed));
            var eofEvents = postprocessing.Timeline.CreateEndOfTimelineEventSource <SVC.Message>()
                            .GetEvents(inputMultiplexed);

            var events = EnumerableAsync.Merge(
                messagingEvents,
                eofEvents
                );

            var serialize = postprocessing.Timeline.CreatePostprocessorOutputBuilder()
                            .SetEvents(events)
                            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((SVC.Message)evtTrigger))
                            .Build(postprocessorInput);

            await Task.WhenAll(serialize, inputMultiplexed.Open());
        }
        async Task RunForChromeDebug(
            IEnumerableAsync <CDL.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            var            multiplexedInput = input.Multiplex();
            IPrefixMatcher matcher          = postprocessing.CreatePrefixMatcher();

            var extensionSources = pluginModel.ChromeDebugLogTimeLineEventSources.Select(src => src(
                                                                                             matcher, multiplexedInput, postprocessorInput.TemplatesTracker)).ToArray();

            var events = postprocessorInput.TemplatesTracker.TrackTemplates(EnumerableAsync.Merge(extensionSources.Select(s => s.Events).ToArray()));

            matcher.Freeze();

            var serialize = postprocessing.Timeline.SavePostprocessorOutput(
                events,
                null,
                evtTrigger => TextLogEventTrigger.FromUnknownTrigger(evtTrigger),
                postprocessorInput
                );

            var tasks = new List <Task>();

            tasks.Add(serialize);
            tasks.AddRange(extensionSources.SelectMany(s => s.MultiplexingEnumerables.Select(e => e.Open())));
            tasks.Add(multiplexedInput.Open());
            await Task.WhenAll(tasks);
        }
        async Task RunForWiresharkDpmlMessages(
            IEnumerableAsync <Pdml.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            var logMessages = input.Multiplex();

            Pdml.ITimelineEvents networkEvents = new Pdml.TimelineEvents();
            var endOfTimelineEventSource       = postprocessing.Timeline.CreateEndOfTimelineEventSource <Pdml.Message>();

            var networkEvts = networkEvents.GetEvents(logMessages);
            var eofEvts     = endOfTimelineEventSource.GetEvents(logMessages);

            var events = EnumerableAsync.Merge(
                networkEvts,
                eofEvts
                );

            var serialize = postprocessing.Timeline.CreatePostprocessorOutputBuilder()
                            .SetEvents(events)
                            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((Pdml.Message)evtTrigger))
                            .Build(postprocessorInput);

            await Task.WhenAll(serialize, logMessages.Open());
        }
        async static Task RunForHttpArchive(
            IEnumerableAsync <HAR.Message[]> input,
            string outputFileName,
            CancellationToken cancellation,
            ICodepathTracker templatesTracker,
            XAttribute contentsEtagAttr
            )
        {
            HAR.ITimelineEvents timelineEvents = new HAR.TimelineEvents();

            var events = EnumerableAsync.Merge(
                timelineEvents.GetEvents(input)
                )
                         .ToFlatList();

            await events;

            if (cancellation.IsCancellationRequested)
            {
                return;
            }

            if (templatesTracker != null)
            {
                (await events).ForEach(e => templatesTracker.RegisterUsage(e.TemplateId));
            }

            TimelinePostprocessorOutput.SerializePostprocessorOutput(
                await events,
                null,
                evtTrigger => TextLogEventTrigger.Make((HAR.Message)evtTrigger),
                contentsEtagAttr
                ).SaveToFileOrToStdOut(outputFileName);
        }
        async static Task RunForSymLog(
            IEnumerableAsync <Sym.Message[]> input,
            string outputFileName,
            CancellationToken cancellation,
            ICodepathTracker templatesTracker,
            XAttribute contentsEtagAttr
            )
        {
            IPrefixMatcher matcher = new PrefixMatcher();
            var            events  = RunForSymMessages(matcher, input);

            matcher.Freeze();

            await events;

            if (cancellation.IsCancellationRequested)
            {
                return;
            }

            TimelinePostprocessorOutput.SerializePostprocessorOutput(
                await events,
                null,
                evtTrigger => TextLogEventTrigger.Make((Sym.Message)evtTrigger),
                contentsEtagAttr
                ).SaveToFileOrToStdOut(outputFileName);
        }
        bool IPresenterInternal.TrySelectObject(ILogSource source, TextLogEventTrigger creationTrigger, Func <IVisualizerNode, int> disambiguationFunction)
        {
            Func <IInspectedObject, bool> predecate = obj =>
            {
                return(obj.Owner.Outputs.Any(o => o.LogSource == source) &&
                       obj.StateChangeHistory.Any(change => change.Trigger.CompareTo(creationTrigger) == 0));
            };

            var candidates = EnumRoots().SelectMany(EnumTree).Where(predecate).ToList();

            if (candidates.Count > 0)
            {
                VisualizerNode node;
                if (candidates.Count == 1 || disambiguationFunction == null)
                {
                    node = FindOrCreateNode(candidates[0]);
                }
                else
                {
                    node = candidates
                           .Select(c => FindOrCreateNode(c))
                           .Select(n => new { Node = n, Rating = disambiguationFunction(n) })
                           .OrderByDescending(x => x.Rating)
                           .First().Node;
                }
                if (node != null)
                {
                    SetSelection(new[] { node });
                    return(true);
                }
            }
            return(false);
        }
Exemple #10
0
        async Task RunForChromeDebug(
            IEnumerableAsync <ChromeDebugLog.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            var multiplexedInput = input.Multiplex();
            var matcher          = postprocessing.CreatePrefixMatcher();

            var extensionSources = pluginModel.ChromeDebugLogMessagingEventSources.Select(src => src(
                                                                                              matcher, multiplexedInput, postprocessorInput.TemplatesTracker)).ToArray();

            var events = EnumerableAsync.Merge(extensionSources.Select(s => s.Events).ToArray());

            var serialize = postprocessing.SequenceDiagram.CreatePostprocessorOutputBuilder()
                            .SetMessagingEvents(events)
                            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.FromUnknownTrigger(evtTrigger))
                            .Build(postprocessorInput);

            var tasks = new List <Task>();

            tasks.Add(serialize);
            tasks.AddRange(extensionSources.SelectMany(s => s.MultiplexingEnumerables.Select(e => e.Open())));
            tasks.Add(multiplexedInput.Open());
            await Task.WhenAll(tasks);
        }
        async Task RunForWebRTCDump(
            IEnumerableAsync <WRD.Message[]> inputMessages,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            IPrefixMatcher matcher     = postprocessing.CreatePrefixMatcher();
            var            logMessages = WRD.Helpers.MatchPrefixes(inputMessages, matcher).Multiplex();

            WRD.IWebRtcStateInspector webRtcStateInspector = new WRD.WebRtcStateInspector(matcher);

            var webRtcEvts = webRtcStateInspector.GetEvents(logMessages);

            matcher.Freeze();

            var events = postprocessorInput.TemplatesTracker.TrackTemplates(EnumerableAsync.Merge(
                                                                                webRtcEvts
                                                                                ));

            var serialize = postprocessing.StateInspector.SavePostprocessorOutput(
                events,
                null,
                evtTrigger => TextLogEventTrigger.Make((WRD.Message)evtTrigger),
                postprocessorInput
                );
            await Task.WhenAll(serialize, logMessages.Open());
        }
Exemple #12
0
 bool IPresenter.IsObjectEventPresented(ILogSource source, TextLogEventTrigger objectEvent)
 {
     return(model
            .Groups
            .Where(g => g.Outputs.Any(o => o.LogSource == source))
            .SelectMany(o => o.Events)
            .Any(e => objectEvent.CompareTo(e.Trigger) == 0));
 }
 public StateInspectorEvent(IStateInspectorOutputsGroup group, IStateInspectorOutput output, TextLogEventTrigger trigger, Event originalEvent, int index)
 {
     this.Group         = group;
     this.Output        = output;
     this.Trigger       = trigger;
     this.OriginalEvent = originalEvent;
     this.Index         = index;
 }
        async Task RunForClientLog(
            IEnumerableAsync <Cli.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            var events = RunForClientMessages(input);

            await postprocessing.SequenceDiagram.CreatePostprocessorOutputBuilder()
            .SetMessagingEvents(events)
            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((Cli.Message)evtTrigger))
            .Build(postprocessorInput);
        }
        static Event[] ConvertTriggers <T>(Event[] batch) where T : class, ITriggerStreamPosition, ITriggerTime
        {
            T m;

            foreach (var e in batch)
            {
                if ((m = e.Trigger as T) != null)
                {
                    e.Trigger = TextLogEventTrigger.Make(m);
                }
            }
            return(batch);
        }
Exemple #16
0
        async Task RunForSpringServiceLog(LogSourcePostprocessorInput input)
        {
            var reader = new SpringServiceLog.Reader(postprocessingModel.TextLogParser, input.CancellationToken).Read(input.LogFileName, input.ProgressHandler);

            SVC.IMessagingEvents messagingEvents = new SVC.MessagingEvents();

            var events = EnumerableAsync.Merge(
                messagingEvents.GetEvents(reader)
                );

            await postprocessingModel.Correlation.CreatePostprocessorOutputBuilder()
            .SetMessagingEvents(events)
            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((SVC.Message)evtTrigger))
            .Build(input);
        }
Exemple #17
0
        async static Task RunForChromeDebug(
            IEnumerableAsync <CDL.Message[]> input,
            string outputFileName,
            CancellationToken cancellation,
            ICodepathTracker templatesTracker,
            XAttribute contentsEtagAttr
            )
        {
            var            multiplexedInput = input.Multiplex();
            IPrefixMatcher matcher          = new PrefixMatcher();
            var            logMessages      = CDL.Helpers.MatchPrefixes(multiplexedInput, matcher).Multiplex();

            Sym.IMeetingsStateInspector symMeetingsStateInsector = new Sym.MeetingsStateInspector(matcher);

            var symLog = Sym.Helpers.MatchPrefixes((new Sym.Reader()).FromChromeDebugLog(multiplexedInput), matcher).Multiplex();
            var symMeetingStateEvents = symMeetingsStateInsector.GetEvents(symLog);

            var symMeetingEvents = (new InspectedObjectsLifetimeEventsSource(e =>
                                                                             e.ObjectType == Sym.MeetingsStateInspector.MeetingTypeInfo ||
                                                                             e.ObjectType == Sym.MeetingsStateInspector.MeetingSessionTypeInfo
                                                                             )).GetEvents(symMeetingStateEvents);

            matcher.Freeze();

            var events = EnumerableAsync.Merge(
                symMeetingEvents
                )
                         .ToFlatList();

            await Task.WhenAll(events, symLog.Open(), /*logMessages.Open(),*/ multiplexedInput.Open());

            if (cancellation.IsCancellationRequested)
            {
                return;
            }

            if (templatesTracker != null)
            {
                (await events).ForEach(e => templatesTracker.RegisterUsage(e.TemplateId));
            }

            TimelinePostprocessorOutput.SerializePostprocessorOutput(
                await events,
                null,
                evtTrigger => TextLogEventTrigger.Make((Sym.Message)evtTrigger),
                contentsEtagAttr
                ).SaveToFileOrToStdOut(outputFileName);
        }
Exemple #18
0
        async Task RunForHttpArchive(
            IEnumerableAsync <HAR.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            HAR.ITimelineEvents timelineEvents = new HAR.TimelineEvents();

            var events = EnumerableAsync.Merge(
                postprocessorInput.TemplatesTracker.TrackTemplates(timelineEvents.GetEvents(input))
                );

            await postprocessing.Timeline.CreatePostprocessorOutputBuilder()
            .SetEvents(events)
            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((HAR.Message)evtTrigger))
            .Build(postprocessorInput);
        }
Exemple #19
0
        async Task RunForHttpArchive(
            IEnumerableAsync <HAR.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            HAR.IMessagingEvents messagingEvents = new HAR.MessagingEvents();

            var events = EnumerableAsync.Merge(
                messagingEvents.GetEvents(input)
                );

            await postprocessing.SequenceDiagram.CreatePostprocessorOutputBuilder()
            .SetMessagingEvents(events)
            .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((HAR.Message)evtTrigger))
            .Build(postprocessorInput);
        }
        async Task RunForChromeDebug(
            IEnumerableAsync <CDL.Message[]> inputMessages,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            var inputMultiplexed = inputMessages.Multiplex();

            IPrefixMatcher matcher     = postprocessing.CreatePrefixMatcher();
            var            logMessages = inputMultiplexed.MatchTextPrefixes(matcher).Multiplex();

            CDL.IWebRtcStateInspector webRtcStateInspector = new CDL.WebRtcStateInspector(matcher);

            var webRtcEvts = webRtcStateInspector.GetEvents(logMessages);

            var extensionSources = pluginModel
                                   .ChromeDebugStateEventSources.Select(
                source => source(matcher, inputMultiplexed, postprocessorInput.TemplatesTracker)
                )
                                   .ToArray();

            var eventSources = new List <IEnumerableAsync <Event[]> >
            {
                webRtcEvts
            };

            eventSources.AddRange(extensionSources.Select(s => s.Events));

            matcher.Freeze();

            var events = postprocessorInput.TemplatesTracker.TrackTemplates(EnumerableAsync.Merge(eventSources.ToArray()));

            var serialize = postprocessing.StateInspector.SavePostprocessorOutput(
                events,
                null,
                evtTrigger => TextLogEventTrigger.FromUnknownTrigger(evtTrigger),
                postprocessorInput
                );

            var tasks = new List <Task>();

            tasks.Add(serialize);
            tasks.AddRange(extensionSources.SelectMany(s => s.MultiplexingEnumerables.Select(e => e.Open())));
            tasks.Add(logMessages.Open());
            tasks.Add(inputMultiplexed.Open());
            await Task.WhenAll(tasks);
        }
        async Task RunForHttpArchive(
            IEnumerableAsync <HAR.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            HAR.ITimelineEvents timelineEvents = new HAR.TimelineEvents();

            var events = EnumerableAsync.Merge(
                postprocessorInput.TemplatesTracker.TrackTemplates(timelineEvents.GetEvents(input))
                );

            await postprocessing.Timeline.SavePostprocessorOutput(
                events,
                null,
                evtTrigger => TextLogEventTrigger.Make((HAR.Message)evtTrigger),
                postprocessorInput
                );
        }
Exemple #22
0
        async Task RunForSpringServiceLog(
            IEnumerableAsync <SpringServiceLog.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            SVC.IMessagingEvents messagingEvents = new SVC.MessagingEvents();

            var events = EnumerableAsync.Merge(
                messagingEvents.GetEvents(input)
                );

            await postprocessing.SequenceDiagram.SavePostprocessorOutput(
                events,
                null,
                null,
                null,
                evtTrigger => TextLogEventTrigger.Make((SVC.Message)evtTrigger),
                postprocessorInput
                );
        }
        async Task RunForHttpArchive(
            IEnumerableAsync <HAR.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            HAR.IMessagingEvents messagingEvents = new HAR.MessagingEvents();

            var events = EnumerableAsync.Merge(
                messagingEvents.GetEvents(input)
                );

            await postprocessing.SequenceDiagram.SavePostprocessorOutput(
                events,
                null,
                null,
                null,
                evtTrigger => TextLogEventTrigger.Make((HAR.Message)evtTrigger),
                postprocessorInput
                );
        }
        async static Task RunForChromeDriver(
            IEnumerableAsync <CD.Message[]> input,
            string outputFileName,
            CancellationToken cancellation,
            ICodepathTracker templatesTracker,
            XAttribute contentsEtagAttr
            )
        {
            IPrefixMatcher matcher     = new PrefixMatcher();
            var            logMessages = CD.Helpers.MatchPrefixes(input, matcher).Multiplex();

            CD.ITimelineEvents networkEvents = new CD.TimelineEvents(matcher);

            var networkEvts = networkEvents.GetEvents(logMessages);

            matcher.Freeze();

            var events = EnumerableAsync.Merge(
                networkEvts
                )
                         .ToFlatList();

            await Task.WhenAll(events, logMessages.Open());

            if (cancellation.IsCancellationRequested)
            {
                return;
            }

            if (templatesTracker != null)
            {
                (await events).ForEach(e => templatesTracker.RegisterUsage(e.TemplateId));
            }

            TimelinePostprocessorOutput.SerializePostprocessorOutput(
                await events,
                null,
                evtTrigger => TextLogEventTrigger.Make((CD.Message)evtTrigger),
                contentsEtagAttr
                ).SaveToFileOrToStdOut(outputFileName);
        }
        public static XDocument SerializePostprocessorOutput(
            List <Event> events,
            ILogPartToken rotatedLogPartToken,
            XAttribute contentsEtagAttr
            )
        {
            var serializer = new EventsSerializer((trigger, elt) => TextLogEventTrigger.FromUnknownTrigger(trigger).Save(elt));

            foreach (var e in events.OrderBy(e => ((ITriggerStreamPosition)e.Trigger).StreamPosition))
            {
                e.Visit(serializer);
            }
            var root = new XElement("root", serializer.Output);

            rotatedLogPartToken.SafeSerializeLogPartToken(root);
            if (contentsEtagAttr != null)
            {
                root.Add(contentsEtagAttr);
            }
            return(new XDocument(root));
        }
        async Task RunForChromeDriver(
            IEnumerableAsync <CD.Message[]> input,
            LogSourcePostprocessorInput postprocessorInput
            )
        {
            IPrefixMatcher matcher     = postprocessing.CreatePrefixMatcher();
            var            logMessages = input.MatchTextPrefixes(matcher).Multiplex();

            CD.ITimelineEvents networkEvents = new CD.TimelineEvents(matcher);
            var endOfTimelineEventSource     = postprocessing.Timeline.CreateEndOfTimelineEventSource <MessagePrefixesPair <CD.Message> > (m => m.Message);

            var extensionSources = pluginModel.ChromeDriverTimeLineEventSources.Select(src => src(
                                                                                           matcher, logMessages, postprocessorInput.TemplatesTracker)).ToArray();

            var networkEvts = networkEvents.GetEvents(logMessages);
            var eofEvts     = endOfTimelineEventSource.GetEvents(logMessages);

            matcher.Freeze();

            var events = extensionSources.Select(s => s.Events).ToList();

            events.Add(networkEvts);
            events.Add(eofEvts);

            var serialize = postprocessing.Timeline.SavePostprocessorOutput(
                EnumerableAsync.Merge(events.ToArray()),
                null,
                evtTrigger => TextLogEventTrigger.Make((CD.Message)evtTrigger),
                postprocessorInput
                );

            var tasks = new List <Task>();

            tasks.Add(serialize);
            tasks.AddRange(extensionSources.SelectMany(s => s.MultiplexingEnumerables.Select(e => e.Open())));
            tasks.Add(logMessages.Open());

            await Task.WhenAll(tasks);
        }
        async static Task RunForChromeDebug(
            IEnumerableAsync <CDL.Message[]> input,
            string outputFileName,
            CancellationToken cancellation,
            ICodepathTracker templatesTracker,
            XAttribute contentsEtagAttr
            )
        {
            var            multiplexedInput = input.Multiplex();
            IPrefixMatcher matcher          = new PrefixMatcher();
            // var logMessages = CDL.Helpers.MatchPrefixes(multiplexedInput, matcher);

            var events = RunForSymMessages(
                matcher,
                (new Sym.Reader()).FromChromeDebugLog(multiplexedInput)
                );

            matcher.Freeze();

            await Task.WhenAll(events, multiplexedInput.Open());

            if (cancellation.IsCancellationRequested)
            {
                return;
            }

            if (templatesTracker != null)
            {
                (await events).ForEach(e => templatesTracker.RegisterUsage(e.TemplateId));
            }

            TimelinePostprocessorOutput.SerializePostprocessorOutput(
                await events,
                null,
                evtTrigger => TextLogEventTrigger.Make((Sym.Message)evtTrigger),
                contentsEtagAttr
                ).SaveToFileOrToStdOut(outputFileName);
        }
Exemple #28
0
        bool IPresenter.TrySelectObject(ILogSource source, TextLogEventTrigger creationTrigger, Func <IVisualizerNode, int> disambiguationFunction)
        {
            EnsureTreeView();

            Func <IInspectedObject, bool> predecate = obj =>
            {
                return(obj.Owner.Outputs.Any(o => o.LogSource == source) &&
                       obj.StateChangeHistory.Any(change => change.Trigger.CompareTo(creationTrigger) == 0));
            };

            var candidates = EnumRoots().SelectMany(EnumTree).Where(predecate).ToList();

            if (candidates.Count > 0)
            {
                IInspectedObject obj;
                if (candidates.Count == 1 || disambiguationFunction == null)
                {
                    obj = candidates[0];
                }
                else
                {
                    obj = candidates
                          .Select(c => new { Obj = c, Rating = disambiguationFunction(VisualizerNode.FromObject(c)) })
                          .OrderByDescending(x => x.Rating)
                          .First().Obj;
                }
                var n = FindOrCreateNode(obj);
                if (n != null)
                {
                    view.SelectedNodes = new[] { n.Value };
                    view.ScrollSelectedNodesInView();
                    return(true);
                }
            }
            return(false);
        }
 async Task RunForWebRtcInternals(LogSourcePostprocessorInput input)
 {
     var            reader                 = (new WRD.Reader(postprocessing.TextLogParser, input.CancellationToken)).Read(input.LogFileName, input.ProgressHandler);
     IPrefixMatcher prefixMatcher          = postprocessing.CreatePrefixMatcher();
     var            matchedMessages        = WRD.Helpers.MatchPrefixes(reader, prefixMatcher).Multiplex();
     var            webRtcStateInspector   = new WRD.WebRtcStateInspector(prefixMatcher);
     var            nodeDetectionTokenTask = (new WRD.NodeDetectionTokenSource(webRtcStateInspector)).GetToken(matchedMessages);
     var            noMessagingEvents      = EnumerableAsync.Empty <M.Event[]>();
     var            serialize              = postprocessing.Correlation.CreatePostprocessorOutputBuilder()
                                             .SetSameNodeDetectionToken(nodeDetectionTokenTask)
                                             .SetTriggersConverter(evtTrigger => TextLogEventTrigger.Make((WRD.Message)evtTrigger))
                                             .Build(input);
     await Task.WhenAll(
         matchedMessages.Open(),
         serialize
         );
 }