From 1b26ed4ba1c92ee2c03c0c9ad4624bd2c8524fc5 Mon Sep 17 00:00:00 2001
From: leomuso <leonardo.munoz@adjust.com>
Date: Tue, 26 Mar 2024 17:09:28 +0100
Subject: [PATCH 1/4] sql_exporter: adding package plus config, user and group

---
 acct-group/sql_exporter/metadata.xml          |  7 +++
 acct-group/sql_exporter/sql_exporter-0.ebuild |  8 +++
 acct-user/sql_exporter/metadata.xml           |  7 +++
 acct-user/sql_exporter/sql_exporter-0.ebuild  | 13 ++++
 app-metrics/sql_exporter/Manifest             |  1 +
 .../sql_exporter/files/sql_exporter.init.d    | 24 ++++++++
 .../sql_exporter/files/sql_exporter.yml       | 47 ++++++++++++++
 app-metrics/sql_exporter/metadata.xml         | 11 ++++
 .../sql_exporter/sql_exporter-0.5.3.ebuild    | 61 +++++++++++++++++++
 9 files changed, 179 insertions(+)
 create mode 100644 acct-group/sql_exporter/metadata.xml
 create mode 100644 acct-group/sql_exporter/sql_exporter-0.ebuild
 create mode 100644 acct-user/sql_exporter/metadata.xml
 create mode 100644 acct-user/sql_exporter/sql_exporter-0.ebuild
 create mode 100644 app-metrics/sql_exporter/Manifest
 create mode 100644 app-metrics/sql_exporter/files/sql_exporter.init.d
 create mode 100644 app-metrics/sql_exporter/files/sql_exporter.yml
 create mode 100644 app-metrics/sql_exporter/metadata.xml
 create mode 100644 app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild

diff --git a/acct-group/sql_exporter/metadata.xml b/acct-group/sql_exporter/metadata.xml
new file mode 100644
index 00000000..8bbd7586
--- /dev/null
+++ b/acct-group/sql_exporter/metadata.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>ops@adjust.com</email>
+	</maintainer>
+</pkgmetadata>
diff --git a/acct-group/sql_exporter/sql_exporter-0.ebuild b/acct-group/sql_exporter/sql_exporter-0.ebuild
new file mode 100644
index 00000000..ae90762e
--- /dev/null
+++ b/acct-group/sql_exporter/sql_exporter-0.ebuild
@@ -0,0 +1,8 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit acct-group
+
+ACCT_GROUP_ID=-1
diff --git a/acct-user/sql_exporter/metadata.xml b/acct-user/sql_exporter/metadata.xml
new file mode 100644
index 00000000..8bbd7586
--- /dev/null
+++ b/acct-user/sql_exporter/metadata.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>ops@adjust.com</email>
+	</maintainer>
+</pkgmetadata>
diff --git a/acct-user/sql_exporter/sql_exporter-0.ebuild b/acct-user/sql_exporter/sql_exporter-0.ebuild
new file mode 100644
index 00000000..74f5b248
--- /dev/null
+++ b/acct-user/sql_exporter/sql_exporter-0.ebuild
@@ -0,0 +1,13 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit acct-user
+
+DESCRIPTION="SQL Exporter for Prometheus"
+
+ACCT_USER_ID=-1
+ACCT_USER_GROUPS=( ${PN} )
+
+acct-user_add_deps
diff --git a/app-metrics/sql_exporter/Manifest b/app-metrics/sql_exporter/Manifest
new file mode 100644
index 00000000..1527b01b
--- /dev/null
+++ b/app-metrics/sql_exporter/Manifest
@@ -0,0 +1 @@
+DIST sql_exporter-0.5.3.tar.gz 11600200 BLAKE2B f249f54bae8c42984087f365530392d8dd3162a9314e4a58744de23463786833d452ed379b2f785871fbeca6c9feb312307d59f490677ce71df81b33c3f313f7 SHA512 e6f01bdd47e9cf43077662d42fb4500dc0dbfc2bd3462e8082595cfd810c104e6404334c272ecb3459dc604f85147089c88da73200b68543bc4473ab37c8c3e0
diff --git a/app-metrics/sql_exporter/files/sql_exporter.init.d b/app-metrics/sql_exporter/files/sql_exporter.init.d
new file mode 100644
index 00000000..e6f2d995
--- /dev/null
+++ b/app-metrics/sql_exporter/files/sql_exporter.init.d
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+name="sql_exporter daemon"
+description="SQL Exporter allows to run custom queries against a database"
+
+depend() {
+    need net
+}
+
+start() {
+    ebegin "Starting sql_exporter"
+    start-stop-daemon --start --chuid sql_exporter --exec /usr/bin/sql_exporter -- \
+        -config.file /etc/sql_exporter/sql_exporter.yml \
+        >> /var/log/sql_exporter/sql_exporter.log 2>&1 &
+    eend $?
+}
+
+stop() {
+    ebegin "Stopping sql_exporter"
+    start-stop-daemon --stop --quiet --exec /usr/bin/sql_exporter
+    eend $?
+}
diff --git a/app-metrics/sql_exporter/files/sql_exporter.yml b/app-metrics/sql_exporter/files/sql_exporter.yml
new file mode 100644
index 00000000..da288640
--- /dev/null
+++ b/app-metrics/sql_exporter/files/sql_exporter.yml
@@ -0,0 +1,47 @@
+---
+# jobs is a map of jobs, define any number but please keep the connection usage on the DBs in mind
+jobs:
+  # each job needs a unique name, it's used for logging and as an default label
+- name: "example"
+  # interval defined the pause between the runs of this job
+  interval: '5m'
+  # cron_schedule when to execute the job in the standard CRON syntax
+  # if specified, the interval is ignored
+  cron_schedule: "0 0 * * *"
+  # connections is an array of connection URLs
+  # each query will be executed on each connection
+  connections:
+  - 'postgres://postgres@localhost/postgres?sslmode=disable'
+  # startup_sql is an array of SQL statements
+  # each statements is executed once after connecting
+  startup_sql:
+  - 'SET lock_timeout = 1000'
+  - 'SET idle_in_transaction_session_timeout = 100'
+  # queries is a map of Metric/Query mappings
+  queries:
+    # name is prefied with sql_ and used as the metric name
+  - name: "running_queries"
+    # help is a requirement of the Prometheus default registry, currently not
+    # used by the Prometheus server. Important: Must be the same for all metrics
+    # with the same name!
+    help: "Number of running queries"
+    # Optional: Column to use as a metric timestamp source.
+    # Leave unset if it's not needed
+    timestamp: "created_at"
+    # Labels is an array of columns which will be used as additional labels.
+    # Must be the same for all metrics with the same name!
+    # All labels columns should be of type text, varchar or string
+    labels:
+      - "datname"
+      - "usename"
+    # Values is an array of columns used as metric values. All values should be
+    # of type float
+    values:
+      - "count"
+    # Query is the SQL query that is run unalterted on the each of the connections
+    # for this job
+    query:  |
+            SELECT now() as created_at, datname::text, usename::text, COUNT(*)::float AS count
+            FROM pg_stat_activity GROUP BY created_at, datname, usename;
+    # Consider the query failed if it returns zero rows
+    allow_zero_rows: false
diff --git a/app-metrics/sql_exporter/metadata.xml b/app-metrics/sql_exporter/metadata.xml
new file mode 100644
index 00000000..8172f896
--- /dev/null
+++ b/app-metrics/sql_exporter/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>ops@adjust.com</email>
+		<name>Adjust Ops</name>
+	</maintainer>
+	<upstream>
+		<remote-id type="github">justwatchcom/sql_exporter</remote-id>
+	</upstream>
+</pkgmetadata>
diff --git a/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild b/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
new file mode 100644
index 00000000..332b19d3
--- /dev/null
+++ b/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
@@ -0,0 +1,61 @@
+# Copyright 2024 @Leo
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit golang-build golang-vcs-snapshot
+
+DESCRIPTION="Prometheus exporter for SQL database metrics."
+HOMEPAGE="https://github.com/justwatchcom/sql_exporter"
+SRC_URI="https://github.com/justwatchcom/sql_exporter/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="doc"
+
+DEPEND="dev-lang/go
+        acct-group/sql_exporter
+        acct-user/sql_exporter"
+RDEPEND="acct-group/sql_exporter
+         acct-user/sql_exporter"
+EGO_PN="github.com/justwatchcom/sql_exporter"
+
+src_prepare() {
+    default
+    cd "${S}" || die
+    export GO111MODULE=auto
+}
+
+src_compile() {
+    export GOPATH="${S}"
+    cd "${S}/src/${EGO_PN}" || die
+    echo "compiling from $(pwd)" || die
+    go build -o "${S}/bin/sql_exporter" || die "Failed to build sql_exporter"
+}
+
+src_install() {
+    # Create user and group
+    enewgroup sql_exporter
+    enewuser sql_exporter -1 -1 /var/log/sql_exporter sql_exporter
+
+    dobin "${S}/bin/sql_exporter" || die
+    newinitd "${FILESDIR}/sql_exporter.init.d" sql_exporter || die
+    exeinto /etc/init.d
+    newexe "${FILESDIR}/sql_exporter.init.d" sql_exporter || die
+    dosym /etc/init.d/sql_exporter /etc/runlevels/default/sql_exporter || die
+
+    insinto /etc/sql_exporter
+    doins "${FILESDIR}/sql_exporter.yml"
+
+    # Create log directory and file
+    if ! dodir /var/log/sql_exporter; then
+        die "Failed to create log directory"
+    fi
+    newins /dev/null sql_exporter.log || die "Failed to create log file"
+}
+
+src_test() {
+    cd "${S}/src/${EGO_PN}" || die
+    go test -v ./... || die "Tests failed"
+}

