mando-bess
Main REST API service crate for the Mando workspace. Provides HTTP endpoints, flow execution, scheduling, and the application entry point for the Alpiq BESS platform.
Structure
mando-bess/src/
├── lib.rs # App setup, router, middleware (25.2K)
├── main.rs # Entry point, telemetry, logging
├── scheduler.rs # Cron-based job scheduling
├── api_docs.rs # OpenAPI documentation
├── flow/ # Workflow engines (9 subdirs)
│ ├── trading/
│ ├── manual_schedule/
│ ├── auction/
│ ├── intraday/
│ ├── idc_trading/
│ ├── data_update/
│ └── afrr/
├── route/ # HTTP handlers (7 submodules)
│ ├── audit_logs
│ ├── flow_executions
│ ├── query_data
│ ├── save_data
│ ├── settings
│ ├── flow
│ └── versions
├── database/ # Migrations, schema
└── model/ # BESS-specific domain models
AppServices
Central service container holding all flow implementations:
pub struct AppServices<M, A, S> {
mando: M, // MandoService impl
flow_env_config: Arc<FlowEnvConfig>,
flow_trading: FlowTradingServiceV1,
flow_manual_schedule_v1: ...,
flow_manual_schedule_v2: ...,
flow_auction_v3: ...,
// ... more flow versions
}HTTP Routes
| Path | Purpose |
|---|---|
/audit_logs | Audit trail access |
/flow_executions | List/query flow executions |
/flow_executions/{asset_id} | Asset-specific executions |
/query_data | Data retrieval |
/save_data | Data writing |
/settings | Configuration CRUD |
/flow/{id} | Flow management |
/versions | Component version info |
Flow Implementations
Versioned workflow engines for BESS trading strategies:
| Flow | Versions | Purpose |
|---|---|---|
| Trading | v1 | Market trading decisions |
| Manual Schedule | v1, v2 | Operator-defined battery schedules |
| Auction | v3 | Auction market bidding |
| Intraday | — | Intraday market operations |
| IDC Trading | — | Intraday continuous trading |
| Data Update | — | Data refresh pipelines |
| AFRR | — | Automatic Frequency Restoration Reserve |
Each flow version has its own service struct (e.g., FlowTradingServiceV1, FlowAuctionServiceV3) with configuration variants (v1_1, v1_3, v1_4).
Middleware Stack
- OpenTelemetry — distributed tracing via
axum-tracing-opentelemetry - Metrics —
axum-otel-metricsfor HTTP metrics - Auth — JWT token validation, Entra ID integration
- Body limits —
tower-httprequest size limits - Static files — Askama templates
- CORS — Cross-origin configuration
Database Initialization
Conditional backend selection at startup:
// PostgreSQL (production)
RepositoryPostgres + AuditRepositoryPostgres + SettingRepositoryPostgres
// DuckDB (analytics)
RepositoryDuckDb + SettingRepositoryDuckdb
// SQLite (development)
RepositorySqlite + AuditRepositoryMockAuthentication
- JWT via
jsonwebtoken(RS256) - Entra ID (Azure AD) —
EntraIdClientfrom mando-lib - Volue EMS/ATP — external auth providers
Running
cd mando-bess && cargo run
# Exposed on port 8080Dependencies
Primary dependency on mando-lib with features app + workflow enabled. Also uses mando-lib-macro for #[derive(ErrorCode)].