Пример #1
0
        public static TResult Trace <TResult>(this IServiceTracer tracer, ISpanBuilder spanBuilder, Func <ISpan, TResult> operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            var span = tracer.Start(spanBuilder);

            var curr = tracer.Tracer.GetCurrentSpan();

            try
            {
                tracer.Tracer.SetCurrentSpan(span);

                if (operation == null)
                {
                    return(default(TResult));
                }

                return(operation(span));
            }
            catch (Exception exception)
            {
                span.Exception(exception);
                throw;
            }
            finally
            {
                span.Finish(DateTimeOffset.UtcNow);
                tracer.Tracer.SetCurrentSpan(curr);
            }
        }
Пример #2
0
 public TracingHandlerFactory(
     IServiceTracer tracer,
     IRequestScopedDataRepository repo)
 {
     _repo   = repo;
     _tracer = tracer;
 }
Пример #3
0
        public static async Task <TResult> TraceAsync <TResult>(this IServiceTracer tracer, ISpanBuilder spanBuilder, Func <ISpan, Task <TResult> > operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            var span = tracer.Start(spanBuilder);

            var curr = tracer.Tracer.GetCurrentSpan();

            try
            {
                tracer.Tracer.SetCurrentSpan(span);
                return(await operation?.Invoke(span));
            }
            catch (Exception exception)
            {
                span.Exception(exception);
                throw;
            }
            finally
            {
                span.Finish(DateTimeOffset.UtcNow);
                tracer.Tracer.SetCurrentSpan(curr);
            }
        }
Пример #4
0
 public virtual void RemoveTracer(IServiceTracer tracer)
 {
     if (tracer is ClientRuntimeServiceTracer)
     {
         ServiceClientTracing.RemoveTracingInterceptor((ClientRuntimeServiceTracer)tracer);
     }
 }
        public static TResult Trace <TResult>(this IServiceTracer tracer, ISpanBuilder spanBuilder, Func <ISpan, TResult> operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            using (var span = tracer.Start(spanBuilder))
            {
                try
                {
                    if (operation == null)
                    {
                        return(default(TResult));
                    }

                    return(operation(span));
                }
                catch (Exception exception)
                {
                    span.Exception(exception);
                    throw;
                }
            }
        }
Пример #6
0
 /// <summary>
 /// 使用Autofac的方式进行对象反射
 /// </summary>
 /// <param name="service"></param>
 /// <param name="services"></param>
 /// <param name="butterflySetup"></param>
 public static void AddAutofac(this RabbitMQConfig service, IServiceCollection services, Action <ButterflyOptions> butterflySetup = null)
 {
     if (butterflySetup != null)
     {
         try
         {
             services.AddButterfly(butterflySetup);
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
     }
     services.AddSingleton(options =>
     {
         ILifetimeScope lifetime = options.GetRequiredService <ILifetimeScope>();
         IRabbitMQBus bus        = options.GetRequiredService <IRabbitMQBus>();
         ILogger <AutofacMessageReceive> logger = options.GetService <ILogger <AutofacMessageReceive> >();
         IServiceTracer tracer = null;
         if (butterflySetup != null)
         {
             try
             {
                 tracer = options.GetRequiredService <IServiceTracer>();
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.Message);
             }
         }
         return(new AutofacMessageReceive(lifetime, bus, tracer, logger));
     });
 }
Пример #7
0
        public static void Trace(this IServiceTracer tracer, ISpanBuilder spanBuilder, Action <ISpan> operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            var span = tracer.Start(spanBuilder);

            var curr = tracer.Tracer.GetCurrentSpan();

            try
            {
                tracer.Tracer.SetCurrentSpan(span);
                operation?.Invoke(span);
            }
            catch (Exception exception)
            {
                span.Exception(exception);
                throw;
            }
            finally
            {
                span.Finish(DateTimeOffset.UtcNow);
                tracer.Tracer.SetCurrentSpan(curr);
            }
        }
Пример #8
0
 public OcelotDiagnosticListenerTests()
 {
     _factory = new Mock <IOcelotLoggerFactory>();
     _logger  = new Mock <IOcelotLogger>();
     _tracer  = new FakeServiceTracer();
     _factory.Setup(x => x.CreateLogger <OcelotDiagnosticListener>()).Returns(_logger.Object);
     _listener = new OcelotDiagnosticListener(_factory.Object, _tracer);
 }
