prefect server in zig

services#

background workers managed by services.zig.

registry#

simple array of function pointers:

pub const Service = struct {
    name: []const u8,
    start: *const fn () anyerror!void,
    stop: *const fn () void,
};

const all = [_]Service{
    .{ .name = "event_persister", .start = event_persister.start, .stop = event_persister.stop },
    .{ .name = "event_broadcaster", .start = event_broadcaster.start, .stop = event_broadcaster.stop },
};

startAll() iterates forward, stopAll() iterates reverse.

event_persister#

subscribes to broker topic "events" with consumer group "event-persister".

  • batch size: 100 events
  • flush interval: 1 second
  • deduplication: INSERT OR IGNORE by event id
  • retention: 7 days, trimmed hourly

lifecycle: spawns worker thread on start(), signals and joins on stop().

event_broadcaster#

subscribes to broker topic "events" with ephemeral consumer group (unique per server). fans out events to connected WS subscribers on /api/events/out.

  • subscriber capacity: 256 connections
  • filter support: event prefix, resource_id (parsed with std.json)
  • drop policy: non-blocking writes, slow clients get disconnected

see src/services/CLAUDE.md for event flow details.