feat: per-sink delivery, journal forwarding, and operational API
Persistence: - one delivery state per sink, with claim, crash recovery, and index replacement - retention for delivered and dead records - LMDB writes moved off the event loop Pipeline: - one attempt per dispatch, with the next try scheduled by next_retry_at - backpressure through max_queue_size - reload re-reads YAML; SIGTERM drains and SIGHUP reloads Plugins: - journald source, enricher and filter processors, Loki sink - built-ins register when entry points are missing API and CLI: - health, metrics, per-sink queue, and dead-letter replay - startup prints the pipeline on one line Tests: - dispatch, plugins, metrics, CLI, and persistence coverage
This commit is contained in:
@@ -50,13 +50,17 @@ daena-serve = "daena.app:serve"
|
||||
|
||||
[project.entry-points."daena.sources"]
|
||||
dummy = "daena.pipeline.sources.dummy:DummySource"
|
||||
journald = "daena.pipeline.sources.journald:JournaldSource"
|
||||
|
||||
[project.entry-points."daena.sinks"]
|
||||
dummy = "daena.pipeline.sinks.dummy:DummySink"
|
||||
http = "daena.pipeline.sinks.http:HTTPSink"
|
||||
loki = "daena.pipeline.sinks.loki:LokiSink"
|
||||
|
||||
[project.entry-points."daena.processors"]
|
||||
passthrough = "daena.pipeline.processors.passthrough:PassthroughProcessor"
|
||||
enricher = "daena.pipeline.processors.enricher:EnricherProcessor"
|
||||
filter = "daena.pipeline.processors.filter:FilterProcessor"
|
||||
|
||||
[tool.pyproject-fmt]
|
||||
max_blank_lines = 1
|
||||
|
||||
Reference in New Issue
Block a user