git: 3dae89d81ed5 - main - net-mgmt/geom-exporter: new port

From: Alan Somers <asomers_at_FreeBSD.org>
Date: Wed, 22 May 2024 20:26:14 UTC
The branch main has been updated by asomers:

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

commit 3dae89d81ed53e92b56db78a4e41787f5f312934
Author:     Alan Somers <asomers@FreeBSD.org>
AuthorDate: 2024-04-18 21:59:26 +0000
Commit:     Alan Somers <asomers@FreeBSD.org>
CommitDate: 2024-05-22 20:26:03 +0000

    net-mgmt/geom-exporter: new port
    
    The geom-exporter exports libgeom statistics to Prometheus.  It provides
    basically the same information as net-mgmt/gstat-exporter, but more
    accurately since it bypasses gstat and accesses libgeom directly.
    
    PR:             278446
    Sponsored by:   Axcient
---
 net-mgmt/Makefile                             |   1 +
 net-mgmt/geom-exporter/Makefile               |  34 +++++
 net-mgmt/geom-exporter/Makefile.crates        | 101 +++++++++++++
 net-mgmt/geom-exporter/distinfo               | 205 ++++++++++++++++++++++++++
 net-mgmt/geom-exporter/files/geom_exporter.in |  48 ++++++
 net-mgmt/geom-exporter/pkg-descr              |   4 +
 6 files changed, 393 insertions(+)

diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile
index 8fafa1b8e6fc..7b8cb5763bb5 100644
--- a/net-mgmt/Makefile
+++ b/net-mgmt/Makefile
@@ -74,6 +74,7 @@
     SUBDIR += flowd
     SUBDIR += flowviewer
     SUBDIR += fprobe
+    SUBDIR += geom-exporter
     SUBDIR += gnu-ipcalc
     SUBDIR += gping
     SUBDIR += grepcidr
