protected override void OnProcessorError(EventPattern <PipelineProcessorExceptionEventArgs> args) { PipelineTrace pipelineTrace = _traceStack.Peek(); Stack <ProcessorTrace> processorStack = pipelineTrace.ProcessorStack; ProcessorTrace processorTrace = processorStack.Pop(); pipelineTrace.Traces.Add(processorTrace); }
private void ReverseTraces(PipelineTrace trace) { foreach (PipelineTrace pipelineTrace in trace.ChildTraces) { ReverseTraces(pipelineTrace); } trace.ChildTraces.Reverse(); trace.Traces.Reverse(); }
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); } }
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); }
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); }