Request flows
Ingest (agent → API → VM)
- Агент открывает mTLS-conn к :8443
- Server TLS config верифицирует peer-cert против выписанного CA
agentIDFromCert(r)→ identity (НИКОГДА не из body/header)- SELECT organization_id, status, region_id FROM agents
- Sample[]: каждой метрике клеится organization_id + agent_id + host
router.VMForRegion(region_id)→ VM-клиент регионаvm.Write(samples)- UPDATE agents SET last_seen_at = now()
Cabinet query
- Browser →
/api/v1/orgs/:slug/query/range?metric=X&host=Y - Session middleware (cookie) → userCtx
- orgMiddleware → orgContext{OrgID, UserID, Role}
composeQuery("X", {organization_id: OrgID, host: Y})vm.Range(promQuery, start, end, step)
Embed query
- Партнёрский backend: POST /api/v1/embed/tokens с mk_xxx
- API верифицирует key origin против allowlist
- JWT выпускается: claims содержат {org_id, filters}
- Партнёр кладёт JWT в iframe или postMessage
- SDK →
/api/v1/embed/query/rangeс Bearer JWT - embed.Required: парсит JWT, извлекает filters из claims
- composeQuery с claim.filters