mirror of
https://github.com/prometheus/node_exporter.git
synced 2024-11-23 20:36:21 +01:00
Check BSD's mib which accounts for swap size (#1149)
* Change Dfly's CPU counting frequency, see: https://github.com/prometheus/node_exporter/issues/1129 Signed-off-by: iori-yja <fivio.11235813@gmail.com> * Convert Dfly's CPU unit into second Signed-off-by: iori-yja <fivio.11235813@gmail.com> * Check BSD's mib which accounts for swap size; see #1127 Signed-off-by: iori-yja <fivo.11235813@gmail.com> * fix swap check code Signed-off-by: iori-yja <fivo.11235813@gmail.com>
This commit is contained in:
parent
3cf5b006fb
commit
17fee8081f
@ -31,7 +31,7 @@ import (
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
getCPUTimes(uint64_t **cputime, size_t *cpu_times_len, long *freq) {
|
||||
getCPUTimes(uint64_t **cputime, size_t *cpu_times_len) {
|
||||
size_t len;
|
||||
|
||||
// Get number of cpu cores.
|
||||
@ -44,15 +44,6 @@ getCPUTimes(uint64_t **cputime, size_t *cpu_times_len, long *freq) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// The bump on each statclock is
|
||||
// ((cur_systimer - prev_systimer) * systimer_freq) >> 32
|
||||
// where
|
||||
// systimer_freq = sysctl kern.cputimer.freq
|
||||
len = sizeof(*freq);
|
||||
if (sysctlbyname("kern.cputimer.freq", freq, &len, NULL, 0)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get the cpu times.
|
||||
struct kinfo_cputime cp_t[ncpu];
|
||||
bzero(cp_t, sizeof(struct kinfo_cputime)*ncpu);
|
||||
@ -103,18 +94,16 @@ func getDragonFlyCPUTimes() ([]float64, error) {
|
||||
// CPUSTATES (number of CPUSTATES) is defined as 5U.
|
||||
// States: CP_USER | CP_NICE | CP_SYS | CP_IDLE | CP_INTR
|
||||
//
|
||||
// Each value is a counter incremented at frequency
|
||||
// kern.cputimer.freq
|
||||
// Each value is in microseconds
|
||||
//
|
||||
// Look into sys/kern/kern_clock.c for details.
|
||||
|
||||
var (
|
||||
cpuTimesC *C.uint64_t
|
||||
cpuTimerFreq C.long
|
||||
cpuTimesLength C.size_t
|
||||
)
|
||||
|
||||
if C.getCPUTimes(&cpuTimesC, &cpuTimesLength, &cpuTimerFreq) == -1 {
|
||||
if C.getCPUTimes(&cpuTimesC, &cpuTimesLength) == -1 {
|
||||
return nil, errors.New("could not retrieve CPU times")
|
||||
}
|
||||
defer C.free(unsafe.Pointer(cpuTimesC))
|
||||
@ -123,7 +112,7 @@ func getDragonFlyCPUTimes() ([]float64, error) {
|
||||
|
||||
cpuTimes := make([]float64, cpuTimesLength)
|
||||
for i, value := range cput {
|
||||
cpuTimes[i] = float64(value) / float64(cpuTimerFreq)
|
||||
cpuTimes[i] = float64(value) / float64(1000000)
|
||||
}
|
||||
return cpuTimes, nil
|
||||
}
|
||||
|
@ -45,6 +45,13 @@ func NewMemoryCollector() (Collector, error) {
|
||||
}
|
||||
size := float64(tmp32)
|
||||
|
||||
mibSwapTotal := "vm.swap_total"
|
||||
/* swap_total is FreeBSD specific. Fall back to Dfly specific mib if not present. */
|
||||
_, err = unix.SysctlUint32(mibSwapTotal)
|
||||
if err != nil {
|
||||
mibSwapTotal = "vm.swap_size"
|
||||
}
|
||||
|
||||
fromPage := func(v float64) float64 {
|
||||
return v * size
|
||||
}
|
||||
@ -98,7 +105,7 @@ func NewMemoryCollector() (Collector, error) {
|
||||
{
|
||||
name: "swap_size_bytes",
|
||||
description: "Total swap memory size",
|
||||
mib: "vm.swap_total",
|
||||
mib: mibSwapTotal,
|
||||
dataType: bsdSysctlTypeUint64,
|
||||
},
|
||||
// Descriptions via: top(1)
|
||||
|
Loading…
Reference in New Issue
Block a user