Skip to content

Parity target: everything ddnet's PostgresLogger provides, so dual-write can end #3

Description

@awksedgreep

ddnet currently dual-writes DHCP/TFTP/NTP/TOD logs: structured records to Postgres (TimescaleDB hypertables) and formatted text to timeless-logs. Decision 2026-08-15: keep both during the product cycle (more logging = better), and treat this checklist as the bar timeless must clear for ddnet to retire PostgresLogger entirely. ddnet is the first demanding customer; this is its requirements list.

What Postgres provides today that timeless must match

  • Structured field ingestion: ddnet ships operation, client_mac, client_ip, and Option-82 metadata (cable_modem_mac, circuit id) as first-class fields, and they are filterable server-side (client_mac:"aa:bb:..." works). The jsonline endpoint accepts the fields already; indexing/filtering them is the gap. (ddnet side: extend the VLogsBackend payload — small.)
  • Field-level analytics: stats by (field) (timeless_logs#1), aggregates that survive busy windows (timeless_logs#2 work-row cap), so "top NAKed MACs in the storm hour" is one query.
  • Retention + compression policy: per-stream age-based retention equivalent to the TimescaleDB policies ddnet runs (compress after 7d, drop after 90d), configurable without SQL migrations.
  • Live tail: the enhanced-logs LiveView gets realtime updates via PubSub today; timeless needs a follow/tail mechanism the UI can subscribe to.
  • UI story: log browsing/search pointed at timeless (timeless_logs_dashboard convergence) so the Postgres reader path has a successor.

What retirement buys ddnet when this lands

Single log store, no dual-write, no per-message Postgres inserts on the DHCP hot path (ddnet#4 becomes moot), no hypertable maintenance — and timeless gets proven against a 30k-device production workload before external customers see it.

Related: awksedgreep/ddnet#4 (interim: per-service min_log_level config exists if Postgres insert volume ever needs cutting before parity lands).

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions