From 98912df8268de76a70cc7f498685c8c697cdad1e Mon Sep 17 00:00:00 2001
From: Pavel Timofeev <timp87@gmail.com>
Date: Fri, 27 Jan 2023 21:05:53 -0700
Subject: [PATCH] New net-mgmt/promxy port

---
 GIDs                            |  2 +-
 UIDs                            |  2 +-
 net-mgmt/promxy/Makefile        | 35 +++++++++++++++
 net-mgmt/promxy/distinfo        |  5 +++
 net-mgmt/promxy/files/promxy.in | 77 +++++++++++++++++++++++++++++++++
 net-mgmt/promxy/pkg-descr       |  5 +++
 net-mgmt/promxy/pkg-plist       |  5 +++
 7 files changed, 129 insertions(+), 2 deletions(-)
 create mode 100644 net-mgmt/promxy/Makefile
 create mode 100644 net-mgmt/promxy/distinfo
 create mode 100644 net-mgmt/promxy/files/promxy.in
 create mode 100644 net-mgmt/promxy/pkg-descr
 create mode 100644 net-mgmt/promxy/pkg-plist

diff --git a/GIDs b/GIDs
index 23d9c2564c1b..53658dd40de4 100644
--- a/GIDs
+++ b/GIDs
@@ -421,7 +421,7 @@ fiche:*:477:
 prometheus:*:478:
 alertmanager:*:479:
 datadog:*:480:
-# free: 481
+promxy:*:481:
 # free: 482
 # free: 483
 # free: 484
diff --git a/UIDs b/UIDs
index b41b0f6ccb9c..8ba69dc29a08 100644
--- a/UIDs
+++ b/UIDs
@@ -426,7 +426,7 @@ fiche:*:477:477::0:0:fiche Daemon:/usr/local/www/fiche:/usr/sbin/nologin
 prometheus:*:478:478::0:0:Prometheus Daemon:/var/tmp/prometheus:/usr/sbin/nologin
 alertmanager:*:479:479::0:0:Alertmanager Daemon:/var/tmp/alertmanager:/usr/sbin/nologin
 datadog:*:480:480::0:0:DataDog Agent:/var/db/datadog:/usr/sbin/nologin
-# free: 481
+promxy:*:481:481::0:0:Promxy Daemon:/nonexistent:/usr/sbin/nologin
 # free: 482
 # free: 483
 # free: 484
