Files
daena/deploy/daena.service
T
ahp b3243427b7 feat: implement daena MVP core service
Complete implementation of the daena log/event collection service:

Core runtime:
- DaenaRuntime service lifecycle (start/stop/reload)
- Pipeline orchestrator with source/persist/dispatch flow
- LMDB persistence backend with key-prefix partitioning
- Plugin discovery via Python entry points

Pipeline:
- Source/Processor/Sink ABC interfaces with DeliveryResult
- DummySource for testing and development
- DummySink and HTTPSink implementations
- PassthroughProcessor
- Record dataclass for in-memory records
- StoredRecord model with RecordState tracking

REST API (FastAPI, v1):
- GET /system/{status,health,config}
- GET /plugins
- GET /queue, /queue/{pending,dead}
- GET /sinks
- Versioned under /api/v1 prefix

CLI (Typer):
- status, health, queue, sinks, plugins, config, version

Persistence (LMDB):
- Single-database key-prefix design (no named DBs)
- Index keys: idx:{state}:{ts}\x00{id}
- Record keys: rec:{id}
- Full CRUD: put/get/ack/nack/dead/update_state
- Pending/retry/dead-letter queries with state filtering
- delete_old for TTL-based retention

Deployment:
- systemd unit file (deploy/daena.service)
- Example YAML config (config/daena.yaml)
- Entry points: daena (CLI), daena-serve (uvicorn server)

Quality:
- 23 unit tests covering config, persistence, pipeline
- ruff linting and formatting pass clean
- Py3.13 compatible, uv-managed, pyenv-pinned
- GPG-signed commit on dev branch
2026-07-15 09:37:43 +03:30

32 lines
592 B
Desktop File

[Unit]
Description=Daena - Linux log and event collector
Documentation=https://github.com/anomalyco/daena
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=daena
Group=daena
ExecStart=/usr/local/bin/daena-serve
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
AmbientCapabilities=CAP_SYS_PTRACE
NoNewPrivileges=true
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
StateDirectory=daena
LogsDirectory=daena
RuntimeDirectory=daena
# Environment
Environment=DAENA_CONFIG_PATH=/etc/daena/daena.yaml
[Install]
WantedBy=multi-user.target