// 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
            });
        }
コード例 #4
0
 /// <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);
        }