From 131ff8a04207786b4cf098a283f2d8cf8ef39c0c Mon Sep 17 00:00:00 2001 From: Benny Siegert Date: Tue, 3 Jan 2023 19:16:40 +0000 Subject: [PATCH] NetBSD support for the meminfo collector This depends on a recent change to golang.org/x/sys that adds a unix.SysctlUvmexp function. Signed-off-by: Benny Siegert --- collector/meminfo.go | 4 ++-- collector/meminfo_netbsd.go | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 collector/meminfo_netbsd.go diff --git a/collector/meminfo.go b/collector/meminfo.go index 8437f0f1..b59337dd 100644 --- a/collector/meminfo.go +++ b/collector/meminfo.go @@ -11,8 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -//go:build (darwin || linux || openbsd) && !nomeminfo -// +build darwin linux openbsd +//go:build (darwin || linux || openbsd || netbsd) && !nomeminfo +// +build darwin linux openbsd netbsd // +build !nomeminfo package collector diff --git a/collector/meminfo_netbsd.go b/collector/meminfo_netbsd.go new file mode 100644 index 00000000..7f418479 --- /dev/null +++ b/collector/meminfo_netbsd.go @@ -0,0 +1,43 @@ +// Copyright 2023 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build netbsd && !nomeminfo +// +build netbsd,!nomeminfo + +package collector + +import ( + "golang.org/x/sys/unix" +) + +func (c *meminfoCollector) getMemInfo() (map[string]float64, error) { + uvmexp, err := unix.SysctlUvmexp("vm.uvmexp2") + if err != nil { + return nil, err + } + + ps := float64(uvmexp.Pagesize) + + // see uvm(9) + return map[string]float64{ + "active_bytes": ps * float64(uvmexp.Active), + "free_bytes": ps * float64(uvmexp.Free), + "inactive_bytes": ps * float64(uvmexp.Inactive), + "size_bytes": ps * float64(uvmexp.Npages), + "swap_size_bytes": ps * float64(uvmexp.Swpages), + "swap_used_bytes": ps * float64(uvmexp.Swpginuse), + "swapped_in_pages_bytes_total": ps * float64(uvmexp.Pgswapin), + "swapped_out_pages_bytes_total": ps * float64(uvmexp.Pgswapout), + "wired_bytes": ps * float64(uvmexp.Wired), + }, nil +}