summaryrefslogtreecommitdiffstats
path: root/collectors/proc.plugin/sys_block_zram.c
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/proc.plugin/sys_block_zram.c')
-rw-r--r--collectors/proc.plugin/sys_block_zram.c87
1 files changed, 35 insertions, 52 deletions
diff --git a/collectors/proc.plugin/sys_block_zram.c b/collectors/proc.plugin/sys_block_zram.c
index ddd1e7ae0..6bae54243 100644
--- a/collectors/proc.plugin/sys_block_zram.c
+++ b/collectors/proc.plugin/sys_block_zram.c
@@ -33,8 +33,6 @@ typedef struct zram_device {
RRDDIM *rd_alloc_efficiency;
} ZRAM_DEVICE;
- // --------------------------------------------------------------------
-
static int try_get_zram_major_number(procfile *file) {
size_t i;
unsigned int lines = procfile_lines(file);
@@ -75,7 +73,7 @@ static inline void init_rrd(const char *name, ZRAM_DEVICE *d, int update_every)
, RRDSET_TYPE_AREA);
d->rd_compr_data_size = rrddim_add(d->st_usage, "compressed", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
d->rd_metadata_size = rrddim_add(d->st_usage, "metadata", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
- rrdlabels_add(d->st_usage->state->chart_labels, "device", name, RRDLABEL_SRC_AUTO);
+ rrdlabels_add(d->st_usage->rrdlabels, "device", name, RRDLABEL_SRC_AUTO);
snprintfz(chart_name, RRD_ID_LENGTH_MAX, "zram_savings.%s", name);
d->st_savings = rrdset_create_localhost(
@@ -93,7 +91,7 @@ static inline void init_rrd(const char *name, ZRAM_DEVICE *d, int update_every)
, RRDSET_TYPE_AREA);
d->rd_savings_size = rrddim_add(d->st_savings, "savings", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
d->rd_original_size = rrddim_add(d->st_savings, "original", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
- rrdlabels_add(d->st_savings->state->chart_labels, "device", name, RRDLABEL_SRC_AUTO);
+ rrdlabels_add(d->st_savings->rrdlabels, "device", name, RRDLABEL_SRC_AUTO);
snprintfz(chart_name, RRD_ID_LENGTH_MAX, "zram_ratio.%s", name);
d->st_comp_ratio = rrdset_create_localhost(
@@ -110,7 +108,7 @@ static inline void init_rrd(const char *name, ZRAM_DEVICE *d, int update_every)
, update_every
, RRDSET_TYPE_LINE);
d->rd_comp_ratio = rrddim_add(d->st_comp_ratio, "ratio", NULL, 1, 100, RRD_ALGORITHM_ABSOLUTE);
- rrdlabels_add(d->st_comp_ratio->state->chart_labels, "device", name, RRDLABEL_SRC_AUTO);
+ rrdlabels_add(d->st_comp_ratio->rrdlabels, "device", name, RRDLABEL_SRC_AUTO);
snprintfz(chart_name, RRD_ID_LENGTH_MAX, "zram_efficiency.%s", name);
d->st_alloc_efficiency = rrdset_create_localhost(
@@ -127,7 +125,7 @@ static inline void init_rrd(const char *name, ZRAM_DEVICE *d, int update_every)
, update_every
, RRDSET_TYPE_LINE);
d->rd_alloc_efficiency = rrddim_add(d->st_alloc_efficiency, "percent", NULL, 1, 10000, RRD_ALGORITHM_ABSOLUTE);
- rrdlabels_add(d->st_alloc_efficiency->state->chart_labels, "device", name, RRDLABEL_SRC_AUTO);
+ rrdlabels_add(d->st_alloc_efficiency->rrdlabels, "device", name, RRDLABEL_SRC_AUTO);
}
static int init_devices(DICTIONARY *devices, unsigned int zram_id, int update_every) {
@@ -177,9 +175,8 @@ static void free_device(DICTIONARY *dict, const char *name)
rrdset_obsolete_and_pointer_null(d->st_savings);
rrdset_obsolete_and_pointer_null(d->st_alloc_efficiency);
rrdset_obsolete_and_pointer_null(d->st_comp_ratio);
- dictionary_del_having_write_lock(dict, name);
+ dictionary_del(dict, name);
}
- // --------------------------------------------------------------------
static inline int read_mm_stat(procfile *ff, MM_STAT *stats) {
ff = procfile_readall(ff);
@@ -204,61 +201,51 @@ static inline int read_mm_stat(procfile *ff, MM_STAT *stats) {
return 0;
}
-static inline int _collect_zram_metrics(const char* name, ZRAM_DEVICE *d, int advance, DICTIONARY* dict) {
+static int collect_zram_metrics(const DICTIONARY_ITEM *item, void *entry, void *data) {
+ const char *name = dictionary_acquired_item_name(item);
+ ZRAM_DEVICE *dev = entry;
+ DICTIONARY *dict = data;
+
MM_STAT mm;
int value;
- if (unlikely(read_mm_stat(d->file, &mm) < 0))
- {
+
+ if (unlikely(read_mm_stat(dev->file, &mm) < 0)) {
free_device(dict, name);
return -1;
}
- if (likely(advance))
- {
- rrdset_next(d->st_usage);
- rrdset_next(d->st_savings);
- rrdset_next(d->st_comp_ratio);
- rrdset_next(d->st_alloc_efficiency);
- }
// zram_usage
- rrddim_set_by_pointer(d->st_usage, d->rd_compr_data_size, mm.compr_data_size);
- rrddim_set_by_pointer(d->st_usage, d->rd_metadata_size, mm.mem_used_total - mm.compr_data_size);
- rrdset_done(d->st_usage);
+ rrddim_set_by_pointer(dev->st_usage, dev->rd_compr_data_size, mm.compr_data_size);
+ rrddim_set_by_pointer(dev->st_usage, dev->rd_metadata_size, mm.mem_used_total - mm.compr_data_size);
+ rrdset_done(dev->st_usage);
+
// zram_savings
- rrddim_set_by_pointer(d->st_savings, d->rd_savings_size, mm.compr_data_size - mm.orig_data_size);
- rrddim_set_by_pointer(d->st_savings, d->rd_original_size, mm.orig_data_size);
- rrdset_done(d->st_savings);
+ rrddim_set_by_pointer(dev->st_savings, dev->rd_savings_size, mm.compr_data_size - mm.orig_data_size);
+ rrddim_set_by_pointer(dev->st_savings, dev->rd_original_size, mm.orig_data_size);
+ rrdset_done(dev->st_savings);
+
// zram_ratio
value = mm.compr_data_size == 0 ? 1 : mm.orig_data_size * 100 / mm.compr_data_size;
- rrddim_set_by_pointer(d->st_comp_ratio, d->rd_comp_ratio, value);
- rrdset_done(d->st_comp_ratio);
+ rrddim_set_by_pointer(dev->st_comp_ratio, dev->rd_comp_ratio, value);
+ rrdset_done(dev->st_comp_ratio);
+
// zram_efficiency
value = mm.mem_used_total == 0 ? 100 : (mm.compr_data_size * 1000000 / mm.mem_used_total);
- rrddim_set_by_pointer(d->st_alloc_efficiency, d->rd_alloc_efficiency, value);
- rrdset_done(d->st_alloc_efficiency);
- return 0;
-}
-
-static int collect_first_zram_metrics(const char *name, void *entry, void *data) {
- // collect without calling rrdset_next (init only)
- return _collect_zram_metrics(name, (ZRAM_DEVICE *)entry, 0, (DICTIONARY *)data);
-}
+ rrddim_set_by_pointer(dev->st_alloc_efficiency, dev->rd_alloc_efficiency, value);
+ rrdset_done(dev->st_alloc_efficiency);
-static int collect_zram_metrics(const char *name, void *entry, void *data) {
- (void)name;
- // collect with calling rrdset_next
- return _collect_zram_metrics(name, (ZRAM_DEVICE *)entry, 1, (DICTIONARY *)data);
+ return 0;
}
- // --------------------------------------------------------------------
-
int do_sys_block_zram(int update_every, usec_t dt) {
- (void)dt;
static procfile *ff = NULL;
static DICTIONARY *devices = NULL;
static int initialized = 0;
static int device_count = 0;
int zram_id = -1;
+
+ (void)dt;
+
if (unlikely(!initialized))
{
initialized = 1;
@@ -280,17 +267,13 @@ int do_sys_block_zram(int update_every, usec_t dt) {
}
procfile_close(ff);
- devices = dictionary_create(DICTIONARY_FLAG_SINGLE_THREADED);
+ devices = dictionary_create(DICT_OPTION_SINGLE_THREADED);
device_count = init_devices(devices, (unsigned int)zram_id, update_every);
- if (device_count < 1)
- return 1;
- dictionary_walkthrough_write(devices, collect_first_zram_metrics, devices);
- }
- else
- {
- if (unlikely(device_count < 1))
- return 1;
- dictionary_walkthrough_write(devices, collect_zram_metrics, devices);
}
+
+ if (unlikely(device_count < 1))
+ return 1;
+
+ dictionary_walkthrough_write(devices, collect_zram_metrics, devices);
return 0;
} \ No newline at end of file