-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Summary
HoldFast should eat its own dogfood. Every component in a HoldFast deployment — backend, frontend, and infrastructure — should automatically send telemetry to the HoldFast instance it's running alongside. No manual configuration required.
What's already done (this issue tracks the remainder)
-
SystemBootstrapService— creates the HoldFast workspace + project on every startup (idempotent, always runs) - .NET backend OTeL SDK wired — traces + metrics via OTLP to
OTEL_EXPORTER_OTLP_ENDPOINT(defaults tohttp://localhost:8082) - Docker Compose:
OTEL_EXPORTER_OTLP_ENDPOINT=http://backend:8082set for backend container - Login response shape fixed (
{token, user: {uid, email}})
Remaining work
Frontend browser SDK
- Add
@holdfast-io/browsertosrc/frontend/ - Initialize in
src/frontend/src/index.tsxusingREACT_APP_PUBLIC_GRAPH_URIandREACT_APP_HIGHLIGHT_PROJECT_ID(injected at runtime) - This requires issue Frontend: replace baked-in URL hack with runtime config injection #63 (runtime config injection) to be resolved first
Backend log export
- Add
OpenTelemetry.Exporter.OpenTelemetryProtocollog exporter alongside traces/metrics - Wire
ILogger→ OTeL →/otel/v1/logs
Infrastructure exporters (Docker Compose)
- PostgreSQL: add
postgres-exportersidecar → Prometheus → OTeL collector → HoldFast - ClickHouse: add
clickhouse-exporter→ HoldFast - Kafka: add JMX exporter or
kafka-exporter→ HoldFast - Redis: add
redis-exporter→ HoldFast
OTeL Collector (optional)
- Add
otel-collectorcontainer as a central aggregation point for infra exporters - Routes all infra metrics to the HoldFast public endpoint
Helm / k8s
- Mirror Docker Compose telemetry wiring in Helm chart values (tracked in Helm charts + MicroK8s deployment path #62)
Design principle
When someone installs HoldFast on-prem, they should open the dashboard after first boot and already see their own platform's health data. Zero additional configuration.
Reactions are currently unavailable