From bf74bf9f5c6c72b284f72438be8edb6f8f608db7 Mon Sep 17 00:00:00 2001 From: Njuguna Ndung'u Date: Wed, 28 Aug 2024 11:26:25 +0300 Subject: [PATCH 1/6] feat: add cht-sync collector and update the sql exporter example --- exporters/postgres/cht_sync_collector.yml | 74 ++++++++++++++++++++++ exporters/postgres/sql_servers_example.yml | 3 +- 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 exporters/postgres/cht_sync_collector.yml diff --git a/exporters/postgres/cht_sync_collector.yml b/exporters/postgres/cht_sync_collector.yml new file mode 100644 index 0000000..3f71190 --- /dev/null +++ b/exporters/postgres/cht_sync_collector.yml @@ -0,0 +1,74 @@ +collector_name: cht-sync + +queries: + - query_name: couch2pg-query + query: | + SELECT + split_part(seq,'-',1) as sequence, + pending as pending, + CASE + WHEN updated_at < NOW() - INTERVAL '1 minute' THEN 0 + ELSE 1 + END AS liveness, + split_part(source,'/',2) as db, + split_part(source,'/',1) as cht_instance + FROM + {{ .Values.postgres.schema }}.couchdb_progress + WHERE + source like '%/%' and + seq like '%-%' + ORDER BY + cht_instance, db + - query_name: dbt-latency + query: | + SELECT + EXTRACT(EPOCH FROM(couchdb.latest - dbt_root.latest)) AS dbt_latency + FROM + (SELECT MAX(saved_timestamp) as latest FROM {{ .Values.postgres.schema }}.document_metadata) dbt_root, + (SELECT MAX(saved_timestamp) as latest FROM {{ .Values.postgres.schema }}.{{ .Values.postgres.table }}) couchdb + - query_name: dbt-run-stats + query: | + SELECT + status, + execution_time, + name as table_name + FROM + {{ .Values.postgres.schema }}.dbt_results + +metrics: + - metric_name: couch2pg_progress_sequence + type: counter + help: 'current sequence number for couch2pg' + key_labels: + - db + - cht_instance + values: [sequence] + query_ref: couch2pg-query + - metric_name: couch2pg_progress_pending + type: gauge + help: 'approximate number of changes left to sync from couch to postgres' + key_labels: + - db + - cht_instance + values: [pending] + query_ref: couch2pg-query + - metric_name: couch2pg_up + type: gauge + help: '1 if couch2pg is running and has updated in the last minute, 0 if not' + key_labels: + - db + - cht_instance + values: [liveness] + query_ref: couch2pg-query + - metric_name: dbt_latency + type: gauge + help: 'difference between last timestamp in dbt models and current time (seconds)' + values: [dbt_latency] + query_ref: dbt-latency + - metric_name: dbt_execution_time + type: gauge + help: 'dbt run last execution time (ms)' + key_labels: + - table_name + values: [execution_time] + query_ref: dbt-run-stats diff --git a/exporters/postgres/sql_servers_example.yml b/exporters/postgres/sql_servers_example.yml index 31e7d67..cdff257 100644 --- a/exporters/postgres/sql_servers_example.yml +++ b/exporters/postgres/sql_servers_example.yml @@ -20,7 +20,7 @@ collector_files: jobs: - job_name: db_targets - collectors: [couch2pg] + collectors: [couch2pg] # change this to [couch2pg] to monitor couch2pg enable_ping: true static_configs: - targets: @@ -29,4 +29,3 @@ jobs: # sql server (eg "postgres-rds-prod", "postgres-rds-dev1" etc.) # 'postgres://USERNAME:PASSWORD@DB_SERVER_IP/DATABASE:PORT "db1": 'postgres://cht_couch2pg:cht_couch2pg_password@172.17.0.1:5432/cht?sslmode=disable' # //NOSONAR - password is safe to commit - From 6e82ec7abd8cdb1e7b01e3c8c79d8a9fc1179032 Mon Sep 17 00:00:00 2001 From: Njuguna Ndung'u Date: Wed, 28 Aug 2024 12:05:56 +0300 Subject: [PATCH 2/6] chore: set cht-sync as the default collector --- exporters/postgres/sql_servers_example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporters/postgres/sql_servers_example.yml b/exporters/postgres/sql_servers_example.yml index cdff257..93f6601 100644 --- a/exporters/postgres/sql_servers_example.yml +++ b/exporters/postgres/sql_servers_example.yml @@ -20,7 +20,7 @@ collector_files: jobs: - job_name: db_targets - collectors: [couch2pg] # change this to [couch2pg] to monitor couch2pg + collectors: [cht-sync] # change this to [couch2pg] to monitor couch2pg enable_ping: true static_configs: - targets: From 32c49036b41e92c51baf177ba7cf5b81aef55a97 Mon Sep 17 00:00:00 2001 From: Njuguna Ndung'u Date: Mon, 23 Sep 2024 17:44:58 +0300 Subject: [PATCH 3/6] fix: upadte collector file --- exporters/postgres/sql_servers_example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporters/postgres/sql_servers_example.yml b/exporters/postgres/sql_servers_example.yml index 93f6601..41bb457 100644 --- a/exporters/postgres/sql_servers_example.yml +++ b/exporters/postgres/sql_servers_example.yml @@ -16,7 +16,7 @@ global: max_connection_lifetime: 10m collector_files: - - "/etc/sql_exporter/couch2pg_collector.yml" + - "/etc/sql_exporter/cht_sync_collector.yml" jobs: - job_name: db_targets From c095898c4eb3baa0354690e1d8819416e8b55131 Mon Sep 17 00:00:00 2001 From: Njuguna Ndung'u Date: Wed, 9 Oct 2024 13:32:51 +0300 Subject: [PATCH 4/6] chore: update default postgres connection string --- exporters/postgres/sql_servers_example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporters/postgres/sql_servers_example.yml b/exporters/postgres/sql_servers_example.yml index 41bb457..f5c2642 100644 --- a/exporters/postgres/sql_servers_example.yml +++ b/exporters/postgres/sql_servers_example.yml @@ -28,4 +28,4 @@ jobs: # be sure each new server gets a unique name. A good rule of thumb is to use the name of the # sql server (eg "postgres-rds-prod", "postgres-rds-dev1" etc.) # 'postgres://USERNAME:PASSWORD@DB_SERVER_IP/DATABASE:PORT - "db1": 'postgres://cht_couch2pg:cht_couch2pg_password@172.17.0.1:5432/cht?sslmode=disable' # //NOSONAR - password is safe to commit + "db1": 'postgres://postgres:password@172.17.0.1:5432/data?sslmode=disable' # //NOSONAR - password is safe to commit From caffe4e74aceb1e9a3a5943a915d4b62b38be373 Mon Sep 17 00:00:00 2001 From: Njuguna Ndung'u Date: Wed, 16 Oct 2024 14:05:50 +0300 Subject: [PATCH 5/6] feat: add hard coded schema and table name --- exporters/postgres/cht_sync_collector.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/exporters/postgres/cht_sync_collector.yml b/exporters/postgres/cht_sync_collector.yml index 3f71190..0b68bf8 100644 --- a/exporters/postgres/cht_sync_collector.yml +++ b/exporters/postgres/cht_sync_collector.yml @@ -1,5 +1,6 @@ collector_name: cht-sync +# Update the schema and table names as needed queries: - query_name: couch2pg-query query: | @@ -13,7 +14,7 @@ queries: split_part(source,'/',2) as db, split_part(source,'/',1) as cht_instance FROM - {{ .Values.postgres.schema }}.couchdb_progress + v1.couchdb_progress WHERE source like '%/%' and seq like '%-%' @@ -24,8 +25,8 @@ queries: SELECT EXTRACT(EPOCH FROM(couchdb.latest - dbt_root.latest)) AS dbt_latency FROM - (SELECT MAX(saved_timestamp) as latest FROM {{ .Values.postgres.schema }}.document_metadata) dbt_root, - (SELECT MAX(saved_timestamp) as latest FROM {{ .Values.postgres.schema }}.{{ .Values.postgres.table }}) couchdb + (SELECT MAX(saved_timestamp) as latest FROM v1.document_metadata) dbt_root, + (SELECT MAX(saved_timestamp) as latest FROM v1.couchdb) couchdb - query_name: dbt-run-stats query: | SELECT @@ -33,7 +34,7 @@ queries: execution_time, name as table_name FROM - {{ .Values.postgres.schema }}.dbt_results + v1.dbt_results metrics: - metric_name: couch2pg_progress_sequence From bf0e215ac74552ea291e8b9bf34c6d8d87ba772e Mon Sep 17 00:00:00 2001 From: mrjones-plip Date: Thu, 17 Oct 2024 09:26:24 -0700 Subject: [PATCH 6/6] update grafana json to have new cht-sync widget --- .../dashboards/CHT/cht_admin_overview.json | 79 +++---------------- index.js | 1 + 2 files changed, 14 insertions(+), 66 deletions(-) create mode 100644 index.js diff --git a/grafana/provisioning/dashboards/CHT/cht_admin_overview.json b/grafana/provisioning/dashboards/CHT/cht_admin_overview.json index b97d359..5aa7a36 100644 --- a/grafana/provisioning/dashboards/CHT/cht_admin_overview.json +++ b/grafana/provisioning/dashboards/CHT/cht_admin_overview.json @@ -1126,22 +1126,13 @@ "type": "prometheus", "uid": "PBFA97CFB590B2093" }, - "description": "Number of CouchDB changes that have not yet been processed by Couch2pg", + "description": "Number of CouchDB changes that have not yet been processed by CHT Sync", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, - "displayName": "changes", - "links": [ - { - "title": "Couch2pg backlog", - "url": "/d/hkQUbyfVk/cht-admin-details?orgId=1&viewPanel=24&var-cht_instance=${cht_instance}&from=${__from}&to=${__to}" - } - ], "mappings": [], - "max": 100, - "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -1149,14 +1140,6 @@ "color": "blue", "value": null }, - { - "color": "green", - "value": 0 - }, - { - "color": "#EAB839", - "value": 60 - }, { "color": "red", "value": 80 @@ -1173,15 +1156,10 @@ "x": 8, "y": 12 }, - "id": 49, - "links": [ - { - "targetBlank": true, - "title": "Couch2pg docs", - "url": "https://docs.communityhealthtoolkit.org/apps/tutorials/couch2pg-setup/" - } - ], + "id": 50, "options": { + "minVizHeight": 75, + "minVizWidth": 75, "orientation": "auto", "reduceOptions": { "calcs": [ @@ -1202,47 +1180,17 @@ }, "editorMode": "builder", "exemplar": false, - "expr": "sum(cht_couchdb_update_sequence{instance=~\"$cht_instance\", db=~\"medic|sentinel|medic-users-meta\"})", - "instant": true, - "legendFormat": "__auto", - "range": false, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "editorMode": "builder", - "exemplar": false, - "expr": "sum(couch2pg_progress_sequence{cht_instance=~\"$cht_instance\", db=~\"medic|medic-sentinel|medic-users-meta\"})", - "hide": false, + "expr": "couch2pg_progress_pending{target=\"$cht_instance\"}", + "fullMetaSearch": false, + "includeNullMetadata": true, "instant": true, "legendFormat": "__auto", "range": false, - "refId": "B" - }, - { - "datasource": { - "name": "Expression", - "type": "__expr__", - "uid": "__expr__" - }, - "expression": "$A - $B", - "hide": false, - "refId": "C", - "type": "math" - } - ], - "title": "Couch2pg Backlog", - "transformations": [ - { - "id": "filterByRefId", - "options": { - "include": "C" - } + "refId": "A", + "useBackend": false } ], + "title": "CHT Sync Backlog", "type": "gauge" }, { @@ -2303,8 +2251,7 @@ ], "refresh": "30s", "revision": 1, - "schemaVersion": 38, - "style": "dark", + "schemaVersion": 39, "tags": [], "templating": { "list": [ @@ -2340,6 +2287,6 @@ "timezone": "", "title": "CHT Admin Overview", "uid": "oa2OfL-Vk", - "version": 37, + "version": 39, "weekStart": "" -} +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..04bf26e --- /dev/null +++ b/index.js @@ -0,0 +1 @@ +console.log('Happy developing ✨')