git: cbc634d294a2 - main - net-mgmt/prometheus3: Add new port

From: Danilo Egea Gondolfo <danilo_at_FreeBSD.org>
Date: Sun, 20 Apr 2025 11:30:05 UTC
The branch main has been updated by danilo:

URL: https://cgit.FreeBSD.org/ports/commit/?id=cbc634d294a29f149b500d5a81b78efe99aeaf9d

commit cbc634d294a29f149b500d5a81b78efe99aeaf9d
Author:     Danilo Egea Gondolfo <danilo@FreeBSD.org>
AuthorDate: 2025-04-20 11:18:44 +0000
Commit:     Danilo Egea Gondolfo <danilo@FreeBSD.org>
CommitDate: 2025-04-20 11:25:35 +0000

    net-mgmt/prometheus3: Add new port
    
    Add Prometheus 3.3.0, released on 2025-04-15, to the Ports tree.
    
    Prometheus is a systems and service monitoring system.
    
    This port is heavily based on net-mgmt/prometheus2.
    
    Release notes:
    https://github.com/prometheus/prometheus/releases/tag/v3.3.0
    
    Migration guide:
    https://prometheus.io/docs/prometheus/latest/migration/
---
 net-mgmt/Makefile                        |   1 +
 net-mgmt/prometheus3/Makefile            |  79 ++++++++++++++++
 net-mgmt/prometheus3/distinfo            |   7 ++
 net-mgmt/prometheus3/files/prometheus.in | 151 +++++++++++++++++++++++++++++++
 net-mgmt/prometheus3/pkg-descr           |  17 ++++
 net-mgmt/prometheus3/pkg-plist           |  34 +++++++
 6 files changed, 289 insertions(+)

diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile
index e65bd85147be..e18442d75df0 100644
--- a/net-mgmt/Makefile
+++ b/net-mgmt/Makefile
@@ -312,6 +312,7 @@
     SUBDIR += prometheus-collectd-exporter
     SUBDIR += prometheus1
     SUBDIR += prometheus2
+    SUBDIR += prometheus3
     SUBDIR += promscale
     SUBDIR += promxy
     SUBDIR += pushgateway
