Statistics.Gateway 1.0.57

dotnet add package Statistics.Gateway --version 1.0.57
                    
NuGet\Install-Package Statistics.Gateway -Version 1.0.57
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Statistics.Gateway" Version="1.0.57" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Statistics.Gateway" Version="1.0.57" />
                    
Directory.Packages.props
<PackageReference Include="Statistics.Gateway" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Statistics.Gateway --version 1.0.57
                    
#r "nuget: Statistics.Gateway, 1.0.57"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Statistics.Gateway@1.0.57
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Statistics.Gateway&version=1.0.57
                    
Install as a Cake Addin
#tool nuget:?package=Statistics.Gateway&version=1.0.57
                    
Install as a Cake Tool

Installation de Statistics.Gateway

Guide d'installation du middleware de monitoring Statistics dans un projet .NET 8.


1. Ajouter la reference NuGet

Ajouter la reference au projet Statistics.Gateway dans le .csproj du projet cible :

<ProjectReference Include="..\Statistics.Gateway\Statistics.Gateway.csproj" />

2. Configuration appsettings.json

La section StatisticsGatewayConfig est obligatoire. Elle contient la ConfigurationKey qui permet au middleware de recuperer sa configuration complete (seuils, quotas, sampling, verbes HTTP surveilles) depuis l'API Statistics au demarrage, puis de la recharger toutes les minutes.

{
  "StatisticsGatewayConfig": {
    "ConfigurationKey": "CPCD-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxx",
    "Url": "https://statistics.api.test.capcod.cloud",
    "ApiKey": "00000000-0000-0000-0000-000000000000",
    "Env": "Production"
  }
}
Propriete Type Defaut Description
ConfigurationKey string null Cle de configuration fournie par l'API Statistics. Identifie le projet et permet de recuperer les seuils, quotas et filtres au demarrage
Url string https://statistics.api.capcod.cloud URL de l'API Statistics
ApiKey string null Cle d'API pour l'authentification aupres de l'API Statistics
Env string Production Environnement (Production, Test, etc.)

