mirror of https://github.com/Squidex/squidex.git
3 changed files with 88 additions and 1 deletions
@ -0,0 +1,82 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System; |
||||
|
using Datadog.Trace; |
||||
|
using Datadog.Trace.Configuration; |
||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Squidex.Infrastructure.Log; |
||||
|
using Squidex.Infrastructure.Plugins; |
||||
|
|
||||
|
namespace Squidex.Extensions.APM.Datadoq |
||||
|
{ |
||||
|
public sealed class DatadogPlugin : IPlugin, IStartupFilter |
||||
|
{ |
||||
|
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next) |
||||
|
{ |
||||
|
return builder => |
||||
|
{ |
||||
|
builder.Use(async (context, next) => |
||||
|
{ |
||||
|
using (var scope = Tracer.Instance.StartActive(context.Request.Path)) |
||||
|
{ |
||||
|
try |
||||
|
{ |
||||
|
scope.Span.SetTag("http.method", context.Request.Method); |
||||
|
|
||||
|
await next(); |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
scope.Span.SetException(ex); |
||||
|
throw; |
||||
|
} |
||||
|
finally |
||||
|
{ |
||||
|
scope.Span.SetTag("http.status_code", context.Response.StatusCode.ToString()); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
next(builder); |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
public void ConfigureServices(IServiceCollection services, IConfiguration config) |
||||
|
{ |
||||
|
var isEnabled = config.GetValue<bool>("logging:datadog"); |
||||
|
|
||||
|
if (isEnabled) |
||||
|
{ |
||||
|
services.AddSingleton<IStartupFilter>(this); |
||||
|
|
||||
|
SetupTracer(); |
||||
|
SetupProfiler(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private static void SetupProfiler() |
||||
|
{ |
||||
|
Profiler.SpanStarted += (session) => |
||||
|
{ |
||||
|
session.Listen(Tracer.Instance.StartActive(session.Key)); |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
private static void SetupTracer() |
||||
|
{ |
||||
|
var settings = TracerSettings.FromDefaultSources(); |
||||
|
|
||||
|
settings.ServiceName = "squidex"; |
||||
|
|
||||
|
Tracer.Instance = new Tracer(settings); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue