diff options
author | Vladimir Kobal <vlad@prokk.net> | 2019-08-29 20:35:05 +0300 |
---|---|---|
committer | Paul Emm. Katsoulakis <34388743+paulkatsoulakis@users.noreply.github.com> | 2019-08-29 20:35:05 +0300 |
commit | c79112e85317d80f46acb26296e47a7da8d9d8b0 (patch) | |
tree | 7c65b3df8a78e0ee0ac38bea4746fe6aa2bc7dff /collectors/proc.plugin | |
parent | 1907c1486fba9ecb534058d1d3b7573777b67b82 (diff) |
Display uptime for processes (#6654)
* Get process uptime
* Calculate target uptime
* Update charts
* Show collected data
* Fix chart names
* Update the documentation
* Fix a flag value
* Add an explanation note for the 'carried over uptime' chart
* Move the functions for getting uptime to libnetdata
* Rename the function for geting uptime
* Remove redundant code
* Fix starttime calculation
* More accurate definition for the carried over uptime
* fix group starttime calculation
* Fix typo
Diffstat (limited to 'collectors/proc.plugin')
-rw-r--r-- | collectors/proc.plugin/proc_uptime.c | 71 |
1 files changed, 6 insertions, 65 deletions
diff --git a/collectors/proc.plugin/proc_uptime.c b/collectors/proc.plugin/proc_uptime.c index 142ae2d0c3..28b00e0da1 100644 --- a/collectors/proc.plugin/proc_uptime.c +++ b/collectors/proc.plugin/proc_uptime.c @@ -2,76 +2,17 @@ #include "plugin_proc.h" -static inline collected_number uptime_from_boottime(void) { -#ifdef CLOCK_BOOTTIME_IS_AVAILABLE - return now_boottime_usec() / 1000; -#else - error("uptime cannot be read from CLOCK_BOOTTIME on this system."); - return 0; -#endif -} - -static procfile *read_proc_uptime_ff = NULL; -static inline collected_number read_proc_uptime(void) { - if(unlikely(!read_proc_uptime_ff)) { - char filename[FILENAME_MAX + 1]; - snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/uptime"); - - read_proc_uptime_ff = procfile_open(config_get("plugin:proc:/proc/uptime", "filename to monitor", filename), " \t", PROCFILE_FLAG_DEFAULT); - if(unlikely(!read_proc_uptime_ff)) return 0; - } - - read_proc_uptime_ff = procfile_readall(read_proc_uptime_ff); - if(unlikely(!read_proc_uptime_ff)) return 0; - - if(unlikely(procfile_lines(read_proc_uptime_ff) < 1)) { - error("/proc/uptime has no lines."); - return 0; - } - if(unlikely(procfile_linewords(read_proc_uptime_ff, 0) < 1)) { - error("/proc/uptime has less than 1 word in it."); - return 0; - } - - return (collected_number)(strtold(procfile_lineword(read_proc_uptime_ff, 0, 0), NULL) * 1000.0); -} - int do_proc_uptime(int update_every, usec_t dt) { (void)dt; - static int use_boottime = -1; - - if(unlikely(use_boottime == -1)) { - collected_number uptime_boottime = uptime_from_boottime(); - collected_number uptime_proc = read_proc_uptime(); - - long long delta = (long long)uptime_boottime - (long long)uptime_proc; - if(delta < 0) delta = -delta; + static char *uptime_filename = NULL; + if(!uptime_filename) { + char filename[FILENAME_MAX + 1]; + snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/uptime"); - if(delta <= 1000 && uptime_boottime != 0) { - procfile_close(read_proc_uptime_ff); - info("Using now_boottime_usec() for uptime (dt is %lld ms)", delta); - use_boottime = 1; - } - else if(uptime_proc != 0) { - info("Using /proc/uptime for uptime (dt is %lld ms)", delta); - use_boottime = 0; - } - else { - error("Cannot find any way to read uptime on this system."); - return 1; - } + uptime_filename = config_get("plugin:proc:/proc/uptime", "filename to monitor", filename); } - collected_number uptime; - if(use_boottime) - uptime = uptime_from_boottime(); - else - uptime = read_proc_uptime(); - - - // -------------------------------------------------------------------- - static RRDSET *st = NULL; static RRDDIM *rd = NULL; @@ -97,7 +38,7 @@ int do_proc_uptime(int update_every, usec_t dt) { else rrdset_next(st); - rrddim_set_by_pointer(st, rd, uptime); + rrddim_set_by_pointer(st, rd, uptime_msec(uptime_filename)); rrdset_done(st); |