prefect server in zig
at main 44 lines 1.2 kB view raw view rendered
1# services 2 3background workers managed by `services.zig`. 4 5## registry 6 7simple array of function pointers: 8 9```zig 10pub const Service = struct { 11 name: []const u8, 12 start: *const fn () anyerror!void, 13 stop: *const fn () void, 14}; 15 16const all = [_]Service{ 17 .{ .name = "event_persister", .start = event_persister.start, .stop = event_persister.stop }, 18 .{ .name = "event_broadcaster", .start = event_broadcaster.start, .stop = event_broadcaster.stop }, 19}; 20``` 21 22`startAll()` iterates forward, `stopAll()` iterates reverse. 23 24## event_persister 25 26subscribes to broker topic "events" with consumer group "event-persister". 27 28- batch size: 100 events 29- flush interval: 1 second 30- deduplication: `INSERT OR IGNORE` by event id 31- retention: 7 days, trimmed hourly 32 33lifecycle: spawns worker thread on `start()`, signals and joins on `stop()`. 34 35## event_broadcaster 36 37subscribes to broker topic "events" with ephemeral consumer group (unique per server). 38fans out events to connected WS subscribers on `/api/events/out`. 39 40- subscriber capacity: 256 connections 41- filter support: event prefix, resource_id (parsed with std.json) 42- drop policy: non-blocking writes, slow clients get disconnected 43 44see `src/services/CLAUDE.md` for event flow details.