{"time":"2026-05-16T21:30:23.2084394Z","level":"ERROR","msg":"livefeed: read stream","error":"xread waf:v1:events:stream: context canceled","service":"config-service"}
{"time":"2026-05-16T21:30:23.208475363Z","level":"ERROR","msg":"read stream","error":"xreadgroup waf:v1:events:attacks: context canceled","service":"config-service"}
{"time":"2026-05-16T21:30:23.21045609Z","level":"INFO","msg":"config-service stopped","service":"config-service"}
{"time":"2026-05-16T21:30:31.810193624Z","level":"INFO","msg":"connected to postgres","service":"config-service"}
{"time":"2026-05-16T21:30:31.908788234Z","level":"INFO","msg":"migrations complete","service":"config-service"}
{"time":"2026-05-16T21:30:31.912960747Z","level":"INFO","msg":"connected to redis","service":"config-service"}
{"time":"2026-05-16T21:30:31.981511042Z","level":"INFO","msg":"initial redis sync complete","service":"config-service"}
{"time":"2026-05-16T21:30:31.981555608Z","level":"INFO","msg":"outbox worker started","service":"config-service"}
{"time":"2026-05-16T21:30:31.981570874Z","level":"INFO","msg":"attack events worker started","service":"config-service"}
{"time":"2026-05-16T21:30:31.981584479Z","level":"INFO","msg":"live feed hub started","service":"config-service"}
{"time":"2026-05-16T21:30:31.981615951Z","level":"INFO","msg":"snapshot scheduler started","dir":"/var/lib/waf/snapshots","service":"config-service"}
{"time":"2026-05-16T21:30:31.981683881Z","level":"ERROR","msg":"snapshot: mkdir failed","dir":"/var/lib/waf/snapshots","error":"mkdir /var/lib/waf: permission denied","service":"config-service"}
{"time":"2026-05-16T21:30:31.981756536Z","level":"INFO","msg":"live feed hub started","stream":"waf:v1:events:stream","service":"config-service"}
{"time":"2026-05-16T21:30:31.982198234Z","level":"INFO","msg":"attack events worker started","stream":"waf:v1:events:attacks","group":"config-service","consumer":"waf-hackathon-waf-api","service":"config-service"}
{"time":"2026-05-16T21:30:31.982726829Z","level":"INFO","msg":"bootstrap admin: user already exists — password preserved","username":"admin","service":"config-service"}
{"time":"2026-05-16T21:30:31.98370854Z","level":"INFO","msg":"config-service started","service":"config-service"}
{"time":"2026-05-16T21:30:31.983754374Z","level":"INFO","msg":"http server starting","addr":"0.0.0.0:8081","service":"config-service"}
