UpdaterAgent is packaged as a containerised .NET 8 application alongside a PostgreSQL 16.4 database. The same Docker Compose file drives all environments; runtime behaviour is controlled byDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ShohjahonSohibov/repo-for-agent/llms.txt
Use this file to discover all available pages before exploring further.
ASPNETCORE_ENVIRONMENT and the corresponding appsettings file. This page covers everything needed to build, run, and observe a deployed instance.
Docker Compose services
Thedocker-compose.yml at the repository root defines two services that share a private db-network.
All sensitive values (
DB_PASSWORD, TELEGRAM_TOKEN, OTLP headers, Loki credentials) are read from environment variables at runtime. Never hard-code secrets in docker-compose.yml or commit them to the repository.Environment configurations
The API reads its configuration fromappsettings.json combined with the environment-specific override file. Set ASPNETCORE_ENVIRONMENT to control which file is loaded.
| Environment | appsettings file | Purpose |
|---|---|---|
| Development | appsettings.Development.json | Local development |
| Staging | appsettings.Staging.json | Pre-production testing |
| Sandbox | appsettings.Sandbox.json | Integration testing |
| Production | appsettings.Production.json | Live environment |
Deployment steps
Apply database migrations
Run EF Core migrations against the target database before starting the application. This creates or updates the schema to match the current codebase.
Start the services
Launch both the API and the database with Docker Compose.To run the API locally without Docker:
Useful URLs
| Resource | URL |
|---|---|
| Swagger UI | https://localhost:5001/swagger |
| Hangfire dashboard | https://localhost:5001/hangfire |
| Health check | http://localhost:5000/health |
| API base | https://localhost:5001/api/v1 |
Observability stack
UpdaterAgent ships with a full observability stack configured at startup.Serilog — structured logging
Serilog — structured logging
All log output is structured JSON via Serilog. Multiple sinks are configured per environment, including console, file, and Grafana Loki. Log level and sink destinations are controlled by
appsettings.{Environment}.json.Grafana Loki — log aggregation
Grafana Loki — log aggregation
Logs are shipped to a Grafana Loki instance using the
LOKI_URL, LOKI_USERNAME, and LOKI_PASSWORD environment variables. Loki labels are set per service and environment for efficient querying in Grafana dashboards.Telegram — critical error notifications
Telegram — critical error notifications
The application uses
TELEGRAM_TOKEN and TELEGRAM_GROUP_ID to send critical error alerts directly to a configured Telegram group. Background job failures and unhandled exceptions at or above the Error level trigger a notification.OpenTelemetry — distributed tracing
OpenTelemetry — distributed tracing
Traces are exported via the OTLP exporter. Configure the endpoint and authentication using the environment variables below.