public Model(ITempFilesManager tempFiles, ILogPartTokenFactories logPartTokenFactories, ISameNodeDetectionTokenFactories nodeDetectionTokenFactories) { this.tempFiles = tempFiles; this.logPartTokenFactories = logPartTokenFactories; this.nodeDetectionTokenFactories = nodeDetectionTokenFactories; }
public static async Task SerializePostprocessorOutput( Task <ILogPartToken> logPartToken, ILogPartTokenFactories logPartTokenFactories, IEnumerableAsync <M.Event[]> events, Task <ISameNodeDetectionToken> sameNodeDetectionTokenTask, ISameNodeDetectionTokenFactories nodeDetectionTokenFactories, Func <object, TextLogEventTrigger> triggersConverter, string contentsEtagAttr, Func <Task <Stream> > openOutputStream, ITempFilesManager tempFiles, CancellationToken cancellation ) { events = events ?? new List <M.Event[]>().ToAsync(); logPartToken = logPartToken ?? Task.FromResult <ILogPartToken>(null); sameNodeDetectionTokenTask = sameNodeDetectionTokenTask ?? Task.FromResult <ISameNodeDetectionToken>(null); var eventsTmpFile = tempFiles.GenerateNewName(); Func <Task <Stream> > openTempFile(string fileName) => () => Task.FromResult <Stream>(new FileStream(fileName, FileMode.OpenOrCreate)); var serializeMessagingEvents = events.SerializePostprocessorOutput <M.Event, M.EventsSerializer, M.IEventsVisitor>( triggerSerializer => new M.EventsSerializer(triggerSerializer), null, logPartTokenFactories, triggersConverter, null, messagingEventsElementName, openTempFile(eventsTmpFile), tempFiles, cancellation ); await Task.WhenAll(serializeMessagingEvents, logPartToken, sameNodeDetectionTokenTask); using (var outputWriter = XmlWriter.Create(await openOutputStream(), new XmlWriterSettings() { Indent = true, Async = true, CloseOutput = true })) using (var messagingEventsReader = XmlReader.Create(eventsTmpFile)) { outputWriter.WriteStartElement("root"); new PostprocessorOutputETag(contentsEtagAttr).Write(outputWriter); logPartTokenFactories.SafeWriteTo(await logPartToken, outputWriter); nodeDetectionTokenFactories.SafeWriteTo(await sameNodeDetectionTokenTask, outputWriter); messagingEventsReader.ReadToFollowing(messagingEventsElementName); await outputWriter.WriteNodeAsync(messagingEventsReader, false); outputWriter.WriteEndElement(); // root } File.Delete(eventsTmpFile); }
public PostprocessorOutput( LogSourcePostprocessorDeserializationParams p, ILogPartTokenFactories rotatedLogPartFactories, ISameNodeDetectionTokenFactories nodeDetectionTokenFactories) { this.logSource = p.LogSource; var reader = p.Reader; events = new List <M.Event>(); rotatedLogPartToken = new NullLogPartToken(); sameNodeDetectionToken = new NullSameNodeDetectionToken(); if (!reader.ReadToFollowing("root")) { throw new FormatException(); } etag.Read(reader); foreach (var elt in p.Reader.ReadChildrenElements()) { if (rotatedLogPartFactories.TryReadLogPartToken(elt, out var tmp)) { this.rotatedLogPartToken = tmp; } else if (nodeDetectionTokenFactories.TryReadLogPartToken(elt, out var tmp2)) { sameNodeDetectionToken = tmp2; } else if (elt.Name == messagingEventsElementName) { var eventsDeserializer = new M.EventsDeserializer(TextLogEventTrigger.DeserializerFunction); foreach (var me in elt.Elements()) { if (eventsDeserializer.TryDeserialize(me, out var evt)) { events.Add(evt); } } } p.Cancellation.ThrowIfCancellationRequested(); } }
public void BeforeEach() { logSources = Substitute.For <ILogSourcesManager>(); telemetry = Substitute.For <Telemetry.ITelemetryCollector>(); mockedSyncContext = new ManualSynchronizationContext(); heartbeat = Substitute.For <IHeartBeatTimer>(); progressAggregator = Substitute.For <Progress.IProgressAggregator>(); settingsAccessor = Substitute.For <Settings.IGlobalSettingsAccessor>(); logSource1 = Substitute.For <ILogSource>(); logProviderFac1 = Substitute.For <ILogProviderFactory>(); logSource1.Provider.Factory.Returns(logProviderFac1); logSource1.Provider.ConnectionParams.Returns(new ConnectionParams($"{ConnectionParamsKeys.PathConnectionParam}=/log.txt")); logSource1.Provider.Stats.Returns(new LogProviderStats() { ContentsEtag = null }); logSourcePP1 = Substitute.For <ILogSourcePostprocessor>(); logSourcePP1.Kind.Returns(PostprocessorKind.SequenceDiagram); pp1outputXmlSection = Substitute.For <Persistence.ISaxXMLStorageSection>(); logSource1.LogSourceSpecificStorageEntry.OpenSaxXMLSection("postproc-sequencediagram.xml", Persistence.StorageSectionOpenFlag.ReadOnly).Returns(pp1outputXmlSection); pp1outputXmlSection.Reader.Returns(Substitute.For <XmlReader>()); pp1PostprocessorOutput = Substitute.For <IPostprocessorOutputETag>(); outputDataDeserializer = Substitute.For <IOutputDataDeserializer>(); outputDataDeserializer.Deserialize(PostprocessorKind.SequenceDiagram, Arg.Any <LogSourcePostprocessorDeserializationParams>()).Returns(pp1PostprocessorOutput); pp1RunSummary = Substitute.For <IPostprocessorRunSummary>(); logSourcePP1.Run(null).ReturnsForAnyArgs(Task.FromResult(pp1RunSummary)); pp1RunSummary.GetLogSpecificSummary(null).ReturnsForAnyArgs((IPostprocessorRunSummary)null); logPartTokenFactories = Substitute.For <ILogPartTokenFactories>(); sameNodeDetectionTokenFactories = Substitute.For <ISameNodeDetectionTokenFactories>(); changeNotification = Substitute.For <IChangeNotification>(); fileSystem = Substitute.For <IFileSystem>(); manager = new LogJoint.Postprocessing.PostprocessorsManager( logSources, telemetry, mockedSyncContext, mockedSyncContext, heartbeat, progressAggregator, settingsAccessor, outputDataDeserializer, new TraceSourceFactory(), logPartTokenFactories, sameNodeDetectionTokenFactories, changeNotification, fileSystem); manager.Register(new LogSourceMetadata(logProviderFac1, logSourcePP1)); }