From adb0caf7b268d8d756b534c0eecd92cbd9d07814 Mon Sep 17 00:00:00 2001 From: idanoo Date: Mon, 30 Jan 2023 11:11:25 +1300 Subject: [PATCH] Add remaining metrics --- README.md | 28 ++++++++++---- internal/gomastodonstats/consts.go | 12 +++++- internal/gomastodonstats/metrics.go | 58 +++++++++++++++++++++++++---- 3 files changed, 82 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index cec9b42..74c25f1 100644 --- a/README.md +++ b/README.md @@ -2,22 +2,36 @@ Create readonly account with access to stats DB ``` -CREATE ROLE readonly; -GRANT USAGE ON SCHEMA public TO readonly; -GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; CREATE USER gomastodonstats WITH PASSWORD 'superrandompassword'; -GRANT readonly TO gomastodonstats; + +\c pixelfed +GRANT SELECT ON ALL TABLES IN SCHEMA public TO gomastodonstats; + +\c mtrx +GRANT SELECT ON ALL TABLES IN SCHEMA public TO gomastodonstats; + +\c mastodon_production +GRANT SELECT ON ALL TABLES IN SCHEMA public TO gomastodonstats; + +\c peertube_prod +GRANT SELECT ON ALL TABLES IN SCHEMA public TO gomastodonstats; + +\c mobilizon_prod +GRANT SELECT ON ALL TABLES IN SCHEMA public TO gomastodonstats; CREATE DATABASE gomastodonstats WITH OWNER gomastodonstats; + \c gomastodonstats CREATE TABLE IF NOT EXISTS statsdb ( - id INT NOT NULL, + id SERIAL, service VARCHAR(50) NOT NULL, metric_name VARCHAR(50) NOT NULL, - metric_time INT NOT NULL, + metric_time TIMESTAMP NOT NULL, metric_value INT NOT NULL, PRIMARY KEY (id) ); CREATE INDEX service_lookup ON statsdb USING btree (service,metric_name, metric_time); + +GRANT ALL ON ALL TABLES IN SCHEMA public TO gomastodonstats; +GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO gomastodonstats; ``` \ No newline at end of file diff --git a/internal/gomastodonstats/consts.go b/internal/gomastodonstats/consts.go index 8476cbc..c5261c1 100644 --- a/internal/gomastodonstats/consts.go +++ b/internal/gomastodonstats/consts.go @@ -10,23 +10,31 @@ var ( TIMEZONE string + // UserCount metric name + METRICNAME_USERCOUNT = "userCount" + // Pixelfed PIXELFED_DB_SCHEMA string PIXELFED_USER_QUERY = "SELECT count(*) FROM users WHERE status IS NULL;" + PIXELFED_IDENTIFIER = "pixelfed" // Matrix - MATRIX_DB_SCHEMA string - MATRIX_USER_QUERY = "SELECT count(*) FROM users WHERE deactivated = 0;" + MATRIX_DB_SCHEMA string + MATRIX_USER_QUERY = "SELECT count(*) FROM users WHERE deactivated = 0;" + MATRIX_IDENTIFIDER = "matrix" // Mastodon MASTODON_DB_SCHEMA string MASTODON_USER_QUERY = "SELECT count(*) FROM users WHERE disabled = False;" + MASTODON_IDENTIFIER = "mastodon" // Mobilizon MOBILIZON_DB_SCHEMA string MOBILIZON_USER_QUERY = "SELECT count(*) FROM users WHERE disabled = False;" + MOBILIZON_IDENTIFIER = "mobilizon" // Peertube PEERTUBE_DB_SCHEMA string PEERTUBE_USER_QUERY = "SELECT count(*) FROM \"user\" WHERE blocked = False;" + PEERTUBE_IDENTIFIER = "peertube" ) diff --git a/internal/gomastodonstats/metrics.go b/internal/gomastodonstats/metrics.go index 0a30ad0..bfce72c 100644 --- a/internal/gomastodonstats/metrics.go +++ b/internal/gomastodonstats/metrics.go @@ -28,19 +28,63 @@ func getUserCounts() ([]metric, error) { var metrics []metric if PIXELFED_DB_SCHEMA != "" { - pfUsers, err := runIntQuery(PIXELFED_DB_SCHEMA, PIXELFED_USER_QUERY) + userCount, err := runIntQuery(PIXELFED_DB_SCHEMA, PIXELFED_USER_QUERY) if err != nil { log.Println(err) } else { - pfMetric := metric{ - Service: "pixelfed", - MetricName: "userCount", - MetricValue: pfUsers, + m := metric{ + Service: PIXELFED_IDENTIFIER, + MetricName: METRICNAME_USERCOUNT, + MetricValue: userCount, } - log.Printf("Pixelfed user count: %d", pfUsers) - metrics = append(metrics, pfMetric) + log.Printf("%s user count: %d", PIXELFED_IDENTIFIER, userCount) + metrics = append(metrics, m) } + } + if MASTODON_DB_SCHEMA != "" { + userCount, err := runIntQuery(MASTODON_DB_SCHEMA, MASTODON_USER_QUERY) + if err != nil { + log.Println(err) + } else { + m := metric{ + Service: MASTODON_IDENTIFIER, + MetricName: METRICNAME_USERCOUNT, + MetricValue: userCount, + } + log.Printf("%s user count: %d", MASTODON_IDENTIFIER, userCount) + metrics = append(metrics, m) + } + } + + if MOBILIZON_DB_SCHEMA != "" { + userCount, err := runIntQuery(MOBILIZON_DB_SCHEMA, MOBILIZON_USER_QUERY) + if err != nil { + log.Println(err) + } else { + m := metric{ + Service: MOBILIZON_IDENTIFIER, + MetricName: METRICNAME_USERCOUNT, + MetricValue: userCount, + } + log.Printf("%s user count: %d", MOBILIZON_IDENTIFIER, userCount) + metrics = append(metrics, m) + } + } + + if MOBILIZON_DB_SCHEMA != "" { + userCount, err := runIntQuery(PEERTUBE_DB_SCHEMA, PEERTUBE_USER_QUERY) + if err != nil { + log.Println(err) + } else { + m := metric{ + Service: PEERTUBE_IDENTIFIER, + MetricName: METRICNAME_USERCOUNT, + MetricValue: userCount, + } + log.Printf("%s user count: %d", PEERTUBE_IDENTIFIER, userCount) + metrics = append(metrics, m) + } } return metrics, nil