X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=src%2Fplugin_proc.c;h=8e7a257bc047c0726a89638c8733e6b8cdb9d5d3;hb=6372ed837298a34f6d16e0cde929822879863195;hp=2192dceb982e90a4821113f5430ace372e31a3e1;hpb=037bbc245f57e45f9e6f56c705957e38586d7218;p=netdata.git diff --git a/src/plugin_proc.c b/src/plugin_proc.c index 2192dceb..8e7a257b 100755 --- a/src/plugin_proc.c +++ b/src/plugin_proc.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -6,7 +9,7 @@ #include "global_statistics.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #include "rrd.h" #include "plugin_proc.h" @@ -15,6 +18,8 @@ void *proc_main(void *ptr) { if(ptr) { ; } + info("PROC Plugin thread created with task id %d", gettid()); + if(pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL) != 0) error("Cannot set pthread cancel type to DEFERRED."); @@ -25,7 +30,7 @@ void *proc_main(void *ptr) struct timeval last, now; gettimeofday(&last, NULL); - last.tv_sec -= update_every; + last.tv_sec -= rrd_update_every; // disable (by default) various interface that are not needed config_get_boolean("plugin:proc:/proc/net/dev", "interface lo", 0); @@ -41,9 +46,12 @@ void *proc_main(void *ptr) int vdo_proc_stat = !config_get_boolean("plugin:proc", "/proc/stat", 1); int vdo_proc_meminfo = !config_get_boolean("plugin:proc", "/proc/meminfo", 1); int vdo_proc_vmstat = !config_get_boolean("plugin:proc", "/proc/vmstat", 1); + int vdo_proc_net_rpc_nfsd = !config_get_boolean("plugin:proc", "/proc/net/rpc/nfsd", 1); + int vdo_proc_sys_kernel_random_entropy_avail = !config_get_boolean("plugin:proc", "/proc/sys/kernel/random/entropy_avail", 1); + int vdo_proc_interrupts = !config_get_boolean("plugin:proc", "/proc/interrupts", 1); int vdo_cpu_netdata = !config_get_boolean("plugin:proc", "netdata server resources", 1); - RRD_STATS *stcpu = NULL, *stclients = NULL, *streqs = NULL, *stbytes = NULL; + RRDSET *stcpu = NULL, *stclients = NULL, *streqs = NULL, *stbytes = NULL; gettimeofday(&last, NULL); getrusage(RUSAGE_SELF, &me_last); @@ -52,15 +60,63 @@ void *proc_main(void *ptr) for(;1;) { // BEGIN -- the job to be done - if(!vdo_proc_net_dev) vdo_proc_net_dev = do_proc_net_dev(update_every, usec+susec); - if(!vdo_proc_diskstats) vdo_proc_diskstats = do_proc_diskstats(update_every, usec+susec); - if(!vdo_proc_net_snmp) vdo_proc_net_snmp = do_proc_net_snmp(update_every, usec+susec); - if(!vdo_proc_net_netstat) vdo_proc_net_netstat = do_proc_net_netstat(update_every, usec+susec); - if(!vdo_proc_net_stat_conntrack) vdo_proc_net_stat_conntrack = do_proc_net_stat_conntrack(update_every, usec+susec); - if(!vdo_proc_net_ip_vs_stats) vdo_proc_net_ip_vs_stats = do_proc_net_ip_vs_stats(update_every, usec+susec); - if(!vdo_proc_stat) vdo_proc_stat = do_proc_stat(update_every, usec+susec); - if(!vdo_proc_meminfo) vdo_proc_meminfo = do_proc_meminfo(update_every, usec+susec); - if(!vdo_proc_vmstat) vdo_proc_vmstat = do_proc_vmstat(update_every, usec+susec); + + if(!vdo_proc_interrupts) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_interrupts()."); + vdo_proc_interrupts = do_proc_interrupts(rrd_update_every, usec+susec); + } + if(!vdo_proc_sys_kernel_random_entropy_avail) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_sys_kernel_random_entropy_avail()."); + vdo_proc_sys_kernel_random_entropy_avail = do_proc_sys_kernel_random_entropy_avail(rrd_update_every, usec+susec); + } + if(!vdo_proc_net_dev) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_dev()."); + vdo_proc_net_dev = do_proc_net_dev(rrd_update_every, usec+susec); + } + if(!vdo_proc_diskstats) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_diskstats()."); + vdo_proc_diskstats = do_proc_diskstats(rrd_update_every, usec+susec); + } + if(!vdo_proc_net_snmp) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_snmp()."); + vdo_proc_net_snmp = do_proc_net_snmp(rrd_update_every, usec+susec); + } + + if(!vdo_proc_net_netstat) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_netstat()."); + vdo_proc_net_netstat = do_proc_net_netstat(rrd_update_every, usec+susec); + } + + if(!vdo_proc_net_stat_conntrack) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_stat_conntrack()."); + vdo_proc_net_stat_conntrack = do_proc_net_stat_conntrack(rrd_update_every, usec+susec); + } + + if(!vdo_proc_net_ip_vs_stats) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling vdo_proc_net_ip_vs_stats()."); + vdo_proc_net_ip_vs_stats = do_proc_net_ip_vs_stats(rrd_update_every, usec+susec); + } + + if(!vdo_proc_stat) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_stat()."); + vdo_proc_stat = do_proc_stat(rrd_update_every, usec+susec); + } + + if(!vdo_proc_meminfo) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling vdo_proc_meminfo()."); + vdo_proc_meminfo = do_proc_meminfo(rrd_update_every, usec+susec); + } + + if(!vdo_proc_vmstat) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling vdo_proc_vmstat()."); + vdo_proc_vmstat = do_proc_vmstat(rrd_update_every, usec+susec); + } + + if(!vdo_proc_net_rpc_nfsd) { + debug(D_PROCNETDEV_LOOP, "PROCNETDEV: calling do_proc_net_rpc_nfsd()."); + vdo_proc_net_rpc_nfsd = do_proc_net_rpc_nfsd(rrd_update_every, usec+susec); + } + // END -- the job is done // find the time to sleep in order to wait exactly update_every seconds @@ -68,8 +124,8 @@ void *proc_main(void *ptr) usec = usecdiff(&now, &last) - susec; debug(D_PROCNETDEV_LOOP, "PROCNETDEV: last loop took %llu usec (worked for %llu, sleeped for %llu).", usec + susec, usec, susec); - if(usec < (update_every * 1000000ULL / 2ULL)) susec = (update_every * 1000000ULL) - usec; - else susec = update_every * 1000000ULL / 2ULL; + if(usec < (rrd_update_every * 1000000ULL / 2ULL)) susec = (rrd_update_every * 1000000ULL) - usec; + else susec = rrd_update_every * 1000000ULL / 2ULL; // -------------------------------------------------------------------- @@ -78,61 +134,61 @@ void *proc_main(void *ptr) unsigned long long cpuuser = me.ru_utime.tv_sec * 1000000ULL + me.ru_utime.tv_usec; unsigned long long cpusyst = me.ru_stime.tv_sec * 1000000ULL + me.ru_stime.tv_usec; - if(!stcpu) stcpu = rrd_stats_find("netdata.server_cpu"); + if(!stcpu) stcpu = rrdset_find("netdata.server_cpu"); if(!stcpu) { - stcpu = rrd_stats_create("netdata", "server_cpu", NULL, "netdata", "NetData CPU usage", "milliseconds/s", 9999, update_every, CHART_TYPE_STACKED); + stcpu = rrdset_create("netdata", "server_cpu", NULL, "netdata", "NetData CPU usage", "milliseconds/s", 9999, rrd_update_every, RRDSET_TYPE_STACKED); - rrd_stats_dimension_add(stcpu, "user", NULL, 1, 1000 * update_every, RRD_DIMENSION_INCREMENTAL); - rrd_stats_dimension_add(stcpu, "system", NULL, 1, 1000 * update_every, RRD_DIMENSION_INCREMENTAL); + rrddim_add(stcpu, "user", NULL, 1, 1000 * rrd_update_every, RRDDIM_INCREMENTAL); + rrddim_add(stcpu, "system", NULL, 1, 1000 * rrd_update_every, RRDDIM_INCREMENTAL); } - else rrd_stats_next(stcpu); + else rrdset_next(stcpu); - rrd_stats_dimension_set(stcpu, "user", cpuuser); - rrd_stats_dimension_set(stcpu, "system", cpusyst); - rrd_stats_done(stcpu); + rrddim_set(stcpu, "user", cpuuser); + rrddim_set(stcpu, "system", cpusyst); + rrdset_done(stcpu); bcopy(&me, &me_last, sizeof(struct rusage)); // ---------------------------------------------------------------- - if(!stclients) stclients = rrd_stats_find("netdata.clients"); + if(!stclients) stclients = rrdset_find("netdata.clients"); if(!stclients) { - stclients = rrd_stats_create("netdata", "clients", NULL, "netdata", "NetData Web Clients", "connected clients", 11000, update_every, CHART_TYPE_LINE); + stclients = rrdset_create("netdata", "clients", NULL, "netdata", "NetData Web Clients", "connected clients", 11000, rrd_update_every, RRDSET_TYPE_LINE); - rrd_stats_dimension_add(stclients, "clients", NULL, 1, 1, RRD_DIMENSION_ABSOLUTE); + rrddim_add(stclients, "clients", NULL, 1, 1, RRDDIM_ABSOLUTE); } - else rrd_stats_next(stclients); + else rrdset_next(stclients); - rrd_stats_dimension_set(stclients, "clients", global_statistics.connected_clients); - rrd_stats_done(stclients); + rrddim_set(stclients, "clients", global_statistics.connected_clients); + rrdset_done(stclients); // ---------------------------------------------------------------- - if(!streqs) streqs = rrd_stats_find("netdata.requests"); + if(!streqs) streqs = rrdset_find("netdata.requests"); if(!streqs) { - streqs = rrd_stats_create("netdata", "requests", NULL, "netdata", "NetData Web Requests", "requests/s", 12000, update_every, CHART_TYPE_LINE); + streqs = rrdset_create("netdata", "requests", NULL, "netdata", "NetData Web Requests", "requests/s", 12000, rrd_update_every, RRDSET_TYPE_LINE); - rrd_stats_dimension_add(streqs, "requests", NULL, 1, 1 * update_every, RRD_DIMENSION_INCREMENTAL); + rrddim_add(streqs, "requests", NULL, 1, 1 * rrd_update_every, RRDDIM_INCREMENTAL); } - else rrd_stats_next(streqs); + else rrdset_next(streqs); - rrd_stats_dimension_set(streqs, "requests", global_statistics.web_requests); - rrd_stats_done(streqs); + rrddim_set(streqs, "requests", global_statistics.web_requests); + rrdset_done(streqs); // ---------------------------------------------------------------- - if(!stbytes) stbytes = rrd_stats_find("netdata.net"); + if(!stbytes) stbytes = rrdset_find("netdata.net"); if(!stbytes) { - stbytes = rrd_stats_create("netdata", "net", NULL, "netdata", "NetData Network Traffic", "kilobits/s", 13000, update_every, CHART_TYPE_AREA); + stbytes = rrdset_create("netdata", "net", NULL, "netdata", "NetData Network Traffic", "kilobits/s", 13000, rrd_update_every, RRDSET_TYPE_AREA); - rrd_stats_dimension_add(stbytes, "in", NULL, 8, 1024 * update_every, RRD_DIMENSION_INCREMENTAL); - rrd_stats_dimension_add(stbytes, "out", NULL, -8, 1024 * update_every, RRD_DIMENSION_INCREMENTAL); + rrddim_add(stbytes, "in", NULL, 8, 1024 * rrd_update_every, RRDDIM_INCREMENTAL); + rrddim_add(stbytes, "out", NULL, -8, 1024 * rrd_update_every, RRDDIM_INCREMENTAL); } - else rrd_stats_next(stbytes); + else rrdset_next(stbytes); - rrd_stats_dimension_set(stbytes, "in", global_statistics.bytes_received); - rrd_stats_dimension_set(stbytes, "out", global_statistics.bytes_sent); - rrd_stats_done(stbytes); + rrddim_set(stbytes, "in", global_statistics.bytes_received); + rrddim_set(stbytes, "out", global_statistics.bytes_sent); + rrdset_done(stbytes); } usleep(susec);