feat(rate-limiting): Implement core rate limiting functionality with configuration, decision-making, metrics, middleware, and service registration
- Add RateLimitConfig for configuration management with YAML binding support. - Introduce RateLimitDecision to encapsulate the result of rate limit checks. - Implement RateLimitMetrics for OpenTelemetry metrics tracking. - Create RateLimitMiddleware for enforcing rate limits on incoming requests. - Develop RateLimitService to orchestrate instance and environment rate limit checks. - Add RateLimitServiceCollectionExtensions for dependency injection registration.
This commit is contained in:
@@ -62,11 +62,11 @@ This guide captures the canonical signals emitted by Concelier and Excititor onc
|
||||
### 1.3 · Regression & DI hygiene
|
||||
|
||||
1. **Keep storage/integration tests green when telemetry touches persistence.**
|
||||
- `./tools/mongodb/local-mongo.sh start` downloads MongoDB 6.0.16 (if needed), launches `rs0`, and prints `export EXCITITOR_TEST_MONGO_URI=mongodb://.../excititor-tests`. Copy that export into your shell.
|
||||
- `./tools/mongodb/local-mongo.sh restart` is a shortcut for “stop if running, then start” using the same dataset—use it after tweaking config or when tests need a bounce without wiping fixtures.
|
||||
- `./tools/mongodb/local-mongo.sh clean` stops the instance (if running) and deletes the managed data/log directories so storage tests begin from a pristine catalog.
|
||||
- Run `dotnet test src/Excititor/__Tests/StellaOps.Excititor.Storage.Mongo.Tests/StellaOps.Excititor.Storage.Mongo.Tests.csproj -nologo -v minimal` (add `--filter` if you only touched specific suites). These tests exercise the same write paths that feed the dashboards, so regressions show up immediately.
|
||||
- `./tools/mongodb/local-mongo.sh stop` when finished so CI/dev hosts stay clean; `status|logs|shell` are available for troubleshooting.
|
||||
- `./tools/postgres/local-postgres.sh start` downloads PostgreSQL 16.x (if needed), launches the instance, and prints `export EXCITITOR_TEST_POSTGRES_URI=postgresql://.../excititor-tests`. Copy that export into your shell.
|
||||
- `./tools/postgres/local-postgres.sh restart` is a shortcut for "stop if running, then start" using the same dataset—use it after tweaking config or when tests need a bounce without wiping fixtures.
|
||||
- `./tools/postgres/local-postgres.sh clean` stops the instance (if running) and deletes the managed data/log directories so storage tests begin from a pristine catalog.
|
||||
- Run `dotnet test src/Excititor/__Tests/StellaOps.Excititor.Storage.Postgres.Tests/StellaOps.Excititor.Storage.Postgres.Tests.csproj -nologo -v minimal` (add `--filter` if you only touched specific suites). These tests exercise the same write paths that feed the dashboards, so regressions show up immediately.
|
||||
- `./tools/postgres/local-postgres.sh stop` when finished so CI/dev hosts stay clean; `status|logs|shell` are available for troubleshooting.
|
||||
2. **Declare optional Minimal API dependencies with `[FromServices] ... = null`.** RequestDelegateFactory treats `[FromServices] IVexSigner? signer = null` (or similar) as optional, so host startup succeeds even when tests have not registered that service. This pattern keeps observability endpoints cancellable while avoiding brittle test overrides.
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ This guide captures the canonical signals emitted by Concelier and Excititor onc
|
||||
|
||||
- Point the OTLP endpoint at the shared collector profile from §1 so Excititor metrics land in the `ingestion_*` dashboards next to Concelier. Resource attributes drive Grafana filtering (e.g., `env`, `service.group`).
|
||||
- For offline/air-gap bundles set `Enabled=false` and collect the file exporter artifacts from the Offline Kit; import them into Grafana after transfer to keep time-to-truth dashboards consistent.
|
||||
- Local development templates: run `tools/mongodb/local-mongo.sh start` to spin up a single-node replica set plus the matching `mongosh` client. The script prints the `export EXCITITOR_TEST_MONGO_URI=...` command that integration tests (e.g., `StellaOps.Excititor.Storage.Mongo.Tests`) will honor. Use `restart` for a quick bounce, `clean` to wipe data between suites, and `stop` when finished.
|
||||
- Local development templates: run `tools/postgres/local-postgres.sh start` to spin up a PostgreSQL instance plus the matching `psql` client. The script prints the `export EXCITITOR_TEST_POSTGRES_URI=...` command that integration tests (e.g., `StellaOps.Excititor.Storage.Postgres.Tests`) will honor. Use `restart` for a quick bounce, `clean` to wipe data between suites, and `stop` when finished.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user