From d6371adc12098717a664d44ce05fb8f143fedb18 Mon Sep 17 00:00:00 2001 From: Vladimir Kobal Date: Fri, 13 Jan 2017 02:22:55 +0200 Subject: [PATCH] Add uptime badge to FreeBSD plugin --- src/freebsd_sysctl.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/freebsd_sysctl.c b/src/freebsd_sysctl.c index 26c5f9c3..7edaf4f0 100644 --- a/src/freebsd_sysctl.c +++ b/src/freebsd_sysctl.c @@ -35,6 +35,8 @@ #include // NEEDED BY do_space, do_inodes #include +// NEEDED BY do_uptime +#include #define KILO_FACTOR 1024 #define MEGA_FACTOR 1048576 // 1024 * 1024 @@ -62,7 +64,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) { do_ip_packets = -1, do_ip_fragsout = -1, do_ip_fragsin = -1, do_ip_errors = -1, do_ip6_packets = -1, do_ip6_fragsout = -1, do_ip6_fragsin = -1, do_ip6_errors = -1, do_icmp6 = -1, do_icmp6_redir = -1, do_icmp6_errors = -1, do_icmp6_echos = -1, do_icmp6_router = -1, - do_icmp6_neighbor = -1, do_icmp6_types = -1, do_space = -1, do_inodes = -1; + do_icmp6_neighbor = -1, do_icmp6_types = -1, do_space = -1, do_inodes = -1, do_uptime = -1; if (unlikely(do_cpu == -1)) { do_cpu = config_get_boolean("plugin:freebsd:sysctl", "cpu utilization", 1); @@ -116,6 +118,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) { do_icmp6_types = config_get_boolean_ondemand("plugin:freebsd:sysctl", "icmp types", CONFIG_ONDEMAND_ONDEMAND); do_space = config_get_boolean("plugin:freebsd:sysctl", "space usage for all disks", 1); do_inodes = config_get_boolean("plugin:freebsd:sysctl", "inodes usage for all disks", 1); + do_uptime = config_get_boolean("plugin:macos:sysctl", "system uptime", 1); } RRDSET *st; @@ -269,6 +272,9 @@ int do_freebsd_sysctl(int update_every, usec_t dt) { int mntsize; char mntonname[MNAMELEN + 1]; + // NEEDED BY: do_uptime + struct timespec boot_time, cur_time; + // -------------------------------------------------------------------- if (last_loadavg_usec <= dt) { @@ -2174,5 +2180,26 @@ int do_freebsd_sysctl(int update_every, usec_t dt) { } } + // -------------------------------------------------------------------- + + if (likely(do_uptime)) { + if (unlikely(GETSYSCTL("kern.boottime", boot_time))) { + do_uptime = 0; + error("DISABLED: system.uptime"); + } else { + clock_gettime(CLOCK_REALTIME, &cur_time); + st = rrdset_find("system.uptime"); + + if(unlikely(!st)) { + st = rrdset_create("system", "uptime", NULL, "uptime", NULL, "System Uptime", "seconds", 1000, update_every, RRDSET_TYPE_LINE); + rrddim_add(st, "uptime", NULL, 1, 1, RRDDIM_ABSOLUTE); + } + else rrdset_next(st); + + rrddim_set(st, "uptime", cur_time.tv_sec - boot_time.tv_sec); + rrdset_done(st); + } + } + return 0; } -- 2.39.2