diff --git a/net-mgmt/promxy/Makefile b/net-mgmt/promxy/Makefile
new file mode 100644
index 000000000000..8e92400e6284
--- /dev/null
+++ b/net-mgmt/promxy/Makefile
@@ -0,0 +1,35 @@
+PORTNAME=	promxy
+DISTVERSIONPREFIX=	v
+DISTVERSION=	0.0.75
+CATEGORIES=	net-mgmt
+
+MAINTAINER=	timp87@gmail.com
+COMMENT=	Aggregating proxy to enable HA prometheus
+WWW=		https://github.com/jacksontj/promxy
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+USES=		go:modules
+GO_MODULE=	github.com/jacksontj/promxy
+GO_TARGET=	./cmd/promxy
+GO_BUILDFLAGS=	-ldflags="-X main.Version=v${PORTVERSION}"
+
+USE_RC_SUBR=	promxy
+
+USERS=		promxy
+GROUPS=		promxy
+
+SUB_LIST=	USERS=${USERS} \
+		GROUPS=${GROUPS}
+
+post-patch:
+	@${REINPLACE_CMD} 's|"\*rule"|"${ETCDIR}/*rule"|' ${WRKSRC}/cmd/promxy/config.yaml
+
+post-install:
+	${MKDIR} ${STAGEDIR}${ETCDIR}
+.for f in alert_example.rule config.yaml recording_example.rule
+	${INSTALL_DATA} ${WRKSRC}/cmd/promxy/${f} ${STAGEDIR}${ETCDIR}/${f}.sample
+.endfor
+
+.include <bsd.port.mk>
diff --git a/net-mgmt/promxy/distinfo b/net-mgmt/promxy/distinfo
new file mode 100644
index 000000000000..6fd475e397ce
--- /dev/null
+++ b/net-mgmt/promxy/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1674764410
+SHA256 (go/net-mgmt_promxy/promxy-v0.0.75/v0.0.75.mod) = 8e828d987d4cb983c02e3d21731d79048c2ebcdf66d6de7624d10a68277f088c
+SIZE (go/net-mgmt_promxy/promxy-v0.0.75/v0.0.75.mod) = 1127
+SHA256 (go/net-mgmt_promxy/promxy-v0.0.75/v0.0.75.zip) = 802e4d5894891000e1abf3b5c872a2e8884ea347b2a94563ead27aa15632187e
+SIZE (go/net-mgmt_promxy/promxy-v0.0.75/v0.0.75.zip) = 201553
diff --git a/net-mgmt/promxy/files/promxy.in b/net-mgmt/promxy/files/promxy.in
new file mode 100644
index 000000000000..b9adc225918c
--- /dev/null
+++ b/net-mgmt/promxy/files/promxy.in
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# PROVIDE: promxy
+# REQUIRE: NETWORKING SERVERS DAEMON
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf or /etc/rc.conf.local
+# to enable this service:
+#
+# promxy_enable:			Enable Promxy
+#					Default: NO
+# promxy_user:				Username to run Promxy
+#					Default: %%USERS%%
+# promxy_config:			Configuration file to run Promxy
+#					Default: %%ETCDIR%%/config.yaml
+# promxy_pidfile:			Full path of the Promxy process PID file
+#					Default: /var/run/promxy.pid
+# promxy_remediate_enable:		Enable auto-restart if Promxy's been terminated
+#					Default: NO
+# promxy_remediate_delay:		Auto-restart delay if auto-restart enabled
+#					Default: 5
+# promxy_syslog_output_enable:		Enable syslog output.
+#					Default: YES
+# promxy_syslog_output_tag:		Syslog tag if syslog output enabled.
+#					Default: promxy
+# promxy_syslog_output_priority:	Syslog priority if syslog output enabled.
+#					Default: info
+# promxy_syslog_output_facility:	Syslog facility if syslog output enabled.
+#					Default: daemon
+
+. /etc/rc.subr
+
+name=promxy
+rcvar=promxy_enable
+
+load_rc_config "${name}"
+
+: ${promxy_enable:="NO"}
+: ${promxy_user:="%%USERS%%"}
+: ${promxy_config:="%%ETCDIR%%/config.yaml"}
+: ${promxy_pidfile:=/var/run/promxy.pid}
+: ${promxy_remediate_enable:="NO"}
+: ${promxy_remediate_delay="5"}
+: ${promxy_syslog_output_enable:="YES"}
+: ${promxy_syslog_output_tag:="${name}"}
+: ${promxy_syslog_output_priority:="info"}
+: ${promxy_syslog_output_facility:="daemon"}
+
+if checkyesno promxy_syslog_output_enable; then
+	if [ -n "${promxy_syslog_output_tag}" ]; then
+		promxy_syslog_output_flags="-T ${promxy_syslog_output_tag}"
+	fi
+	if [ -n "${promxy_syslog_output_priority}" ]; then
+		promxy_syslog_output_flags="${promxy_syslog_output_flags} -s ${promxy_syslog_output_priority}"
+	fi
+	if [ -n "${promxy_syslog_output_facility}" ]; then
+		promxy_syslog_output_flags="${promxy_syslog_output_flags} -l ${promxy_syslog_output_facility}"
+	fi
+fi
+
+if checkyesno promxy_remediate_enable; then
+	if [ -n "${promxy_remediate_delay}" ]; then
+		promxy_remediate_flags="-R ${promxy_remediate_delay}"
+	fi
+fi
+
+pidfile="${promxy_pidfile}"
+required_files="${promxy_config}"
+
+promxy_bin="%%PREFIX%%/bin/promxy"
+command="/usr/sbin/daemon"
+command_args="-u ${promxy_user} ${promxy_remediate_flags} -f ${promxy_syslog_output_flags} -P ${pidfile} ${promxy_bin} --config=${promxy_config}"
+
+# Run daemon(8) as root
+unset promxy_user
+
+run_rc_command "$1"
diff --git a/net-mgmt/promxy/pkg-descr b/net-mgmt/promxy/pkg-descr
new file mode 100644
index 000000000000..8a15049bfbb3
--- /dev/null
+++ b/net-mgmt/promxy/pkg-descr
@@ -0,0 +1,5 @@
+Promxy is a prometheus proxy that makes many shards of prometheus appear as
+a single API endpoint to the user. This significantly simplifies operations
+and use of prometheus at scale (when you have more than one prometheus host).
+Promxy delivers this unified access endpoint without requiring any sidecars,
+custom-builds, or other changes to your prometheus infrastructure.
diff --git a/net-mgmt/promxy/pkg-plist b/net-mgmt/promxy/pkg-plist
new file mode 100644
index 000000000000..093ef7bc589f
--- /dev/null
+++ b/net-mgmt/promxy/pkg-plist
@@ -0,0 +1,5 @@
+bin/promxy
+@dir %%ETCDIR%%
+@sample %%ETCDIR%%/alert_example.rule.sample
+@sample %%ETCDIR%%/config.yaml.sample
+@sample %%ETCDIR%%/recording_example.rule.sample
-- 
2.39.1