From 626a3b50277677abfef4075770685fd009aae20a Mon Sep 17 00:00:00 2001
From: Patrice Clement <patrice.clement@adjust.com>
Date: Thu, 11 Apr 2024 11:13:04 +0200
Subject: [PATCH 2/4] app-metrics/sql_exporter: improve init script

---
 .../sql_exporter/files/sql_exporter.init.d    | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/app-metrics/sql_exporter/files/sql_exporter.init.d b/app-metrics/sql_exporter/files/sql_exporter.init.d
index e6f2d995..88ebac4e 100644
--- a/app-metrics/sql_exporter/files/sql_exporter.init.d
+++ b/app-metrics/sql_exporter/files/sql_exporter.init.d
@@ -4,21 +4,12 @@
 
 name="sql_exporter daemon"
 description="SQL Exporter allows to run custom queries against a database"
+command="/usr/bin/sql_exporter"
+command_args="-config.file /etc/sql_exporter/sql_exporter.yml"
+start_stop_daemon_args="--user sql_exporter"
+output_log="/var/log/sql_exporter/sql_exporter.log"
+error_log="/var/log/sql_exporter/sql_exporter.log"
 
 depend() {
     need net
 }
-
-start() {
-    ebegin "Starting sql_exporter"
-    start-stop-daemon --start --chuid sql_exporter --exec /usr/bin/sql_exporter -- \
-        -config.file /etc/sql_exporter/sql_exporter.yml \
-        >> /var/log/sql_exporter/sql_exporter.log 2>&1 &
-    eend $?
-}
-
-stop() {
-    ebegin "Stopping sql_exporter"
-    start-stop-daemon --stop --quiet --exec /usr/bin/sql_exporter
-    eend $?
-}

From b5857ab778aa09346a769de240b67958cd9639e1 Mon Sep 17 00:00:00 2001
From: Patrice Clement <patrice.clement@adjust.com>
Date: Thu, 11 Apr 2024 11:19:54 +0200
Subject: [PATCH 3/4] app-metrics/sql_exporter: rework ebuild

---
 .../sql_exporter/sql_exporter-0.5.3.ebuild    | 63 +++++++++----------
 1 file changed, 29 insertions(+), 34 deletions(-)

