Add Believers Elite golden signals Grafana dashboard #386
No reviewers
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/pal-e-platform!386
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "385-add-believers-elite-golden-signals-grafa"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
believers-elite-golden-signals.jsondashboard with 14 panels across 4 rows: App Status, Traffic, Latency, Errorsgrafana_dashboard=1label for sidecar auto-provisioningChanges
terraform/dashboards/believers-elite-golden-signals.json: new dashboard JSON following basketball-api patternterraform/modules/monitoring/main.tf: addedkubernetes_config_map_v1.believers_elite_dashboardConfigMap resourceTest Plan
terraform planshows new ConfigMap resourceterraform apply, dashboard appears in Grafana under "Believers Elite Golden Signals"Review Checklist
Related Notes
ldraney/pal-e-platform #385-- the Forgejo issue this PR implementsbelievers-elite-- camp registration siteCloses #385
PR #386 Review
DOMAIN REVIEW
Tech stack identified: Terraform (HCL) + Grafana dashboard JSON (declarative monitoring).
Dashboard JSON analysis (
terraform/dashboards/believers-elite-golden-signals.json):annotations,editable,graphTooltip,schemaVersion: 39,templating(DS_PROMETHEUS datasource variable),timerange,timezone, andversionfields."id": null-- correct for sidecar-provisioned dashboards (Grafana assigns the ID)."uid": "believers-elite-golden-signals"-- unique, follows the{service}-golden-signalsconvention.["believers-elite", "golden-signals", "camp", "sre"]-- consistent pattern with basketball-api's["basketball-api", "golden-signals", "payments", "sre"].Panel ID uniqueness and sequencing:
IDs 1-14, all unique, sequential. 4 row panels (IDs 1, 6, 9, 12) and 10 data panels. Confirmed no duplicates or gaps.
Grid layout validation:
w: 24atx: 0-- correct full-width row headers.w: 6, positioned at x=0,6,12,18 -- fills 24 columns cleanly.w: 12, paired at x=0 and x=12 -- correct 50/50 splits.PromQL queries:
max(believers_elite_app_up)-- matches themax(basketball_api_up)pattern.sum(believers_elite_registrations_total)andsum(believers_elite_registrations_total{paid="true"})-- valid counter aggregations with label filter.sum(increase(http_server_requests_total{code=~"5.."}[5m]))-- correct regex for 5xx codes.sum(rate(http_server_requests_total[5m])) by (path)andby (code)-- standard rate queries.histogram_quantile(0.50|0.95|0.99, sum(rate(http_server_request_duration_seconds_bucket[5m])) by (le))-- correct histogram_quantile pattern withlelabel.histogram_quantile(0.95, ...) by (le, path)-- correct multi-dimensional breakdown.sum(rate(http_server_exceptions_total[5m])) by (exception)-- valid.All five metric families referenced (
http_server_requests_total,http_server_request_duration_seconds_bucket,http_server_exceptions_total,believers_elite_app_up,believers_elite_registrations_total) are correctly used.Terraform ConfigMap (
terraform/modules/monitoring/main.tf):kubernetes_config_map_v1.believers_elite_dashboardfollows the{service}_dashboardconvention.name = "believers-elite-dashboard"-- matches the kebab-case convention.namespace = kubernetes_namespace_v1.monitoring.metadata[0].name-- identical to basketball-api pattern.labels = { grafana_dashboard = "1" }-- correct sidecar label.file("${path.module}/../../dashboards/believers-elite-golden-signals.json")-- correct relative path fromterraform/modules/monitoring/toterraform/dashboards/.depends_on = [helm_release.kube_prometheus_stack]-- correct dependency.BLOCKERS
None.
This is a declarative monitoring dashboard with no user input, no secrets, no auth logic, and no executable code. The BLOCKER criteria (test coverage for new functionality, unvalidated user input, secrets in code, DRY violations in auth paths) do not apply to static Grafana JSON + Terraform ConfigMap resources. The "test plan" of
terraform planshowing the new resource and visual verification in Grafana is the appropriate validation approach for this type of change.NITS
PromQL scoping: The
http_server_requests_totalandhttp_server_request_duration_seconds_bucketqueries do not include a job/namespace filter (e.g.,{job="believers-elite"}). If multiple services emit these same generic metric names to the same Prometheus, panels will aggregate data across services. The basketball-api dashboard has the same pattern (no job filter on its webhook metrics), so this is consistent -- but worth noting for when multiple HTTP services are scraped. Not blocking because it matches the existing convention.Exception Rate panel unit: Panel 14 ("Exception Rate by class") uses
unit: "reqps"(requests per second). While technically showing a rate,"cps"(counts per second) or"ops"(operations per second) would be more semantically accurate for exceptions. Cosmetic only.SOP COMPLIANCE
385-add-believers-elite-golden-signals-grafa(follows{issue-number}-{kebab-case-purpose}-- truncated but acceptable)PROCESS OBSERVATIONS
terraform planwill show 1 resource to create, zero to change or destroy.VERDICT: APPROVED