// Input trace listener private TraceSource Trace( RequestHandler handler, HttpEventCollectorEventInfo.Metadata metadata = null, int batchInterval = 0, int batchSizeBytes = 0, int batchSizeCount = 0, HttpEventCollectorSender.SendMode sendMode = HttpEventCollectorSender.SendMode.Parallel, HttpEventCollectorSender.HttpEventCollectorMiddleware middleware = null) { var trace = new TraceSource("HttpEventCollectorLogger"); trace.Switch.Level = SourceLevels.All; trace.Listeners.Add( new HttpEventCollectorTraceListener( uri: uri, token: token, metadata: metadata, sendMode: sendMode, batchInterval: batchInterval, batchSizeBytes: batchSizeBytes, batchSizeCount: batchSizeCount, middleware: MiddlewareInterceptor(handler, middleware)) ); return(trace); }
// we inject this method into HTTP event collector middleware chain to mimic a Splunk // server private HttpEventCollectorSender.HttpEventCollectorMiddleware MiddlewareInterceptor( RequestHandler handler, HttpEventCollectorSender.HttpEventCollectorMiddleware middleware) { HttpEventCollectorSender.HttpEventCollectorMiddleware interceptor = (string token, List <HttpEventCollectorEventInfo> events, HttpEventCollectorSender.HttpEventCollectorHandler next) => { Response response = handler(token, events); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); httpResponseMessage.StatusCode = response.Code; byte[] buf = Encoding.UTF8.GetBytes(response.Context); httpResponseMessage.Content = new StringContent(response.Context); var task = new Task <HttpResponseMessage>(() => { return(httpResponseMessage); }); task.RunSynchronously(); return(task); }; if (middleware != null) { // chain middleware to interceptor var temp = interceptor; interceptor = (token, events, next) => { return(middleware(token, events, (t, e) => { return temp(t, e, next); })); }; } return(interceptor); }
private SinkTrace TraceSource( RequestHandler handler, HttpEventCollectorEventInfo.Metadata metadata = null, HttpEventCollectorSender.SendMode sendMode = HttpEventCollectorSender.SendMode.Parallel, int batchInterval = 0, int batchSizeBytes = 0, int batchSizeCount = 0, HttpEventCollectorSender.HttpEventCollectorMiddleware middleware = null) { var listener = new ObservableEventListener(); var sink = new HttpEventCollectorSink( uri: uri, token: token, formatter: new TestEventFormatter(), metadata: metadata, sendMode: sendMode, batchInterval: batchInterval, batchSizeBytes: batchSizeBytes, batchSizeCount: batchSizeCount, middleware: MiddlewareInterceptor(handler, middleware)); listener.Subscribe(sink); var eventSource = TestEventSource.GetInstance(); listener.EnableEvents(eventSource, EventLevel.LogAlways, Keywords.All); return(new SinkTrace() { Source = eventSource, Sink = sink, Listener = listener }); }
/// <summary> /// HttpEventCollectorEventSink c-or with middleware parameter. /// </summary> /// <param name="uri">Splunk server uri, for example https://localhost:8088.</param> /// <param name="token">HTTP event collector authorization token.</param> /// <param name="formatter">Event formatter converting EventEntry instance into a string.</param> /// <param name="metadata">Logger metadata.</param> /// <param name="sendMode">Send mode of the events.</param> /// <param name="batchInterval">Batch interval in milliseconds.</param> /// <param name="batchSizeBytes">Batch max size.</param> /// <param name="batchSizeCount">MNax number of individual events in batch.</param> /// <param name="middleware"> /// HTTP client middleware. This allows to plug an HttpClient handler that /// intercepts logging HTTP traffic. /// </param> public HttpEventCollectorSink( Uri uri, string token, IEventTextFormatter formatter, HttpEventCollectorEventInfo.Metadata metadata = null, HttpEventCollectorSender.SendMode sendMode = HttpEventCollectorSender.SendMode.Sequential, int batchInterval = HttpEventCollectorSender.DefaultBatchInterval, int batchSizeBytes = HttpEventCollectorSender.DefaultBatchSize, int batchSizeCount = HttpEventCollectorSender.DefaultBatchCount, HttpEventCollectorSender.HttpEventCollectorMiddleware middleware = null) { this.formatter = formatter; sender = new HttpEventCollectorSender( uri, token, metadata, sendMode, batchInterval, batchSizeBytes, batchSizeCount, middleware); }
private TraceSource TraceCustomFormatter( RequestHandler handler, HttpEventCollectorSender.HttpEventCollectorFormatter formatter, HttpEventCollectorSender.HttpEventCollectorMiddleware middleware) { var trace = new TraceSource("HttpEventCollectorLogger"); trace.Switch.Level = SourceLevels.All; trace.Listeners.Add( new HttpEventCollectorTraceListener( uri: uri, token: token, middleware: middleware, formatter: formatter, sendMode: HttpEventCollectorSender.SendMode.Parallel) ); return(trace); }