diff --git a/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild b/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
index 332b19d3..8a3cf388 100644
--- a/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
+++ b/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
@@ -14,48 +14,43 @@ SLOT="0"
 KEYWORDS="~amd64"
 IUSE="doc"
 
-DEPEND="dev-lang/go
-        acct-group/sql_exporter
-        acct-user/sql_exporter"
-RDEPEND="acct-group/sql_exporter
-         acct-user/sql_exporter"
+DEPEND="
+	dev-lang/go
+	acct-group/sql_exporter
+	acct-user/sql_exporter"
+
+RDEPEND="
+	${DEPEND}"
+
 EGO_PN="github.com/justwatchcom/sql_exporter"
 
 src_prepare() {
-    default
-    cd "${S}" || die
-    export GO111MODULE=auto
+	default
+	cd "${S}" || die
+	export GO111MODULE=auto
 }
 
 src_compile() {
-    export GOPATH="${S}"
-    cd "${S}/src/${EGO_PN}" || die
-    echo "compiling from $(pwd)" || die
-    go build -o "${S}/bin/sql_exporter" || die "Failed to build sql_exporter"
+	export GOPATH="${S}"
+	cd "${S}/src/${EGO_PN}" || die
+	echo "compiling from $(pwd)" || die
+	go build -o "${S}/bin/sql_exporter" || die "Failed to build sql_exporter"
 }
 
