示例#1
0
        protected override void OnProcessorError(EventPattern <PipelineProcessorExceptionEventArgs> args)
        {
            PipelineTrace          pipelineTrace  = _traceStack.Peek();
            Stack <ProcessorTrace> processorStack = pipelineTrace.ProcessorStack;
            ProcessorTrace         processorTrace = processorStack.Pop();

            pipelineTrace.Traces.Add(processorTrace);
        }
示例#2
0
        private void ReverseTraces(PipelineTrace trace)
        {
            foreach (PipelineTrace pipelineTrace in trace.ChildTraces)
            {
                ReverseTraces(pipelineTrace);
            }

            trace.ChildTraces.Reverse();
            trace.Traces.Reverse();
        }
示例#3
0
        protected override void OnComplete(EventPattern <PipelineEventArgs> args)
        {
            try
            {
                switch (args.EventArgs.PipelineContext)
                {
                case MappingContext mappingContext:
                    PipelineTrace pipelineTrace = _traceStack.Peek();
                    if (pipelineTrace != null)
                    {
                        pipelineTrace.PipelineContext = new
                        {
                            mappingContext.Input,
                            mappingContext.Output,
                            Schema = new
                            {
                                mappingContext.Schema?.ModelType,
                                Properties = mappingContext.Schema?.Schemas?
                                             .OfType <PropertyPipelineSchema>()
                                             .Select(property => new
                                {
                                    Processors = property?.Processors?.Select(processor => new
                                    {
                                        processor.Type,
                                        processor.Options
                                    }),
                                    property?.PropertyInfo?.Name,
                                    property?.PropertyInfo?.PropertyType
                                })
                            }
                        };
                    }

                    break;
                }
            }
            catch (Exception)
            {
                // Best effort
            }

            _traceStack.Pop();

            if (!_traceStack.Any())
            {
                ReverseTraces(_root);
            }
        }
示例#4
0
        protected override void OnRun(EventPattern <PipelineEventArgs> args)
        {
            var pipelineTrace = new PipelineTrace
            {
                Timestamp = args.EventArgs.Timestamp
            };

            if (_traceStack.Any())
            {
                var currentTrace = _traceStack.Peek();
                currentTrace.ChildTraces.Add(pipelineTrace);
            }
            else
            {
                _root = pipelineTrace;
            }

            _traceStack.Push(pipelineTrace);
        }
示例#5
0
        protected override void OnProcessorComplete(EventPattern <PipelineProcessorEventArgs> args)
        {
            PipelineTrace          pipelineTrace  = _traceStack.Peek();
            Stack <ProcessorTrace> processorStack = pipelineTrace.ProcessorStack;
            ProcessorTrace         processorTrace = processorStack.Pop();

            switch (args.EventArgs.PipelineContext)
            {
            case PropertyContext processorContext:
                processorTrace.Faulted     = processorContext.Faulted;
                processorTrace.PostContext = JsonConvert.SerializeObject(processorContext.Context,
                                                                         Formatting.None,
                                                                         new JsonSerializerSettings {
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                });
                break;
            }

            pipelineTrace.Traces.Add(processorTrace);
        }