示例#1
0
 public Model(ITempFilesManager tempFiles,
              ILogPartTokenFactories logPartTokenFactories, ISameNodeDetectionTokenFactories nodeDetectionTokenFactories)
 {
     this.tempFiles                   = tempFiles;
     this.logPartTokenFactories       = logPartTokenFactories;
     this.nodeDetectionTokenFactories = nodeDetectionTokenFactories;
 }
示例#2
0
        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);
        }
示例#3
0
        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));
        }