@cryptotaxi247 / netdata-1 / commits / fe3dfd60a

use /proc/uptime for uptime when now_boottime_usec() differs; fixes #3393

Costa Tsaousis (ktsaou) committed Feb 19, 2018 at 01:23 UTC fe3dfd60a97d67fbab87f0d6dacd929dcac70f7b
1 file changed +33 -9
src/proc_uptime.c
+33 -9
@@ -1,13 +1,6 @@
1 #include "common.h"
2
3 -int do_proc_uptime(int update_every, usec_t dt) {
4 - (void)dt;
5 -
6 - collected_number uptime = 0;
7 -
8 -#ifdef CLOCK_BOOTTIME_IS_AVAILABLE
9 - uptime = now_boottime_usec() / 1000;
10 -#else
3 +static collected_number read_proc_uptime(void) {
4 static procfile *ff = NULL;
5
6 if(unlikely(!ff)) {
@@ -32,7 +25,38 @@ int do_proc_uptime(int update_every, usec_t dt) {
25 return 1;
26 }
27
35 - uptime = (collected_number)(strtold(procfile_lineword(ff, 0, 0), NULL) * 1000.0);
28 + return (collected_number)(strtold(procfile_lineword(ff, 0, 0), NULL) * 1000.0);
29 +}
30 +
31 +int do_proc_uptime(int update_every, usec_t dt) {
32 + (void)dt;
33 +
34 + collected_number uptime;
35 +
36 +#ifdef CLOCK_BOOTTIME_IS_AVAILABLE
37 + static int use_boottime = -1;
38 +
39 + if(unlikely(use_boottime == -1)) {
40 + long long delta = (long long)(now_boottime_usec() / 1000) - (long long)read_proc_uptime();
41 + if(delta < 0) delta = -delta;
42 +
43 + if(delta <= 1000) {
44 + info("Using now_boottime_usec() for uptime (dt is %lld ms)", delta);
45 + use_boottime = 1;
46 + }
47 + else {
48 + info("Using /proc/uptime for uptime (dt is %lld ms)", delta);
49 + use_boottime = 0;
50 + }
51 + }
52 +
53 + if(use_boottime)
54 + uptime = now_boottime_usec() / 1000;
55 + else
56 + uptime = read_proc_uptime();
57 +
58 +#else
59 + uptime = read_proc_uptime();
60 #endif
61
62 // --------------------------------------------------------------------