Note : si ConfigurationKey est absente ou vide, le middleware demarre mais ne collecte rien (la configuration distante est necessaire pour activer l'interception).


3. Enregistrement des services (Program.cs)

using Statistics.Gateway;

// Enregistre tous les services de la gateway Statistics
builder.Services.AddStatisticsGateway(builder.Configuration);

Cet appel enregistre automatiquement :

Service Lifetime Role
LightStatisticsGatewayConfig Options Configuration de connexion a l'API Statistics
StatisticsSdkConfig Singleton URL et ApiKey pour le SDK
IApiEndpointRegistry Singleton Registre en memoire des endpoints obsoletes
IGatewayRuntimeConfig Singleton Configuration et quotas courants (rechargee toutes les minutes)
SlowQueryInterceptor Singleton Intercepteur EF Core pour les requetes SQL lentes
IApiEndpointSdk Scoped SDK : enregistrement des endpoints
IGatewayConfigurationSdk Scoped SDK : recuperation de la configuration distante
IApiEndpointCallSdk Scoped SDK : CRUD appels API
ApiEndpointScanner HostedService Scan au demarrage de tous les endpoints et detection des [Obsolete]
GatewayConfigurationLoader HostedService Charge la configuration complete depuis l'API Statistics (toutes les minutes)
Infinity Messaging V2 SQS pour l'envoi des messages

4. Brancher le middleware HTTP

var app = builder.Build();

// Active l'interception des requetes HTTP entrantes
app.UseStatisticsGateway();

Le middleware intercepte chaque requete HTTP pour :

  • Capturer les metadonnees (path, method, headers, payload POST)
  • Verifier si l'endpoint est marque [Obsolete]
  • Masquer automatiquement les donnees sensibles (password, token, apikey, authorization, etc.)
  • Mesurer la duree d'execution, le status code et la taille de la reponse
  • Appliquer les filtres (verbe HTTP, seuil de duree, seuil de taille, ratio de sampling)
  • Envoyer les traces via SQS (queue Statistics-calls) si les filtres sont passes

Filtrage des appels

Un appel est enregistre uniquement si toutes ces conditions sont remplies :

  1. Le quota HTTP n'est pas atteint
  2. Le verbe HTTP est surveille (configurable, tous par defaut)
  3. La duree depasse le seuil configure (HttpConfig.DurationThresholdMs)
  4. La taille de reponse depasse le seuil configure (HttpConfig.SizeThresholdBytes), si applicable
  5. Le sampling passe (ratio 0-100%, 100% = tout capturer)

5. Brancher l'intercepteur SlowQuery sur le DbContext

var cs = builder.Configuration.GetConnectionString("Main");
builder.Services.AddDbContext<MonDbContext>((sp, opt) =>
    opt.UseNpgsql(cs).UseStatisticsSlowQueryInterceptor(sp));

L'intercepteur capture les commandes SQL executees par EF Core :

  • Mesure la duree de chaque commande
  • Inline les parametres SQL dans la requete capturee
  • Filtre selon le seuil configure (SqlConfig.DurationThresholdMs, defaut 200ms)
  • Verifie le quota SQL et le ratio de sampling
  • Envoie dans la queue SQS Statistics-slow-queries
  • Capture un stack trace filtre (exclut les namespaces Microsoft/System/Npgsql/Infinity)

Note : si le projet configure deja le DbContext avec AddDbContext, il suffit d'ajouter .UseStatisticsSlowQueryInterceptor(sp) a la chaine existante. Penser a utiliser la surcharge (sp, opt) => pour avoir acces au IServiceProvider.


Exemple complet (Program.cs)

using Statistics.Gateway;

var builder = WebApplication.CreateBuilder(args);

// Services
builder.Services.AddControllers();
builder.Services.AddStatisticsGateway(builder.Configuration);

var cs = builder.Configuration.GetConnectionString("Main");
builder.Services.AddDbContext<MonDbContext>((sp, opt) =>
    opt.UseNpgsql(cs).UseStatisticsSlowQueryInterceptor(sp));

var app = builder.Build();

// Middleware
app.UseStatisticsGateway();
app.MapControllers();

app.Run();

Architecture : communication Gateway → API

La gateway ne communique jamais directement avec la base de donnees Statistics. Les traces transitent par des queues SQS, et la configuration est chargee via le SDK HTTP :

[Projet consommateur]                        [Statistics API]

GatewayConfigurationLoader (toutes les 1 min)
  → SDK HTTP GET /gatewayconfiguration  →     → GatewayConfiguration + Quota

ApiEndpointScanner (au demarrage)
  → SDK HTTP POST /apiendpoint/sync     →     → Upsert endpoints

ApiEndpointCallMiddleware
  → queue SQS "Statistics-calls"        →     ApiEndpointCallWorker
                                                → INSERT/UPDATE ApiEndpointCall

SlowQueryInterceptor
  → queue SQS "Statistics-slow-queries" →     SlowQueryWorker
                                                → INSERT SlowQuery + quota

Configuration distante

La ConfigurationKey permet de recuperer depuis l'API Statistics :

Parametre Source Description
HttpConfig.DurationThresholdMs GatewayConfiguration Seuil minimal de duree pour capturer un appel HTTP
HttpConfig.SizeThresholdBytes GatewayConfiguration Seuil minimal de taille de reponse
HttpConfig.Ratio GatewayConfiguration Pourcentage d'appels echantillonnes (0 = aucun, 100 = tous)
HttpConfig.VerbsConfig GatewayConfiguration Verbes HTTP surveilles (vide = tous)
SqlConfig.DurationThresholdMs GatewayConfiguration Seuil minimal de duree pour capturer une requete SQL
SqlConfig.Ratio GatewayConfiguration Pourcentage de requetes SQL echantillonnees
Quota HTTP CurrentQuota Nombre max d'appels HTTP enregistres par periode
Quota SQL CurrentQuota Nombre max de requetes SQL enregistrees par periode

Cette configuration est rechargee automatiquement toutes les minutes par le GatewayConfigurationLoader.


Donnees sensibles

Le middleware masque automatiquement les valeurs sensibles dans les payloads JSON et les headers HTTP. Les cles contenant les mots suivants sont remplacees par "***" :

password, passwd, pwd, token, secret, apikey, api_key, authorization, credential


Ce qui est collecte

Donnee Source Queue SQS Description
Appels HTTP Middleware Statistics-calls Path, method, headers (redactes), status, duree, taille reponse, payload POST (redacte), verbe HTTP, flag obsolete
Endpoints ApiEndpointScanner (SDK HTTP) Detection automatique des [Obsolete] au demarrage, synchronisation avec l'API
Requetes SQL lentes SlowQueryInterceptor Statistics-slow-queries Commande SQL avec parametres inlines, duree, companyId, applicationId, stack trace filtre
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.57 93 5/27/2026
1.0.56 96 5/27/2026
1.0.55 86 5/5/2026
1.0.54 82 5/5/2026
1.0.53 84 5/4/2026
1.0.52 96 4/23/2026
1.0.51 102 4/22/2026
1.0.50 92 4/22/2026
1.0.49 100 4/22/2026
1.0.48 102 4/17/2026
1.0.47 88 4/17/2026
1.0.46 92 4/17/2026
1.0.45 95 4/17/2026
1.0.44 101 4/11/2026
1.0.43 94 4/10/2026
1.0.42 99 4/8/2026
1.0.41 91 4/8/2026
1.0.40 99 4/8/2026
1.0.39 97 4/7/2026
1.0.38 98 4/7/2026
Loading failed