Statistics.Gateway
1.0.57
dotnet add package Statistics.Gateway --version 1.0.57
NuGet\Install-Package Statistics.Gateway -Version 1.0.57
<PackageReference Include="Statistics.Gateway" Version="1.0.57" />
<PackageVersion Include="Statistics.Gateway" Version="1.0.57" />
<PackageReference Include="Statistics.Gateway" />
paket add Statistics.Gateway --version 1.0.57
#r "nuget: Statistics.Gateway, 1.0.57"
#:package Statistics.Gateway@1.0.57
#addin nuget:?package=Statistics.Gateway&version=1.0.57
#tool nuget:?package=Statistics.Gateway&version=1.0.57
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
ConfigurationKeyest 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 :
- Le quota HTTP n'est pas atteint
- Le verbe HTTP est surveille (configurable, tous par defaut)
- La duree depasse le seuil configure (
HttpConfig.DurationThresholdMs) - La taille de reponse depasse le seuil configure (
HttpConfig.SizeThresholdBytes), si applicable - 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 auIServiceProvider.
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 | Versions 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. |
-
net8.0
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 8.0.20)
- Microsoft.EntityFrameworkCore.Relational (>= 8.0.15)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Newtonsoft.Json (>= 13.0.3)
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 |