-src_install() {
-    # Create user and group
-    enewgroup sql_exporter
-    enewuser sql_exporter -1 -1 /var/log/sql_exporter sql_exporter
-
-    dobin "${S}/bin/sql_exporter" || die
-    newinitd "${FILESDIR}/sql_exporter.init.d" sql_exporter || die
-    exeinto /etc/init.d
-    newexe "${FILESDIR}/sql_exporter.init.d" sql_exporter || die
-    dosym /etc/init.d/sql_exporter /etc/runlevels/default/sql_exporter || die
-
-    insinto /etc/sql_exporter
-    doins "${FILESDIR}/sql_exporter.yml"
-
-    # Create log directory and file
-    if ! dodir /var/log/sql_exporter; then
-        die "Failed to create log directory"
-    fi
-    newins /dev/null sql_exporter.log || die "Failed to create log file"
+src_test() {
+	cd "${S}/src/${EGO_PN}" || die
+	go test -v ./... || die "Tests failed"
 }
 
-src_test() {
-    cd "${S}/src/${EGO_PN}" || die
-    go test -v ./... || die "Tests failed"
+src_install() {
+	dobin "${S}/bin/sql_exporter"
+	newinitd "${FILESDIR}/sql_exporter.init.d" sql_exporter
+	dosym /etc/init.d/sql_exporter /etc/runlevels/default/sql_exporter || die
+
+	insinto /etc/sql_exporter
+	doins "${FILESDIR}/sql_exporter.yml"
+
+	# Create log directory and file
+	dodir /var/log/sql_exporter
+	touch "${ED}"/var/log/sql_exporter/sql_exporter.log || die "failed to create log file"
 }

From 24d22e48b78cad993546c505bfe1128a7ff251f8 Mon Sep 17 00:00:00 2001
From: leomuso <leonardo.munoz@adjust.com>
Date: Tue, 16 Apr 2024 12:23:12 +0200
Subject: [PATCH 4/4] sql_exporter: adding package plus config, user and group

---
 .../sql_exporter/files/sql_exporter.init.d    |  2 +-
 .../sql_exporter/files/sql_exporter.yml       |  8 ++---
 .../sql_exporter/sql_exporter-0.5.3.ebuild    | 31 ++++++++++---------
 3 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/app-metrics/sql_exporter/files/sql_exporter.init.d b/app-metrics/sql_exporter/files/sql_exporter.init.d
index 88ebac4e..a0ae4141 100644
--- a/app-metrics/sql_exporter/files/sql_exporter.init.d
+++ b/app-metrics/sql_exporter/files/sql_exporter.init.d
@@ -6,9 +6,9 @@ name="sql_exporter daemon"
 description="SQL Exporter allows to run custom queries against a database"
 command="/usr/bin/sql_exporter"
 command_args="-config.file /etc/sql_exporter/sql_exporter.yml"
-start_stop_daemon_args="--user sql_exporter"
 output_log="/var/log/sql_exporter/sql_exporter.log"
 error_log="/var/log/sql_exporter/sql_exporter.log"
+start_stop_daemon_args="--background --user sql_exporter"
 
 depend() {
     need net
diff --git a/app-metrics/sql_exporter/files/sql_exporter.yml b/app-metrics/sql_exporter/files/sql_exporter.yml
index da288640..f07ddce9 100644
--- a/app-metrics/sql_exporter/files/sql_exporter.yml
+++ b/app-metrics/sql_exporter/files/sql_exporter.yml
@@ -2,16 +2,16 @@
 # jobs is a map of jobs, define any number but please keep the connection usage on the DBs in mind
 jobs:
   # each job needs a unique name, it's used for logging and as an default label
-- name: "example"
+- name: "postgres"
   # interval defined the pause between the runs of this job
-  interval: '5m'
+  interval: '1m'
   # cron_schedule when to execute the job in the standard CRON syntax
   # if specified, the interval is ignored
-  cron_schedule: "0 0 * * *"
+  #cron_schedule: "0 0 * * *"
   # connections is an array of connection URLs
   # each query will be executed on each connection
   connections:
-  - 'postgres://postgres@localhost/postgres?sslmode=disable'
+  - 'postgres://sql_exporter@/?host=/run/postgresql&dbname=postgres&sslmode=disable'
   # startup_sql is an array of SQL statements
   # each statements is executed once after connecting
   startup_sql:
diff --git a/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild b/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
index 8a3cf388..f1bba514 100644
--- a/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
+++ b/app-metrics/sql_exporter/sql_exporter-0.5.3.ebuild
@@ -26,31 +26,34 @@ EGO_PN="github.com/justwatchcom/sql_exporter"
 
 src_prepare() {
 	default
-	cd "${S}" || die
+	cd "${S}"
 	export GO111MODULE=auto
 }
 
 src_compile() {
 	export GOPATH="${S}"
-	cd "${S}/src/${EGO_PN}" || die
-	echo "compiling from $(pwd)" || die
-	go build -o "${S}/bin/sql_exporter" || die "Failed to build sql_exporter"
+	cd "${S}/src/${EGO_PN}"
+	echo "compiling from $(pwd)"
+	go build -o "${S}/bin/sql_exporter"
 }
 
 src_test() {
-	cd "${S}/src/${EGO_PN}" || die
-	go test -v ./... || die "Tests failed"
+	cd "${S}/src/${EGO_PN}"
+	go test -v ./... 
 }
 
 src_install() {
-	dobin "${S}/bin/sql_exporter"
-	newinitd "${FILESDIR}/sql_exporter.init.d" sql_exporter
-	dosym /etc/init.d/sql_exporter /etc/runlevels/default/sql_exporter || die
+    dobin "${S}/bin/sql_exporter"
+    newinitd "${FILESDIR}/sql_exporter.init.d" sql_exporter
+    dosym /etc/init.d/sql_exporter /etc/runlevels/default/sql_exporter
 
-	insinto /etc/sql_exporter
-	doins "${FILESDIR}/sql_exporter.yml"
+    insinto /etc/sql_exporter
+    doins "${FILESDIR}/sql_exporter.yml"
 
-	# Create log directory and file
-	dodir /var/log/sql_exporter
-	touch "${ED}"/var/log/sql_exporter/sql_exporter.log || die "failed to create log file"
+    # Create log directory and file
+    dodir /var/log/sql_exporter
+    touch "${ED}"/var/log/sql_exporter/sql_exporter.log
+
+    # Change ownership of the log file to sql_exporter
+    chown sql_exporter:sql_exporter "${ED}"/var/log/sql_exporter/sql_exporter.log
 }