summaryrefslogtreecommitdiffstats
path: root/collectors/diskspace.plugin/plugin_diskspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/diskspace.plugin/plugin_diskspace.c')
-rw-r--r--collectors/diskspace.plugin/plugin_diskspace.c99
1 files changed, 25 insertions, 74 deletions
diff --git a/collectors/diskspace.plugin/plugin_diskspace.c b/collectors/diskspace.plugin/plugin_diskspace.c
index b6a52c06..663bb82f 100644
--- a/collectors/diskspace.plugin/plugin_diskspace.c
+++ b/collectors/diskspace.plugin/plugin_diskspace.c
@@ -52,7 +52,8 @@ static DICTIONARY *dict_mountpoints = NULL;
#define rrdset_obsolete_and_pointer_null(st) do { if(st) { rrdset_is_obsolete(st); (st) = NULL; } } while(st)
-int mount_point_cleanup(void *entry, void *data) {
+int mount_point_cleanup(const char *name, void *entry, void *data) {
+ (void)name;
(void)data;
struct mount_point_metadata *mp = (struct mount_point_metadata *)entry;
@@ -365,6 +366,8 @@ static inline void do_disk_space_stats(struct mountinfo *mi, int update_every) {
}
static void diskspace_main_cleanup(void *ptr) {
+ worker_unregister();
+
struct netdata_static_thread *static_thread = (struct netdata_static_thread *)ptr;
static_thread->enabled = NETDATA_MAIN_THREAD_EXITING;
@@ -373,10 +376,21 @@ static void diskspace_main_cleanup(void *ptr) {
static_thread->enabled = NETDATA_MAIN_THREAD_EXITED;
}
+#define WORKER_JOB_MOUNTINFO 0
+#define WORKER_JOB_MOUNTPOINT 1
+#define WORKER_JOB_CLEANUP 2
+
+#if WORKER_UTILIZATION_MAX_JOB_TYPES < 3
+#error WORKER_UTILIZATION_MAX_JOB_TYPES has to be at least 3
+#endif
+
void *diskspace_main(void *ptr) {
- netdata_thread_cleanup_push(diskspace_main_cleanup, ptr);
+ worker_register("DISKSPACE");
+ worker_register_job_name(WORKER_JOB_MOUNTINFO, "mountinfo");
+ worker_register_job_name(WORKER_JOB_MOUNTPOINT, "mountpoint");
+ worker_register_job_name(WORKER_JOB_CLEANUP, "cleanup");
- int vdo_cpu_netdata = config_get_boolean("plugin:proc", "netdata server resources", 1);
+ netdata_thread_cleanup_push(diskspace_main_cleanup, ptr);
cleanup_mount_points = config_get_boolean(CONFIG_SECTION_DISKSPACE, "remove charts of unmounted disks" , cleanup_mount_points);
@@ -388,14 +402,11 @@ void *diskspace_main(void *ptr) {
if(check_for_new_mountpoints_every < update_every)
check_for_new_mountpoints_every = update_every;
- struct rusage thread;
-
- usec_t duration = 0;
usec_t step = update_every * USEC_PER_SEC;
heartbeat_t hb;
heartbeat_init(&hb);
while(!netdata_exit) {
- duration = heartbeat_monotonic_dt_to_now_usec(&hb);
+ worker_is_idle();
/* usec_t hb_dt = */ heartbeat_next(&hb, step);
if(unlikely(netdata_exit)) break;
@@ -404,9 +415,9 @@ void *diskspace_main(void *ptr) {
// --------------------------------------------------------------------------
// this is smart enough not to reload it every time
+ worker_is_busy(WORKER_JOB_MOUNTINFO);
mountinfo_reload(0);
-
// --------------------------------------------------------------------------
// disk space metrics
@@ -420,80 +431,20 @@ void *diskspace_main(void *ptr) {
if(mi->flags & MOUNTINFO_READONLY && !strcmp(mi->root, mi->mount_point))
continue;
+ worker_is_busy(WORKER_JOB_MOUNTPOINT);
do_disk_space_stats(mi, update_every);
if(unlikely(netdata_exit)) break;
}
if(unlikely(netdata_exit)) break;
- if(dict_mountpoints)
- dictionary_get_all(dict_mountpoints, mount_point_cleanup, NULL);
-
- if(vdo_cpu_netdata) {
- static RRDSET *stcpu_thread = NULL, *st_duration = NULL;
- static RRDDIM *rd_user = NULL, *rd_system = NULL, *rd_duration = NULL;
-
- // ----------------------------------------------------------------
-
- getrusage(RUSAGE_THREAD, &thread);
-
- if(unlikely(!stcpu_thread)) {
- stcpu_thread = rrdset_create_localhost(
- "netdata"
- , "plugin_diskspace"
- , NULL
- , "diskspace"
- , NULL
- , "Netdata Disk Space Plugin CPU usage"
- , "milliseconds/s"
- , PLUGIN_DISKSPACE_NAME
- , NULL
- , NETDATA_CHART_PRIO_NETDATA_DISKSPACE
- , update_every
- , RRDSET_TYPE_STACKED
- );
-
- rd_user = rrddim_add(stcpu_thread, "user", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
- rd_system = rrddim_add(stcpu_thread, "system", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
- }
- else
- rrdset_next(stcpu_thread);
-
- rrddim_set_by_pointer(stcpu_thread, rd_user, thread.ru_utime.tv_sec * 1000000ULL + thread.ru_utime.tv_usec);
- rrddim_set_by_pointer(stcpu_thread, rd_system, thread.ru_stime.tv_sec * 1000000ULL + thread.ru_stime.tv_usec);
- rrdset_done(stcpu_thread);
-
- // ----------------------------------------------------------------
-
- if(unlikely(!st_duration)) {
- st_duration = rrdset_create_localhost(
- "netdata"
- , "plugin_diskspace_dt"
- , NULL
- , "diskspace"
- , NULL
- , "Netdata Disk Space Plugin Duration"
- , "milliseconds/run"
- , PLUGIN_DISKSPACE_NAME
- , NULL
- , 132021
- , update_every
- , RRDSET_TYPE_AREA
- );
-
- rd_duration = rrddim_add(st_duration, "duration", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
- }
- else
- rrdset_next(st_duration);
-
- rrddim_set_by_pointer(st_duration, rd_duration, duration);
- rrdset_done(st_duration);
-
- // ----------------------------------------------------------------
-
- if(unlikely(netdata_exit)) break;
+ if(dict_mountpoints) {
+ worker_is_busy(WORKER_JOB_CLEANUP);
+ dictionary_walkthrough_read(dict_mountpoints, mount_point_cleanup, NULL);
}
+
}
+ worker_unregister();
netdata_thread_cleanup_pop(1);
return NULL;