diff --git a/net-mgmt/geom-exporter/Makefile b/net-mgmt/geom-exporter/Makefile
new file mode 100644
index 000000000000..6ad65aedcc86
--- /dev/null
+++ b/net-mgmt/geom-exporter/Makefile
@@ -0,0 +1,34 @@
+PORTNAME=	geom-exporter
+DISTVERSION=	0.1.1
+CATEGORIES=	net-mgmt
+MASTER_SITES=	CRATESIO
+MASTER_SITE_SUBDIR=	freebsd-${PORTNAME}/${DISTVERSION}
+DISTNAME=	freebsd-${PORTNAME}-${DISTVERSIONFULL}
+DISTFILES=	${CARGO_DIST_SUBDIR}/${DISTNAME}${CARGO_CRATE_EXT}
+
+MAINTAINER=	asomers@FreeBSD.org
+COMMENT=	Prometheus exporter for GEOM statistics
+WWW=		https://github.com/asomers/gstat-rs
+
+LICENSE=	BSD2CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+# https://github.com/tikv/rust-prometheus/issues/315
+NOT_FOR_ARCHS=	powerpc
+NOT_FOR_ARCHS_REASON_powerpc=needs 64-bit atomics
+
+BUILD_DEPENDS=	llvm-config${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT}
+
+USES=		cargo
+USE_RC_SUBR=	geom_exporter
+
+SUB_LIST=	USER=nobody
+
+PLIST_FILES=	bin/${PORTNAME} \
+		share/man/man8/${PORTNAME}.8.gz
+
+post-install:
+	${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+	${INSTALL_MAN} ${WRKSRC}/doc/${PORTNAME}.8 ${STAGEDIR}${PREFIX}/share/man/man8
+
+.include <bsd.port.mk>
diff --git a/net-mgmt/geom-exporter/Makefile.crates b/net-mgmt/geom-exporter/Makefile.crates
new file mode 100644
index 000000000000..c12aec5fa808
--- /dev/null
+++ b/net-mgmt/geom-exporter/Makefile.crates
@@ -0,0 +1,101 @@
+CARGO_CRATES=	aho-corasick-1.1.2 \
+		anstream-0.6.5 \
+		anstyle-1.0.4 \
+		anstyle-parse-0.2.3 \
+		anstyle-query-1.0.2 \
+		anstyle-wincon-3.0.2 \
+		ascii-1.1.0 \
+		autocfg-1.1.0 \
+		bindgen-0.66.1 \
+		bitflags-1.3.2 \
+		bitflags-2.4.1 \
+		cexpr-0.6.0 \
+		cfg-if-1.0.0 \
+		chunked_transfer-1.5.0 \
+		clang-sys-1.6.1 \
+		clap-4.4.11 \
+		clap_builder-4.4.11 \
+		clap_derive-4.4.7 \
+		clap_lex-0.6.0 \
+		colorchoice-1.0.0 \
+		deranged-0.3.11 \
+		either-1.9.0 \
+		errno-0.3.8 \
+		fnv-1.0.7 \
+		form_urlencoded-1.2.1 \
+		freebsd-libgeom-0.3.0 \
+		freebsd-libgeom-sys-0.1.6 \
+		glob-0.3.1 \
+		heck-0.4.1 \
+		home-0.5.9 \
+		idna-0.5.0 \
+		itoa-1.0.11 \
+		lazy_static-1.4.0 \
+		lazycell-1.3.0 \
+		libc-0.2.151 \
+		libloading-0.7.4 \
+		linux-raw-sys-0.4.12 \
+		lock_api-0.4.11 \
+		log-0.4.20 \
+		memchr-2.6.4 \
+		minimal-lexical-0.2.1 \
+		nom-7.1.3 \
+		num-conv-0.1.0 \
+		once_cell-1.19.0 \
+		parking_lot-0.12.1 \
+		parking_lot_core-0.9.9 \
+		peeking_take_while-0.1.2 \
+		percent-encoding-2.3.1 \
+		powerfmt-0.2.0 \
+		prettyplease-0.2.15 \
+		proc-macro2-1.0.70 \
+		prometheus-0.13.3 \
+		prometheus_exporter-0.8.5 \
+		quote-1.0.33 \
+		redox_syscall-0.4.1 \
+		regex-1.10.2 \
+		regex-automata-0.4.3 \
+		regex-syntax-0.8.2 \
+		rustc-hash-1.1.0 \
+		rustix-0.38.28 \
+		scopeguard-1.2.0 \
+		serde-1.0.193 \
+		serde_derive-1.0.193 \
+		shlex-1.3.0 \
+		smallvec-1.11.2 \
+		strsim-0.10.0 \
+		syn-2.0.41 \
+		thiserror-1.0.51 \
+		thiserror-impl-1.0.51 \
+		time-0.3.36 \
+		time-core-0.1.2 \
+		time-macros-0.2.18 \
+		tiny_http-0.10.0 \
+		tinyvec-1.6.0 \
+		tinyvec_macros-0.1.1 \
+		unicode-bidi-0.3.15 \
+		unicode-ident-1.0.12 \
+		unicode-normalization-0.1.23 \
+		url-2.5.0 \
+		utf8parse-0.2.1 \
+		which-4.4.2 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-sys-0.52.0 \
+		windows-targets-0.48.5 \
+		windows-targets-0.52.0 \
+		windows_aarch64_gnullvm-0.48.5 \
+		windows_aarch64_gnullvm-0.52.0 \
+		windows_aarch64_msvc-0.48.5 \
+		windows_aarch64_msvc-0.52.0 \
+		windows_i686_gnu-0.48.5 \
+		windows_i686_gnu-0.52.0 \
+		windows_i686_msvc-0.48.5 \
+		windows_i686_msvc-0.52.0 \
+		windows_x86_64_gnu-0.48.5 \
+		windows_x86_64_gnu-0.52.0 \
+		windows_x86_64_gnullvm-0.48.5 \
+		windows_x86_64_gnullvm-0.52.0 \
+		windows_x86_64_msvc-0.48.5 \
+		windows_x86_64_msvc-0.52.0
diff --git a/net-mgmt/geom-exporter/distinfo b/net-mgmt/geom-exporter/distinfo
new file mode 100644
index 000000000000..0e6239765da0
--- /dev/null
+++ b/net-mgmt/geom-exporter/distinfo
@@ -0,0 +1,205 @@
+TIMESTAMP = 1713399184
+SHA256 (rust/crates/freebsd-geom-exporter-0.1.1.crate) = 80942558864c6c35883e95c514b960eb6b2afdc785ab95a1837b4bba3ee9e460
+SIZE (rust/crates/freebsd-geom-exporter-0.1.1.crate) = 11464
+SHA256 (rust/crates/aho-corasick-1.1.2.crate) = b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0
+SIZE (rust/crates/aho-corasick-1.1.2.crate) = 183136
+SHA256 (rust/crates/anstream-0.6.5.crate) = d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6
+SIZE (rust/crates/anstream-0.6.5.crate) = 30004
+SHA256 (rust/crates/anstyle-1.0.4.crate) = 7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87
+SIZE (rust/crates/anstyle-1.0.4.crate) = 13998
+SHA256 (rust/crates/anstyle-parse-0.2.3.crate) = c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c
+SIZE (rust/crates/anstyle-parse-0.2.3.crate) = 24699
+SHA256 (rust/crates/anstyle-query-1.0.2.crate) = e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648
+SIZE (rust/crates/anstyle-query-1.0.2.crate) = 8739
+SHA256 (rust/crates/anstyle-wincon-3.0.2.crate) = 1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7
+SIZE (rust/crates/anstyle-wincon-3.0.2.crate) = 11272
+SHA256 (rust/crates/ascii-1.1.0.crate) = d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16
+SIZE (rust/crates/ascii-1.1.0.crate) = 36075
+SHA256 (rust/crates/autocfg-1.1.0.crate) = d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa
+SIZE (rust/crates/autocfg-1.1.0.crate) = 13272
+SHA256 (rust/crates/bindgen-0.66.1.crate) = f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7
+SIZE (rust/crates/bindgen-0.66.1.crate) = 218860
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/bitflags-2.4.1.crate) = 327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07
+SIZE (rust/crates/bitflags-2.4.1.crate) = 37043
+SHA256 (rust/crates/cexpr-0.6.0.crate) = 6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766
+SIZE (rust/crates/cexpr-0.6.0.crate) = 17966
+SHA256 (rust/crates/cfg-if-1.0.0.crate) = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
+SIZE (rust/crates/cfg-if-1.0.0.crate) = 7934
+SHA256 (rust/crates/chunked_transfer-1.5.0.crate) = 6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901
+SIZE (rust/crates/chunked_transfer-1.5.0.crate) = 9779
+SHA256 (rust/crates/clang-sys-1.6.1.crate) = c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f
+SIZE (rust/crates/clang-sys-1.6.1.crate) = 41346
+SHA256 (rust/crates/clap-4.4.11.crate) = bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2
+SIZE (rust/crates/clap-4.4.11.crate) = 54782
+SHA256 (rust/crates/clap_builder-4.4.11.crate) = a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb
+SIZE (rust/crates/clap_builder-4.4.11.crate) = 163317
+SHA256 (rust/crates/clap_derive-4.4.7.crate) = cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442
+SIZE (rust/crates/clap_derive-4.4.7.crate) = 29046
+SHA256 (rust/crates/clap_lex-0.6.0.crate) = 702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1
+SIZE (rust/crates/clap_lex-0.6.0.crate) = 12272
+SHA256 (rust/crates/colorchoice-1.0.0.crate) = acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7
+SIZE (rust/crates/colorchoice-1.0.0.crate) = 6857
+SHA256 (rust/crates/deranged-0.3.11.crate) = b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4
+SIZE (rust/crates/deranged-0.3.11.crate) = 18043
+SHA256 (rust/crates/either-1.9.0.crate) = a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07
+SIZE (rust/crates/either-1.9.0.crate) = 16660
+SHA256 (rust/crates/errno-0.3.8.crate) = a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245
+SIZE (rust/crates/errno-0.3.8.crate) = 10645
+SHA256 (rust/crates/fnv-1.0.7.crate) = 3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1
+SIZE (rust/crates/fnv-1.0.7.crate) = 11266
+SHA256 (rust/crates/form_urlencoded-1.2.1.crate) = e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456
+SIZE (rust/crates/form_urlencoded-1.2.1.crate) = 8969
+SHA256 (rust/crates/freebsd-libgeom-0.3.0.crate) = 7451ea8d5f6ed036afd13b85f518a0e058ea9b2dec78e96279b839eb371cd251
+SIZE (rust/crates/freebsd-libgeom-0.3.0.crate) = 11525
+SHA256 (rust/crates/freebsd-libgeom-sys-0.1.6.crate) = d3d3ad8de101e55cd80226a9758c0f9c1ab256276828ae8bcdcb9d9e63a6616d
+SIZE (rust/crates/freebsd-libgeom-sys-0.1.6.crate) = 2999
+SHA256 (rust/crates/glob-0.3.1.crate) = d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b
+SIZE (rust/crates/glob-0.3.1.crate) = 18880
+SHA256 (rust/crates/heck-0.4.1.crate) = 95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8
+SIZE (rust/crates/heck-0.4.1.crate) = 11567
+SHA256 (rust/crates/home-0.5.9.crate) = e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5
+SIZE (rust/crates/home-0.5.9.crate) = 8760
+SHA256 (rust/crates/idna-0.5.0.crate) = 634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6
+SIZE (rust/crates/idna-0.5.0.crate) = 271940
+SHA256 (rust/crates/itoa-1.0.11.crate) = 49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b
+SIZE (rust/crates/itoa-1.0.11.crate) = 10563
+SHA256 (rust/crates/lazy_static-1.4.0.crate) = e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646
+SIZE (rust/crates/lazy_static-1.4.0.crate) = 10443
+SHA256 (rust/crates/lazycell-1.3.0.crate) = 830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55
+SIZE (rust/crates/lazycell-1.3.0.crate) = 12502
+SHA256 (rust/crates/libc-0.2.151.crate) = 302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4
+SIZE (rust/crates/libc-0.2.151.crate) = 736640
+SHA256 (rust/crates/libloading-0.7.4.crate) = b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f
+SIZE (rust/crates/libloading-0.7.4.crate) = 27580
+SHA256 (rust/crates/linux-raw-sys-0.4.12.crate) = c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456
+SIZE (rust/crates/linux-raw-sys-0.4.12.crate) = 1465800
+SHA256 (rust/crates/lock_api-0.4.11.crate) = 3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45
+SIZE (rust/crates/lock_api-0.4.11.crate) = 27487
+SHA256 (rust/crates/log-0.4.20.crate) = b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f
+SIZE (rust/crates/log-0.4.20.crate) = 38307
+SHA256 (rust/crates/memchr-2.6.4.crate) = f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167
+SIZE (rust/crates/memchr-2.6.4.crate) = 94439
+SHA256 (rust/crates/minimal-lexical-0.2.1.crate) = 68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a
+SIZE (rust/crates/minimal-lexical-0.2.1.crate) = 94841
+SHA256 (rust/crates/nom-7.1.3.crate) = d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a
+SIZE (rust/crates/nom-7.1.3.crate) = 117570
+SHA256 (rust/crates/num-conv-0.1.0.crate) = 51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9
+SIZE (rust/crates/num-conv-0.1.0.crate) = 7444
+SHA256 (rust/crates/once_cell-1.19.0.crate) = 3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92
+SIZE (rust/crates/once_cell-1.19.0.crate) = 33046
+SHA256 (rust/crates/parking_lot-0.12.1.crate) = 3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f
+SIZE (rust/crates/parking_lot-0.12.1.crate) = 40967
+SHA256 (rust/crates/parking_lot_core-0.9.9.crate) = 4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e
+SIZE (rust/crates/parking_lot_core-0.9.9.crate) = 32445
+SHA256 (rust/crates/peeking_take_while-0.1.2.crate) = 19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099
+SIZE (rust/crates/peeking_take_while-0.1.2.crate) = 6697
+SHA256 (rust/crates/percent-encoding-2.3.1.crate) = e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e
+SIZE (rust/crates/percent-encoding-2.3.1.crate) = 10235
+SHA256 (rust/crates/powerfmt-0.2.0.crate) = 439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391
+SIZE (rust/crates/powerfmt-0.2.0.crate) = 15165
+SHA256 (rust/crates/prettyplease-0.2.15.crate) = ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d
+SIZE (rust/crates/prettyplease-0.2.15.crate) = 57034
+SHA256 (rust/crates/proc-macro2-1.0.70.crate) = 39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b
+SIZE (rust/crates/proc-macro2-1.0.70.crate) = 44343
+SHA256 (rust/crates/prometheus-0.13.3.crate) = 449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c
+SIZE (rust/crates/prometheus-0.13.3.crate) = 82457
+SHA256 (rust/crates/prometheus_exporter-0.8.5.crate) = caf17cbebe0bfdf4f279ef84eeefe0d50468b0b7116f078acf41d456e48fe81a
+SIZE (rust/crates/prometheus_exporter-0.8.5.crate) = 18148
+SHA256 (rust/crates/quote-1.0.33.crate) = 5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae
+SIZE (rust/crates/quote-1.0.33.crate) = 28090
+SHA256 (rust/crates/redox_syscall-0.4.1.crate) = 4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa
+SIZE (rust/crates/redox_syscall-0.4.1.crate) = 24858
+SHA256 (rust/crates/regex-1.10.2.crate) = 380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343
+SIZE (rust/crates/regex-1.10.2.crate) = 252839
+SHA256 (rust/crates/regex-automata-0.4.3.crate) = 5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f
+SIZE (rust/crates/regex-automata-0.4.3.crate) = 617011
+SHA256 (rust/crates/regex-syntax-0.8.2.crate) = c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f
+SIZE (rust/crates/regex-syntax-0.8.2.crate) = 347228
+SHA256 (rust/crates/rustc-hash-1.1.0.crate) = 08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2
+SIZE (rust/crates/rustc-hash-1.1.0.crate) = 9331
+SHA256 (rust/crates/rustix-0.38.28.crate) = 72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316
+SIZE (rust/crates/rustix-0.38.28.crate) = 365398
+SHA256 (rust/crates/scopeguard-1.2.0.crate) = 94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49
+SIZE (rust/crates/scopeguard-1.2.0.crate) = 11619
+SHA256 (rust/crates/serde-1.0.193.crate) = 25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89
+SIZE (rust/crates/serde-1.0.193.crate) = 76863
+SHA256 (rust/crates/serde_derive-1.0.193.crate) = 43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3
+SIZE (rust/crates/serde_derive-1.0.193.crate) = 55692
+SHA256 (rust/crates/shlex-1.3.0.crate) = 0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64
+SIZE (rust/crates/shlex-1.3.0.crate) = 18713
+SHA256 (rust/crates/smallvec-1.11.2.crate) = 4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970
+SIZE (rust/crates/smallvec-1.11.2.crate) = 34801
+SHA256 (rust/crates/strsim-0.10.0.crate) = 73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623
+SIZE (rust/crates/strsim-0.10.0.crate) = 11355
+SHA256 (rust/crates/syn-2.0.41.crate) = 44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269
+SIZE (rust/crates/syn-2.0.41.crate) = 246016
+SHA256 (rust/crates/thiserror-1.0.51.crate) = f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7
+SIZE (rust/crates/thiserror-1.0.51.crate) = 20045
+SHA256 (rust/crates/thiserror-impl-1.0.51.crate) = 01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df
+SIZE (rust/crates/thiserror-impl-1.0.51.crate) = 15372
+SHA256 (rust/crates/time-0.3.36.crate) = 5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885
+SIZE (rust/crates/time-0.3.36.crate) = 119805
+SHA256 (rust/crates/time-core-0.1.2.crate) = ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3
+SIZE (rust/crates/time-core-0.1.2.crate) = 7191
+SHA256 (rust/crates/time-macros-0.2.18.crate) = 3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf
+SIZE (rust/crates/time-macros-0.2.18.crate) = 24361
+SHA256 (rust/crates/tiny_http-0.10.0.crate) = c5f8734c6d6943ad6df6b588d228a87b4af184998bcffa268ceddf05c2055a8c
+SIZE (rust/crates/tiny_http-0.10.0.crate) = 45842
+SHA256 (rust/crates/tinyvec-1.6.0.crate) = 87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50
+SIZE (rust/crates/tinyvec-1.6.0.crate) = 45991
+SHA256 (rust/crates/tinyvec_macros-0.1.1.crate) = 1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20
+SIZE (rust/crates/tinyvec_macros-0.1.1.crate) = 5865
+SHA256 (rust/crates/unicode-bidi-0.3.15.crate) = 08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75
+SIZE (rust/crates/unicode-bidi-0.3.15.crate) = 56811
+SHA256 (rust/crates/unicode-ident-1.0.12.crate) = 3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b
+SIZE (rust/crates/unicode-ident-1.0.12.crate) = 42168
+SHA256 (rust/crates/unicode-normalization-0.1.23.crate) = a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5
+SIZE (rust/crates/unicode-normalization-0.1.23.crate) = 122649
+SHA256 (rust/crates/url-2.5.0.crate) = 31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633
+SIZE (rust/crates/url-2.5.0.crate) = 78605
+SHA256 (rust/crates/utf8parse-0.2.1.crate) = 711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a
+SIZE (rust/crates/utf8parse-0.2.1.crate) = 13435
+SHA256 (rust/crates/which-4.4.2.crate) = 87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7
+SIZE (rust/crates/which-4.4.2.crate) = 15953
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-sys-0.52.0.crate) = 282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d
+SIZE (rust/crates/windows-sys-0.52.0.crate) = 2576877
+SHA256 (rust/crates/windows-targets-0.48.5.crate) = 9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c
+SIZE (rust/crates/windows-targets-0.48.5.crate) = 6904
+SHA256 (rust/crates/windows-targets-0.52.0.crate) = 8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd
+SIZE (rust/crates/windows-targets-0.52.0.crate) = 6229
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.48.5.crate) = 2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8
+SIZE (rust/crates/windows_aarch64_gnullvm-0.48.5.crate) = 418492
+SHA256 (rust/crates/windows_aarch64_gnullvm-0.52.0.crate) = cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea
+SIZE (rust/crates/windows_aarch64_gnullvm-0.52.0.crate) = 430182
+SHA256 (rust/crates/windows_aarch64_msvc-0.48.5.crate) = dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc
+SIZE (rust/crates/windows_aarch64_msvc-0.48.5.crate) = 798483
+SHA256 (rust/crates/windows_aarch64_msvc-0.52.0.crate) = bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef
+SIZE (rust/crates/windows_aarch64_msvc-0.52.0.crate) = 821663
+SHA256 (rust/crates/windows_i686_gnu-0.48.5.crate) = a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e
+SIZE (rust/crates/windows_i686_gnu-0.48.5.crate) = 844891
+SHA256 (rust/crates/windows_i686_gnu-0.52.0.crate) = a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313
+SIZE (rust/crates/windows_i686_gnu-0.52.0.crate) = 870285
+SHA256 (rust/crates/windows_i686_msvc-0.48.5.crate) = 8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406
+SIZE (rust/crates/windows_i686_msvc-0.48.5.crate) = 864300
+SHA256 (rust/crates/windows_i686_msvc-0.52.0.crate) = ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a
+SIZE (rust/crates/windows_i686_msvc-0.52.0.crate) = 888693
+SHA256 (rust/crates/windows_x86_64_gnu-0.48.5.crate) = 53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e
+SIZE (rust/crates/windows_x86_64_gnu-0.48.5.crate) = 801619
+SHA256 (rust/crates/windows_x86_64_gnu-0.52.0.crate) = 3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd
+SIZE (rust/crates/windows_x86_64_gnu-0.52.0.crate) = 826213
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.48.5.crate) = 0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc
+SIZE (rust/crates/windows_x86_64_gnullvm-0.48.5.crate) = 418486
+SHA256 (rust/crates/windows_x86_64_gnullvm-0.52.0.crate) = 1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e
+SIZE (rust/crates/windows_x86_64_gnullvm-0.52.0.crate) = 430165
+SHA256 (rust/crates/windows_x86_64_msvc-0.48.5.crate) = ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538
+SIZE (rust/crates/windows_x86_64_msvc-0.48.5.crate) = 798412
+SHA256 (rust/crates/windows_x86_64_msvc-0.52.0.crate) = dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04
+SIZE (rust/crates/windows_x86_64_msvc-0.52.0.crate) = 821600
diff --git a/net-mgmt/geom-exporter/files/geom_exporter.in b/net-mgmt/geom-exporter/files/geom_exporter.in
new file mode 100644
index 000000000000..57d755ea6917
--- /dev/null
+++ b/net-mgmt/geom-exporter/files/geom_exporter.in
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# PROVIDE: geom_exporter
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# geom_exporter_enable (bool):            Set to NO by default.
+#               Set it to YES to enable geom-exporter.
+# geom_exporter_args (string):            Set extra arguments to pass to geom-exporter
+#               Default is "".
+# geom_exporter_user (string):            Set user that geom_exporter will run under
+#               Default is "%%USER%%".
+# geom_exporter_group (string):           Set group that geom_exporter will run under
+#               Default is "wheel".
+
+. /etc/rc.subr
+
+name=geom_exporter
+desc="GEOM prometheus exporter"
+rcvar=geom_exporter_enable
+
+load_rc_config $name
+
+: ${geom_exporter_enable:=NO}
+: ${geom_exporter_args:=""}
+: ${geom_exporter_user:=%%USER%%}
+: ${geom_exporter_group:=wheel}
+
+pidfile=/var/run/geom_exporter.pid
+command=/usr/sbin/daemon
+procname=%%PREFIX%%/bin/geom-exporter
+command_args="-f -p ${pidfile} /usr/bin/env ${procname} ${geom_exporter_args}"
+
+start_precmd=geom_exporter_startprecmd
+
+geom_exporter_startprecmd()
+{
+    if [ -e ${pidfile} ]; then
+        chown ${geom_exporter_user}:${geom_exporter_group} ${pidfile};
+    else
+        install -o ${geom_exporter_user} -g ${geom_exporter_group} /dev/null ${pidfile};
+    fi
+}
+
+run_rc_command "$1"
diff --git a/net-mgmt/geom-exporter/pkg-descr b/net-mgmt/geom-exporter/pkg-descr
new file mode 100644
index 000000000000..ab0eb5713f60
--- /dev/null
+++ b/net-mgmt/geom-exporter/pkg-descr
@@ -0,0 +1,4 @@
+FreeBSD GEOM statistics exporter for Prometheus
+
+The is a Prometheus exporter for FreeBSD's GEOM statistics.  The metrics it
+exports are basically the same as what gstat provides on the terminal.