diff --git a/net-mgmt/prometheus3/Makefile b/net-mgmt/prometheus3/Makefile
new file mode 100644
index 000000000000..55b836c6b8ea
--- /dev/null
+++ b/net-mgmt/prometheus3/Makefile
@@ -0,0 +1,79 @@
+PORTNAME=	prometheus
+DISTVERSIONPREFIX=	v
+DISTVERSION=	3.3.0
+CATEGORIES=	net-mgmt
+MASTER_SITES=	https://raw.githubusercontent.com/${GH_ACCOUNT}/${GH_PROJECT}/${DISTVERSIONFULL}/:gomod \
+		https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/releases/download/${DISTVERSIONFULL}/:ui
+PKGNAMESUFFIX=	3
+DISTFILES=	go.mod:gomod ${PORTNAME}-web-ui-${DISTVERSION}.tar.gz:ui
+
+MAINTAINER=	danilo@FreeBSD.org
+COMMENT=	Systems monitoring and alerting toolkit
+WWW=		https://prometheus.io/
+
+LICENSE=	APACHE20
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+PATCH_DEPENDS=	bash:shells/bash
+
+USES=		cpe go:1.23,modules
+
+CONFLICTS_INSTALL=	prometheus1 prometheus
+
+USE_GITHUB=	yes
+USE_RC_SUBR=	prometheus
+
+GO_MODULE=	github.com/prometheus/prometheus
+GO_TARGET=	./cmd/prometheus ./cmd/promtool
+GO_BUILDFLAGS=	-a -v -ldflags "${LD_FLAG_STRING}" -tags netgo,builtinassets
+
+SUB_LIST+=	PROMETHEUS_CONSOLE_LIBRARIES_DIR=${PROMETHEUS_CONSOLE_LIBRARIES_DIR} \
+		PROMETHEUS_CONSOLES_DIR=${PROMETHEUS_CONSOLES_DIR} \
+		PROMETHEUS_DB_DIR=${PROMETHEUS_DB_DIR} \
+		PROMETHEUS_GROUP=${PROMETHEUS_GROUP} \
+		PROMETHEUS_USER=${PROMETHEUS_USER}
+
+USERS=		${PROMETHEUS_USER}
+GROUPS=		${PROMETHEUS_GROUP}
+
+PLIST_SUB+=	PROMETHEUS_CONSOLE_LIBRARIES_DIR=${PROMETHEUS_CONSOLE_LIBRARIES_DIR} \
+		PROMETHEUS_CONSOLES_DIR=${PROMETHEUS_CONSOLES_DIR} \
+		PROMETHEUS_GROUP=${PROMETHEUS_GROUP} \
+		PROMETHEUS_USER=${PROMETHEUS_USER}
+
+OPTIONS_DEFINE=	DOCS
+
+BUILD_USER?=		${USER}
+LD_FLAG_STRING=		-s ${LD_FLAG_X_PREFIX}.Version=${PORTVERSION} \
+			${LD_FLAG_X_PREFIX}.Revision=${PORTREVISION} \
+			${LD_FLAG_X_PREFIX}.Branch=release-${PORTVERSION:R} \
+			${LD_FLAG_X_PREFIX}.BuildUser=${BUILD_USER} \
+			${LD_FLAG_X_PREFIX}.BuildDate=$$(date +'%Y%m%d-%H:%M:%S')
+LD_FLAG_X_PREFIX=	-X github.com/prometheus/common/version
+
+PROMETHEUS_CONSOLES_DIR?=		${DATADIR}/consoles
+PROMETHEUS_CONSOLE_LIBRARIES_DIR?=	${DATADIR}/console_libraries
+PROMETHEUS_DB_DIR?=			/var/db/${PORTNAME}
+PROMETHEUS_GROUP?=			prometheus
+PROMETHEUS_USER?=			prometheus
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+	@${RM} -rf ${WRKSRC}/web/ui/static
+	@${CP} -a ${WRKDIR}/static ${WRKSRC}/web/ui/static
+	@( cd ${WRKSRC} && ${WRKSRC}/scripts/compress_assets.sh )
+
+post-install:
+	${MKDIR} ${STAGEDIR}${DESTDIR}${PROMETHEUS_CONSOLES_DIR}
+	${MKDIR} ${STAGEDIR}${DESTDIR}${PROMETHEUS_CONSOLE_LIBRARIES_DIR}
+	${INSTALL_DATA} \
+		${WRKSRC}/documentation/examples/prometheus.yml \
+		${STAGEDIR}${LOCALBASE}/etc/prometheus.yml.sample
+
+post-install-DOCS-on:
+	@${MKDIR} ${STAGEDIR}${DOCSDIR}
+	@( cd ${WRKSRC}/docs \
+		&& ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} )
+
+.include <bsd.port.post.mk>
diff --git a/net-mgmt/prometheus3/distinfo b/net-mgmt/prometheus3/distinfo
new file mode 100644
index 000000000000..bbb6926a2396
--- /dev/null
+++ b/net-mgmt/prometheus3/distinfo
@@ -0,0 +1,7 @@
+TIMESTAMP = 1745143828
+SHA256 (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/go.mod) = d10eb1ccf4285c63642ef10f2c811073b8945fdc8bdb0fc7a668de4aaf85ff58
+SIZE (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/go.mod) = 10745
+SHA256 (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-web-ui-3.3.0.tar.gz) = 845f1e2c869e7f8679646ca3a97d56c9dfc30f8064e7bd4e0d0d756fe9c74d30
+SIZE (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-web-ui-3.3.0.tar.gz) = 3487058
+SHA256 (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-prometheus-v3.3.0_GH0.tar.gz) = 5562c10a41781f1378cf962a117e7d70a2cfc6e4be7f4cada2474dd534f6512a
+SIZE (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-prometheus-v3.3.0_GH0.tar.gz) = 5045708
diff --git a/net-mgmt/prometheus3/files/prometheus.in b/net-mgmt/prometheus3/files/prometheus.in
new file mode 100644
index 000000000000..1e7bcac72274
--- /dev/null
+++ b/net-mgmt/prometheus3/files/prometheus.in
@@ -0,0 +1,151 @@
+#!/bin/sh
+
+# PROVIDE: prometheus
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# prometheus_enable (bool)
+#     Set it to YES to enable prometheus
+#     Set to NO by default
+# prometheus_user (string)
+#     Set user that prometheus will run under
+#     Default is "%%PROMETHEUS_USER%%"
+# prometheus_group (string)
+#     Set group that own prometheus files
+#     Default is "%%PROMETHEUS_GROUP%%"
+# prometheus_config (string)
+#     Set full path to config file
+#     Default is "%%PREFIX%%/etc/prometheus.yml"
+# prometheus_pidfile (string)
+#     Set full path to pid file
+#     Default is "/var/run/prometheus.pid"
+# prometheus_syslog_output_enable (bool)
+#     Set it to NO to disable syslog output
+#     Set to YES by default
+# prometheus_syslog_output_tag (str)
+#     Set syslog tag if syslog enabled
+#     Default is "prometheus"
+# prometheus_syslog_output_priority (string)
+#     Set syslog priority if syslog enabled
+#     Default is "info"
+# prometheus_syslog_output_facility (string)
+#     Set syslog facility if syslog enabled
+#     Default is "daemon"
+# prometheus_agent_mode (bool)
+#     Set to "YES" to enable Prometheus Agent Mode
+#     Default is "NO"
+# prometheus_consoles (string)
+#     Set dir that contains Prometheus consoles
+#     Default is "%%PROMETHEUS_CONSOLES_DIR%%"
+# prometheus_console_libraries (string)
+#     Set dir containing Prometheus console libraries
+#     Default is "%%PROMETHEUS_CONSOLE_LIBRARIES_DIR%%"
+# prometheus_data_dir (string)
+#     Set dir to run prometheus in
+#     Default is "%%PROMETHEUS_DB_DIR%%"
+# prometheus_loglevel (string)
+#     Set one of [debug, info, warn, error]
+#     Default is "info"
+# prometheus_logformat (string)
+#     Set one of [logfmt, json]
+#     Default is "logfmt"
+# prometheus_env (string)
+#     Set environment variables used with prometheus
+#     Default is ""
+# prometheus_args (string)
+#     Set additional command line arguments
+#     Default is ""
+
+. /etc/rc.subr
+
+name=prometheus
+rcvar=prometheus_enable
+
+load_rc_config $name
+
+: ${prometheus_enable:="NO"}
+: ${prometheus_user:="%%PROMETHEUS_USER%%"}
+: ${prometheus_group:="%%PROMETHEUS_GROUP%%"}
+: ${prometheus_config:="%%PREFIX%%/etc/prometheus.yml"}
+: ${prometheus_pidfile:="/var/run/prometheus.pid"}
+: ${prometheus_syslog_output_enable:="YES"}
+: ${prometheus_agent_mode:="NO"}
+: ${prometheus_consoles_dir:="%%PROMETHEUS_CONSOLES_DIR%%"}
+: ${prometheus_console_libraries_dir:="%%PROMETHEUS_CONSOLE_LIBRARIES_DIR%%"}
+: ${prometheus_data_dir:="%%PROMETHEUS_DB_DIR%%"}
+: ${prometheus_loglevel:="info"}
+: ${prometheus_logformat:="logfmt"}
+
+if checkyesno prometheus_syslog_output_enable; then
+	if [ -n "${prometheus_syslog_output_tag}" ]; then
+		prometheus_syslog_output_flags="-T ${prometheus_syslog_output_tag}"
+	else
+		prometheus_syslog_output_flags="-T ${name}"
+	fi
+	if [ -n "${prometheus_syslog_output_priority}" ]; then
+		prometheus_syslog_output_flags="${prometheus_syslog_output_flags} -s ${prometheus_syslog_output_priority}"
+	fi
+	if [ -n "${prometheus_syslog_output_facility}" ]; then
+		prometheus_syslog_output_flags="${prometheus_syslog_output_flags} -l ${prometheus_syslog_output_facility}"
+	fi
+fi
+
+if checkyesno prometheus_agent_mode; then
+    prometheus_storage_flags="--agent --storage.agent.path=${prometheus_data_dir}"
+else
+    prometheus_storage_flags="--storage.tsdb.path=${prometheus_data_dir}"
+fi
+
+pidfile="${prometheus_pidfile}"
+required_files="${prometheus_config}"
+
+procname="%%PREFIX%%/bin/prometheus"
+command="/usr/sbin/daemon"
+command_args="-f ${prometheus_syslog_output_flags} -p ${pidfile} -t ${name} \
+	/usr/bin/env ${prometheus_env} ${procname} \
+	--config.file=${prometheus_config} \
+	--web.console.templates=${prometheus_consoles_dir} \
+	--web.console.libraries=${prometheus_console_libraries_dir} \
+	--log.level=${prometheus_loglevel} \
+	--log.format=${prometheus_logformat} \
+	${prometheus_storage_flags} \
+	${prometheus_args}"
+
+start_precmd="prometheus_start_precmd"
+extra_commands="reload"
+
+# This checks for the existence of a prometheus 1.x data at the
+# $prometheus_data_dir location. If one is found, Prometheus will not start.
+prometheus_check_data_version()
+{
+	local _version
+	local _version_file="${prometheus_data_dir}/VERSION"
+
+	if [ -f "${_version_file}" ]; then
+		read _version < "${_version_file}"
+
+		if [ "${_version}" = "1" ]; then
+			return 1
+		fi
+	fi
+}
+
+prometheus_start_precmd()
+{
+	if [ ! -e "${pidfile}" ]; then
+		install -m 0600 -o "${prometheus_user}" -g "${prometheus_group}" /dev/null "${pidfile}"
+	fi
+	if [ ! -d "${prometheus_data_dir}" ]; then
+		install -d -m 750 -o "${prometheus_user}" -g "${prometheus_group}" "${prometheus_data_dir}"
+	else
+		# Ensure it's not a prometheus 1.x data
+		if [ ! prometheus_check_data_version ]; then
+			err 1 "Found \"net-mgmt/prometheus1\" data, refusing to start."
+		fi
+	fi
+}
+
+run_rc_command "$1"
diff --git a/net-mgmt/prometheus3/pkg-descr b/net-mgmt/prometheus3/pkg-descr
new file mode 100644
index 000000000000..5c33b0261b8b
--- /dev/null
+++ b/net-mgmt/prometheus3/pkg-descr
@@ -0,0 +1,17 @@
+Prometheus is a systems and service monitoring system. It collects metrics
+from configured targets at given intervals, evaluates rule expressions,
+displays the results, and can trigger alerts if some condition is observed
+to be true.
+
+Prometheus' main distinguishing features as compared to other monitoring
+systems are:
+
+- a multi-dimensional data model (timeseries defined by metric name and
+  set of key/value dimensions)
+- a flexible query language to leverage this dimensionality
+- no dependency on distributed storage; single server nodes are autonomous
+- timeseries collection happens via a pull model over HTTP
+- pushing timeseries is supported via an intermediary gateway
+- targets are discovered via service discovery or static configuration
+- multiple modes of graphing and dashboarding support
+- support for hierarchical and horizontal federation
diff --git a/net-mgmt/prometheus3/pkg-plist b/net-mgmt/prometheus3/pkg-plist
new file mode 100644
index 000000000000..a5a5f82c33c0
--- /dev/null
+++ b/net-mgmt/prometheus3/pkg-plist
@@ -0,0 +1,34 @@
+bin/prometheus
+bin/promtool
+%%PORTDOCS%%%%DOCSDIR%%/command-line/index.md
+%%PORTDOCS%%%%DOCSDIR%%/command-line/%%PROMETHEUS_USER%%.md
+%%PORTDOCS%%%%DOCSDIR%%/command-line/promtool.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/alerting_rules.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/configuration.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/https.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/index.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/recording_rules.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/template_examples.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/template_reference.md
+%%PORTDOCS%%%%DOCSDIR%%/configuration/unit_testing_rules.md
+%%PORTDOCS%%%%DOCSDIR%%/feature_flags.md
+%%PORTDOCS%%%%DOCSDIR%%/federation.md
+%%PORTDOCS%%%%DOCSDIR%%/getting_started.md
+%%PORTDOCS%%%%DOCSDIR%%/http_sd.md
+%%PORTDOCS%%%%DOCSDIR%%/images/remote_integrations.png
+%%PORTDOCS%%%%DOCSDIR%%/index.md
+%%PORTDOCS%%%%DOCSDIR%%/installation.md
+%%PORTDOCS%%%%DOCSDIR%%/management_api.md
+%%PORTDOCS%%%%DOCSDIR%%/migration.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/api.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/basics.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/examples.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/functions.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/index.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/operators.md
+%%PORTDOCS%%%%DOCSDIR%%/querying/remote_read_api.md
+%%PORTDOCS%%%%DOCSDIR%%/stability.md
+%%PORTDOCS%%%%DOCSDIR%%/storage.md
+@sample etc/prometheus.yml.sample
+@dir %%DATADIR%%/console_libraries
+@dir %%DATADIR%%/consoles