Пример #9
0
 public static ButterflyModuleHandler Handle(IServiceTracer serviceTracer)
 {
     if (_butterflyHandler == null)
     {
         _butterflyHandler = new ButterflyModuleHandler(serviceTracer);
     }
     return(_butterflyHandler);
 }
Пример #10
0
        public LiveTestResponse MakeResponse(CommandExecutionResult commandResult, IServiceTracer tracer, IList<DynamicObjectTransform> transforms, Logger logger)
        {
            LiveTestResponse response = MakeBaseResponse();
            if (commandResult.HadErrors)
            {
                if (logger != null)
                {
                    logger.LogAsync("Command failed with errors.");
                    commandResult.LogErrors(logger);
                }

                response.Error = new LiveTestError();
                response.Error.Code = InvalidRequest;
                List<object> errors = new List<object>();
                foreach (object originalError in commandResult.Errors)
                {
                    errors.AddRange(TransformObject(originalError, transforms));
                }

                response.Error.Data = errors.Count == 0 ? null : errors.Count == 1 ? errors[0] : errors;
                if (this.HttpResponse)
                {
                    HttpResponseMessage responseMessage = tracer.HttpResponses.LastOrDefault();
                    if (responseMessage != null)
                    {
                        // Kill the Content property - doesn't work with Newtonsoft.Json serialization
                        HttpResponseMessage clonedMessage = new HttpResponseMessage(responseMessage.StatusCode);
                        foreach (var header in responseMessage.Headers)
                        {
                            clonedMessage.Headers.Add(header.Key, header.Value);
                        }

                        clonedMessage.ReasonPhrase = responseMessage.ReasonPhrase;
                        clonedMessage.RequestMessage = responseMessage.RequestMessage;
                        clonedMessage.Version = responseMessage.Version;
                        response.Error.HttpResponse = clonedMessage;
                    }
                }
            }
            else
            {
                if (logger != null)
                {
                    logger.LogAsync("Command executed successfully.");
                }

                List<object> results = new List<object>();
                foreach (object originalResult in commandResult.Results)
                {
                    results.AddRange(TransformObject(originalResult, transforms));
                }

                response.Result = GetLiveTestResult(results, tracer);
            }

            return response;
        }
Пример #11
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="lifetime"></param>
 /// <param name="service"></param>
 /// <param name="tracer"></param>
 /// <param name="logger"></param>
 public AutofacMessageReceive(ILifetimeScope lifetime, IRabbitMQBus service, IServiceTracer tracer, ILogger <AutofacMessageReceive> logger)
 {
     _lifetime = lifetime;
     _service  = service;
     _tracer   = tracer;
     _logger   = logger;
     _service.OnMessageReceived += RabbitMQ_OnMessageReceived;
     _service.OnPublish         += RabbitMQ_OnPublish;
 }
        public static Task <TResult> ChildTraceAsync <TResult>(this IServiceTracer tracer, string operationName, DateTimeOffset?startTimestamp, Func <ISpan, Task <TResult> > operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            return(TraceAsync(tracer, CreateChildSpanBuilder(tracer, operationName, startTimestamp), operation));
        }
        public static void ChildTrace(this IServiceTracer tracer, string operationName, DateTimeOffset?startTimestamp, Action <ISpan> operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            Trace(tracer, CreateChildSpanBuilder(tracer, operationName, startTimestamp), operation);
        }
Пример #14
0
 public OcelotHttpTracingHandler(
     IServiceTracer tracer,
     IRequestScopedDataRepository repo,
     HttpMessageHandler httpMessageHandler = null)
 {
     _repo        = repo;
     _tracer      = tracer ?? throw new ArgumentNullException(nameof(tracer));
     InnerHandler = httpMessageHandler ?? new HttpClientHandler();
 }
        private static ISpanBuilder CreateChildSpanBuilder(IServiceTracer tracer, string operationName, DateTimeOffset?startTimestamp = null)
        {
            var spanBuilder = new SpanBuilder(operationName, startTimestamp);
            var spanContext = tracer.Tracer.GetCurrentSpan()?.SpanContext;

            if (spanContext != null)
            {
                spanBuilder.AsChildOf(spanContext);
            }

            return(spanBuilder);
        }
