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