Browse Source

Datadog integration.

pull/474/head
Sebastian 6 years ago
parent
commit
c08d359a25
  1. 82
      backend/extensions/Squidex.Extensions/APM/Datadog/DatadogPlugin.cs
  2. 1
      backend/extensions/Squidex.Extensions/Squidex.Extensions.csproj
  3. 6
      backend/src/Squidex/appsettings.json

82
backend/extensions/Squidex.Extensions/APM/Datadog/DatadogPlugin.cs

@ -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);
}
}
}

1
backend/extensions/Squidex.Extensions/Squidex.Extensions.csproj

@ -11,6 +11,7 @@
<PackageReference Include="Algolia.Search" Version="5.3.1" /> <PackageReference Include="Algolia.Search" Version="5.3.1" />
<PackageReference Include="Confluent.Kafka" Version="1.2.1" /> <PackageReference Include="Confluent.Kafka" Version="1.2.1" />
<PackageReference Include="CoreTweet" Version="1.0.0.483" /> <PackageReference Include="CoreTweet" Version="1.0.0.483" />
<PackageReference Include="Datadog.Trace" Version="1.11.0" />
<PackageReference Include="Elasticsearch.Net" Version="6.8.1" /> <PackageReference Include="Elasticsearch.Net" Version="6.8.1" />
<PackageReference Include="Microsoft.Extensions.Http" Version="3.1.0" /> <PackageReference Include="Microsoft.Extensions.Http" Version="3.1.0" />
<PackageReference Include="Microsoft.OData.Core" Version="7.6.2" /> <PackageReference Include="Microsoft.OData.Core" Version="7.6.2" />

6
backend/src/Squidex/appsettings.json

@ -255,7 +255,11 @@
/* /*
* The number of days request log items will be stored. * The number of days request log items will be stored.
*/ */
"storeRetentationInDays": 90 "storeRetentationInDays": 90,
/*
* True, to enable datadog integration.
*/
"datadog": false
}, },
"assetStore": { "assetStore": {

Loading…
Cancel
Save