Reporting en eventservice (API, env-vars)
Feiten over reportingService en eventService. Voor context en het verschil met
platform-logging, zie Logging vs reporting.
Bron-of-truth: apps/api/src/common/services/log-service/* en
apps/api/src/api/event/eventService.ts.
reportingService
Singleton in apps/api/src/common/services/log-service/reportingService.ts. Wordt elders
geïmporteerd als logService via een alias:
import { logService } from '@/common/services/log-service'; // === reportingService
// of expliciet:
import { reportingService } from '@/common/services/log-service';
Event-only. De constructor registreert alleen de event-transport. flush() negeert
de transportName-parameter en maakt altijd precies één Event. E-mail- en console-transports
bestaan niet meer.
API
| Methode | Beschrijving |
|---|---|
startContext(id) |
Start een (in-memory) context. |
log(id, message) |
Voeg een regel toe (level info). |
logEx(id, message, { level, tags, data }) |
Gestructureerde regel. |
logBreak(id) |
Visuele scheiding. |
flush(id, 'event', context?) |
Bundel de regels als één Event en wis de context. Transportnaam wordt genegeerd. |
createContext({ id?, tags?, correlationId? }) |
DX-helper → { id, info(), warn(), error(), debug(), break(), flushToEvent() }. |
getMetrics() |
In-memory metrics (lines, flushes, evictions, …). |
flush / flushToEvent context-velden
Doorgegeven aan EventLogTransport → eventService.create:
| Veld | Effect |
|---|---|
user |
Triggerende gebruiker (op het Event). |
sourceDoc { id, model } |
Koppelt het Event aan een bron-document (model moet in onModelRegistry staan). |
targets |
Lijst van User-docs voor gerichte notificaties. |
eventTypeUuid |
Override van het EventType (default REPORTING_EVENT_TYPE_UUID). |
enableLogs |
false om alleen context (zonder logregels) te versturen. |
idempotencyKey |
Standaard de contextId. |
Overige velden landen in event.data (bv. subject, een summary-object). Payload wordt
gescrubt (redaction) en begrensd op EVENT_MAX_DATA_BYTES; bij overschrijding worden
logregels van achter naar voren getrimd met een logsMeta-notitie.
Env-vars
| Env-var | Default | Bron |
|---|---|---|
REPORTING_EVENT_TYPE_UUID |
84e1858c-0230-4916-b61a-6b55aa7f4e17 |
envConfig |
EVENT_MAX_DATA_BYTES |
65536 |
envConfig |
REPORTING_MAX_CONTEXTS |
500 |
envConfig + direct process.env |
REPORTING_MIRROR_TO_PINO |
false |
envConfig + direct process.env |
REPORTING_MAX_LINES |
1000 |
alleen process.env (niet in envConfig) |
REPORTING_MAX_CONTEXT_DURATION_MS |
0 = uit |
process.env in de service (let op: envConfig declareert 3600000, maar de service leest process.env direct met fallback 0) |
Let op:
reportingServiceleestREPORTING_MAX_LINES,REPORTING_MAX_CONTEXTS,REPORTING_MAX_CONTEXT_DURATION_MSenREPORTING_MIRROR_TO_PINOrechtstreeks uitprocess.env, niet via de gevalideerdeenv. Ongezet betekent dus: max 1000 regels, max 500 contexten, geen context-expiry, geen pino-mirroring.
eventService
apps/api/src/api/event/eventService.ts.
| Methode | Beschrijving |
|---|---|
create({ eventType, user, source: { id, model }, targets?, options? }) |
Maakt een Event (object-signature aanbevolen; legacy positional args blijven werken). Idempotent via idempotencyKey. |
getTimeline(from, to, filterOnlyInReport?, page?, limit?) |
Tijdlijn, gegroepeerd per dag; paginatie optioneel. |
createNotificationsForEvent(eventId) |
Idempotente notificatie-dispatch met rate-limiting en retries. |
Persistente opslag: MongoDB events-collectie (apps/api/src/api/event/eventModel.ts),
met o.a. eventType, user, targets, modelId + onModel, en data.
Env-vars (notificaties)
| Env-var | Default |
|---|---|
NOTIFICATIONS_MAX_RETRIES |
5 |
NOTIFICATIONS_RATE_PER_MINUTE |
120 |
onModelRegistry
apps/api/src/common/utils/onModelRegistry.ts koppelt een onModel-string aan een
mongoose-model (getModel) en/of een service-lookup (getSourceDoc). Een Event met een
sourceDoc.model dat niet in deze registry staat, kan niet worden gepopuleerd op de
tijdlijn en laat notificatie-dispatch falen. Voeg nieuwe bron-modellen hier toe (en werk de
drift-regressietest bij).