You've already forked directdnsonly
- ReconciliationWorker._last_run stores per-pass stats (da_servers_polled, zones_in_da/db, orphans_found/queued, hostnames_backfilled/migrated, zones_healed, duration_seconds, dry_run flag) - ReconciliationWorker.get_status() exposes state for API/UI consumption - _heal_backends() now returns healed count - PeerSyncWorker.get_peer_status() serialises _peer_health to JSON-safe dict (url, healthy, consecutive_failures, last_seen) with summary totals - WorkerManager tracks dead-letter count; queue_status() now returns nested reconciler/peer_sync dicts replacing flat reconciler_alive/peer_syncer_alive - New GET /status endpoint (StatusAPI) aggregates queue depths, worker liveness, reconciler last-run, peer health, and live zone count; computes ok/degraded/error - .gitignore: exclude .claude/, .vscode/, .env (always local) - app.yml: add documented datastore section (SQLite default + MySQL commented) - 164 tests passing (23 new tests added)
35 lines
323 B
Plaintext
35 lines
323 B
Plaintext
*.db
|
|
dist/
|
|
venv/
|
|
.venv
|
|
.idea
|
|
build
|
|
!build/.gitkeep
|
|
**/__pycache__/
|
|
*.pyc
|
|
*.pyo
|
|
*.pyd
|
|
*.egg-info
|
|
*.egg
|
|
*.log
|
|
*.DS_Store
|
|
*.swp
|
|
*.swo
|
|
*.bak
|
|
*.tmp
|
|
*.orig
|
|
*.coverage
|
|
*.cover
|
|
*.tox
|
|
*.dist-info
|
|
*.egg-info
|
|
*.mypy_cache
|
|
*.pytest_cache
|
|
/data/*
|
|
|
|
# Editor / tool settings — always local, never committed
|
|
.vscode/
|
|
.claude/
|
|
.env
|
|
*.env
|