Пример #16
0
 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceTracer tracer)
 {
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }
     app.RabbitMQEventBusAutoSubscribe();
     app.RabbitMQEventBusModule(moduleOptions =>
     {
         moduleOptions.AddButterfly(tracer);
     });
     //Task.Factory.StartNew(async () =>
     //{
     //    //为了验证先启动生产者发送消息,后启动消费者消费的情况
     //    await Task.Delay(20000);
     //    app.UseRabbitMQBus(true);
     //});
     app.UseMvc();
 }
        public static void Trace(this IServiceTracer tracer, ISpanBuilder spanBuilder, Action <ISpan> operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            using (var span = tracer.Start(spanBuilder))
            {
                try
                {
                    operation?.Invoke(span);
                }
                catch (Exception exception)
                {
                    span.Exception(exception);
                    throw;
                }
            }
        }
        public static async Task TraceAsync(this IServiceTracer tracer, ISpanBuilder spanBuilder, Func <ISpan, Task> operation)
        {
            if (tracer == null)
            {
                throw new ArgumentNullException(nameof(tracer));
            }

            using (var span = tracer.Start(spanBuilder))
            {
                try
                {
                    await operation?.Invoke(span);
                }
                catch (Exception exception)
                {
                    span.Exception(exception);
                    throw;
                }
            }
        }
Пример #19
0
        private TracerManager(ButterflyOptions options, ILoggerFactory loggerFactory)
        {
            var senderProvider = new DefaultSenderProvider(options);

            var callback   = new SpanDispatchCallback(senderProvider, loggerFactory);
            var dispatcher = new ButterflyDispatcher(new IDispatchCallback[] { callback }, loggerFactory, 0, 0, 0);

            var spanRecorder = new AsyncSpanRecorder(dispatcher);
            var tracer       = new Tracer(spanRecorder);

#if NETSTANDARD1_6
            var environmentName = ((dynamic)Assembly.GetEntryAssembly().GetCustomAttribute <DebuggableAttribute>()).IsJITTrackingEnabled is bool debugMode ? debugMode ? "Development" : "Production" : "Unknown";
#else
            var environmentName = Assembly.GetEntryAssembly().GetCustomAttribute <DebuggableAttribute>().IsJITTrackingEnabled ? "Development" : "Production";
#endif
            var service  = options.Service ?? Assembly.GetEntryAssembly().GetName().Name;
            var host     = Dns.GetHostName();
            var identity = string.IsNullOrEmpty(options.ServiceIdentity) ? $"{service}@{host}" : options.ServiceIdentity;

            ServiceTracer = new ServiceTracer(tracer, service, environmentName, identity, host);
        }
 public WebApiTraceFilterAttribute(IServiceTracer tracer, IJsonHelper jsonHelper)
 {
     this._tracer    = tracer;
     this.jsonHelper = jsonHelper;
 }
Пример #21
0
 public WebApiTracingFilterAttribute(IJsonHelper jsonHelper, IServiceTracer tracer, IOptions <TracingOptions> options)
 {
     _jsonHelper = jsonHelper;
     _tracer     = tracer;
     _options    = options.Value;
 }
Пример #22
0
 public IEnumerable <string> Get([FromServices] IServiceTracer tracer)
 {
     return(new[] { "value1", "value2" });
 }
Пример #23
0
 public HttpHandlerOptionsCreator(IServiceTracer tracer)
 {
     _tracer = tracer;
 }
Пример #24
0
 private ButterflyModuleHandler(IServiceTracer serviceTracer)
 {
     _serviceTracer = serviceTracer;
 }
 public static RabbitMQEventBusModuleOption AddButterfly(this RabbitMQEventBusModuleOption build, IServiceTracer tracer)
 {
     build.AddModule(ButterflyModuleHandler.Handle(tracer));
     return(build);
 }
Пример #26
0
 public RequestTracer(IServiceTracer tracer, IOptions <TraceOptions> options)
 {
     _tracer  = tracer;
     _options = options.Value;
 }
Пример #27
0
 public HttpTracingHandler(IServiceTracer tracer, HttpMessageHandler httpMessageHandler = null)
 {
     _tracer      = tracer ?? throw new ArgumentNullException(nameof(tracer));
     InnerHandler = httpMessageHandler ?? new HttpClientHandler();
 }
Пример #28
0
 public async Task <string> Get([FromServices] HttpClient httpClient, [FromServices] IServiceTracer tracer)
 {
     return(await httpClient.GetStringAsync("http://localhost:5002/api/values"));
 }
Пример #29
0
 public HttpClientDiagnosticListener(IServiceTracer tracer, IOptions <TracingOptions> options)
 {
     _tracer  = tracer;
     _options = options.Value;
 }
Пример #30
0
 public HttpHandlerOptionsCreatorTests()
 {
     _serviceTracer             = new FakeServiceTracer();
     _httpHandlerOptionsCreator = new HttpHandlerOptionsCreator(_serviceTracer);
 }