From 138990a1d413d26f523ce39450e5c920a80abd69 Mon Sep 17 00:00:00 2001 From: Costa Tsaousis Date: Fri, 15 Jul 2022 20:25:22 +0300 Subject: added permanent labels to all charts about plugin, module and family; added labels to all proc plugin modules --- collectors/diskspace.plugin/plugin_diskspace.c | 4 +- collectors/proc.plugin/proc_diskstats.c | 125 +++++++++-- collectors/proc.plugin/proc_interrupts.c | 4 + collectors/proc.plugin/proc_mdstat.c | 38 +++- collectors/proc.plugin/proc_net_dev.c | 8 +- collectors/proc.plugin/proc_net_wireless.c | 274 +++++++++++------------ collectors/proc.plugin/proc_pagetypeinfo.c | 12 +- collectors/proc.plugin/proc_softirqs.c | 4 + collectors/proc.plugin/proc_stat.c | 4 + collectors/proc.plugin/sys_block_zram.c | 4 + collectors/proc.plugin/sys_class_power_supply.c | 8 + collectors/proc.plugin/sys_devices_system_node.c | 2 + collectors/proc.plugin/sys_fs_btrfs.c | 13 ++ database/rrd.h | 13 +- database/rrdlabels.c | 27 ++- database/rrdset.c | 15 ++ 16 files changed, 360 insertions(+), 195 deletions(-) diff --git a/collectors/diskspace.plugin/plugin_diskspace.c b/collectors/diskspace.plugin/plugin_diskspace.c index f2d9e93ba9..fcf64f3e6f 100644 --- a/collectors/diskspace.plugin/plugin_diskspace.c +++ b/collectors/diskspace.plugin/plugin_diskspace.c @@ -431,7 +431,9 @@ static inline void do_disk_space_stats(struct mountinfo *mi, int update_every) { }; mp.chart_labels = rrdlabels_create(); - rrdlabels_add(mp.chart_labels, "fstype", mi->filesystem, RRDLABEL_SRC_AUTO); + rrdlabels_add(mp.chart_labels, "mount_point", mi->mount_point, RRDLABEL_SRC_AUTO); + rrdlabels_add(mp.chart_labels, "filesystem", mi->filesystem, RRDLABEL_SRC_AUTO); + rrdlabels_add(mp.chart_labels, "mount_root", mi->root, RRDLABEL_SRC_AUTO); m = dictionary_set(dict_mountpoints, mi->mount_point, &mp, sizeof(struct mount_point_metadata)); diff --git a/collectors/proc.plugin/proc_diskstats.c b/collectors/proc.plugin/proc_diskstats.c index ad752d2ef0..be4a481cdb 100644 --- a/collectors/proc.plugin/proc_diskstats.c +++ b/collectors/proc.plugin/proc_diskstats.c @@ -830,6 +830,30 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis return d; } +static void add_labels_to_disk(struct disk *d, RRDSET *st) { + rrdlabels_add(st->state->chart_labels, "device", d->disk, RRDLABEL_SRC_AUTO); + rrdlabels_add(st->state->chart_labels, "mount_point", d->mount_point, RRDLABEL_SRC_AUTO); + + switch (d->type) { + default: + case DISK_TYPE_UNKNOWN: + rrdlabels_add(st->state->chart_labels, "device_type", "unknown", RRDLABEL_SRC_AUTO); + break; + + case DISK_TYPE_PHYSICAL: + rrdlabels_add(st->state->chart_labels, "device_type", "physical", RRDLABEL_SRC_AUTO); + break; + + case DISK_TYPE_PARTITION: + rrdlabels_add(st->state->chart_labels, "device_type", "partition", RRDLABEL_SRC_AUTO); + break; + + case DISK_TYPE_VIRTUAL: + rrdlabels_add(st->state->chart_labels, "device_type", "virtual", RRDLABEL_SRC_AUTO); + break; + } +} + int do_proc_diskstats(int update_every, usec_t dt) { static procfile *ff = NULL; @@ -1067,6 +1091,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_io_reads = rrddim_add(d->st_io, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_INCREMENTAL); d->rd_io_writes = rrddim_add(d->st_io, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_io); } else rrdset_next(d->st_io); @@ -1094,8 +1120,9 @@ int do_proc_diskstats(int update_every, usec_t dt) { , RRDSET_TYPE_AREA ); - d->rd_io_discards = - rrddim_add(d->st_ext_io, "discards", NULL, d->sector_size, 1024, RRD_ALGORITHM_INCREMENTAL); + d->rd_io_discards = rrddim_add(d->st_ext_io, "discards", NULL, d->sector_size, 1024, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_ext_io); } else rrdset_next(d->st_ext_io); @@ -1130,6 +1157,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_ops_reads = rrddim_add(d->st_ops, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_ops_writes = rrddim_add(d->st_ops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_ops); } else rrdset_next(d->st_ops); @@ -1162,7 +1191,10 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_ops_discards = rrddim_add(d->st_ext_ops, "discards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); if (do_fl_stats) d->rd_ops_flushes = rrddim_add(d->st_ext_ops, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - } else + + add_labels_to_disk(d, d->st_ext_ops); + } + else rrdset_next(d->st_ext_ops); last_discards = rrddim_set_by_pointer(d->st_ext_ops, d->rd_ops_discards, discards); @@ -1196,6 +1228,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_qops, RRDSET_FLAG_DETAIL); d->rd_qops_operations = rrddim_add(d->st_qops, "operations", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_qops); } else rrdset_next(d->st_qops); @@ -1228,6 +1262,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_backlog, RRDSET_FLAG_DETAIL); d->rd_backlog_backlog = rrddim_add(d->st_backlog, "backlog", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_backlog); } else rrdset_next(d->st_backlog); @@ -1259,8 +1295,9 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_busy, RRDSET_FLAG_DETAIL); - d->rd_busy_busy = - rrddim_add(d->st_busy, "busy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + d->rd_busy_busy = rrddim_add(d->st_busy, "busy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_busy); } else rrdset_next(d->st_busy); @@ -1288,6 +1325,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_util, RRDSET_FLAG_DETAIL); d->rd_util_utilization = rrddim_add(d->st_util, "utilization", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_util); } else rrdset_next(d->st_util); @@ -1326,6 +1365,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_mops_reads = rrddim_add(d->st_mops, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_mops_writes = rrddim_add(d->st_mops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_mops); } else rrdset_next(d->st_mops); @@ -1358,7 +1399,10 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_ext_mops, RRDSET_FLAG_DETAIL); d->rd_mops_discards = rrddim_add(d->st_ext_mops, "discards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - } else + + add_labels_to_disk(d, d->st_ext_mops); + } + else rrdset_next(d->st_ext_mops); rrddim_set_by_pointer(d->st_ext_mops, d->rd_mops_discards, mdiscards); @@ -1391,6 +1435,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_iotime_reads = rrddim_add(d->st_iotime, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_iotime_writes = rrddim_add(d->st_iotime, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_iotime); } else rrdset_next(d->st_iotime); @@ -1422,9 +1468,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_iotime_discards = rrddim_add(d->st_ext_iotime, "discards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); if (do_fl_stats) - d->rd_iotime_flushes = - rrddim_add(d->st_ext_iotime, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - } else + d->rd_iotime_flushes = rrddim_add(d->st_ext_iotime, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_ext_iotime); + } + else rrdset_next(d->st_ext_iotime); last_discardms = rrddim_set_by_pointer(d->st_ext_iotime, d->rd_iotime_discards, discardms); @@ -1465,6 +1513,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_await_reads = rrddim_add(d->st_await, "reads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); d->rd_await_writes = rrddim_add(d->st_await, "writes", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_await); } else rrdset_next(d->st_await); @@ -1494,18 +1544,22 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_await_discards = rrddim_add(d->st_ext_await, "discards", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); if (do_fl_stats) - d->rd_await_flushes = - rrddim_add(d->st_ext_await, "flushes", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); - } else + d->rd_await_flushes = rrddim_add(d->st_ext_await, "flushes", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_ext_await); + } + else rrdset_next(d->st_ext_await); rrddim_set_by_pointer( d->st_ext_await, d->rd_await_discards, (discards - last_discards) ? (discardms - last_discardms) / (discards - last_discards) : 0); + if (do_fl_stats) rrddim_set_by_pointer( d->st_ext_await, d->rd_await_flushes, (flushes - last_flushes) ? (flushms - last_flushms) / (flushes - last_flushes) : 0); + rrdset_done(d->st_ext_await); } @@ -1534,6 +1588,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_avgsz_reads = rrddim_add(d->st_avgsz, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE); d->rd_avgsz_writes = rrddim_add(d->st_avgsz, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_avgsz); } else rrdset_next(d->st_avgsz); @@ -1561,9 +1617,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_ext_avgsz, RRDSET_FLAG_DETAIL); - d->rd_avgsz_discards = - rrddim_add(d->st_ext_avgsz, "discards", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE); - } else + d->rd_avgsz_discards = rrddim_add(d->st_ext_avgsz, "discards", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_ext_avgsz); + } + else rrdset_next(d->st_ext_avgsz); rrddim_set_by_pointer( @@ -1599,8 +1657,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { rrdset_flag_set(d->st_svctm, RRDSET_FLAG_DETAIL); d->rd_svctm_svctm = rrddim_add(d->st_svctm, "svctm", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_svctm); } - else rrdset_next(d->st_svctm); + else + rrdset_next(d->st_svctm); rrddim_set_by_pointer(d->st_svctm, d->rd_svctm_svctm, ((reads - last_reads) + (writes - last_writes)) ? (busy_ms - last_busy_ms) / ((reads - last_reads) + (writes - last_writes)) : 0); rrdset_done(d->st_svctm); @@ -1705,8 +1766,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_bcache_hit_ratio_1hour = rrddim_add(d->st_bcache_hit_ratio, "1hour", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); d->rd_bcache_hit_ratio_1day = rrddim_add(d->st_bcache_hit_ratio, "1day", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); d->rd_bcache_hit_ratio_total = rrddim_add(d->st_bcache_hit_ratio, "ever", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_bcache_hit_ratio); } - else rrdset_next(d->st_bcache_hit_ratio); + else + rrdset_next(d->st_bcache_hit_ratio); rrddim_set_by_pointer(d->st_bcache_hit_ratio, d->rd_bcache_hit_ratio_5min, stats_five_minute_cache_hit_ratio); rrddim_set_by_pointer(d->st_bcache_hit_ratio, d->rd_bcache_hit_ratio_1hour, stats_hour_cache_hit_ratio); @@ -1735,8 +1799,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_bcache_rate_congested = rrddim_add(d->st_bcache_rates, "congested", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE); d->rd_bcache_rate_writeback = rrddim_add(d->st_bcache_rates, "writeback", NULL, -1, 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_bcache_rates); } - else rrdset_next(d->st_bcache_rates); + else + rrdset_next(d->st_bcache_rates); rrddim_set_by_pointer(d->st_bcache_rates, d->rd_bcache_rate_writeback, writeback_rate); rrddim_set_by_pointer(d->st_bcache_rates, d->rd_bcache_rate_congested, cache_congested); @@ -1761,8 +1828,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { ); d->rd_bcache_dirty_size = rrddim_add(d->st_bcache_size, "dirty", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_bcache_size); } - else rrdset_next(d->st_bcache_size); + else + rrdset_next(d->st_bcache_size); rrddim_set_by_pointer(d->st_bcache_size, d->rd_bcache_dirty_size, dirty_data); rrdset_done(d->st_bcache_size); @@ -1786,8 +1856,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { ); d->rd_bcache_available_percent = rrddim_add(d->st_bcache_usage, "avail", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_disk(d, d->st_bcache_usage); } - else rrdset_next(d->st_bcache_usage); + else + rrdset_next(d->st_bcache_usage); rrddim_set_by_pointer(d->st_bcache_usage, d->rd_bcache_available_percent, cache_available_percent); rrdset_done(d->st_bcache_usage); @@ -1813,8 +1886,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_bcache_cache_read_races = rrddim_add(d->st_bcache_cache_read_races, "races", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_bcache_cache_io_errors = rrddim_add(d->st_bcache_cache_read_races, "errors", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_bcache_cache_read_races); } - else rrdset_next(d->st_bcache_cache_read_races); + else + rrdset_next(d->st_bcache_cache_read_races); rrddim_set_by_pointer(d->st_bcache_cache_read_races, d->rd_bcache_cache_read_races, cache_read_races); rrddim_set_by_pointer(d->st_bcache_cache_read_races, d->rd_bcache_cache_io_errors, cache_io_errors); @@ -1849,8 +1925,11 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_bcache_misses = rrddim_add(d->st_bcache, "misses", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_bcache_miss_collisions = rrddim_add(d->st_bcache, "collisions", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_bcache_readaheads = rrddim_add(d->st_bcache, "readaheads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_bcache); } - else rrdset_next(d->st_bcache); + else + rrdset_next(d->st_bcache); rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_hits, stats_total_cache_hits); rrddim_set_by_pointer(d->st_bcache, d->rd_bcache_misses, stats_total_cache_misses); @@ -1884,6 +1963,8 @@ int do_proc_diskstats(int update_every, usec_t dt) { d->rd_bcache_bypass_hits = rrddim_add(d->st_bcache_bypass, "hits", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); d->rd_bcache_bypass_misses = rrddim_add(d->st_bcache_bypass, "misses", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_disk(d, d->st_bcache_bypass); } else rrdset_next(d->st_bcache_bypass); diff --git a/collectors/proc.plugin/proc_interrupts.c b/collectors/proc.plugin/proc_interrupts.c index 78883c4756..46290554b1 100644 --- a/collectors/proc.plugin/proc_interrupts.c +++ b/collectors/proc.plugin/proc_interrupts.c @@ -225,6 +225,10 @@ int do_proc_interrupts(int update_every, usec_t dt) { , update_every , RRDSET_TYPE_STACKED ); + + char core[50+1]; + snprintfz(core, 50, "cpu%d", c); + rrdlabels_add(core_st[c]->state->chart_labels, "cpu", core, RRDLABEL_SRC_AUTO); } else rrdset_next(core_st[c]); diff --git a/collectors/proc.plugin/proc_mdstat.c b/collectors/proc.plugin/proc_mdstat.c index 469966db92..c8015827ee 100644 --- a/collectors/proc.plugin/proc_mdstat.c +++ b/collectors/proc.plugin/proc_mdstat.c @@ -77,6 +77,11 @@ static inline void make_chart_obsolete(char *name, const char *id_modifier) } } +static void add_labels_to_mdstat(struct raid *raid, RRDSET *st) { + rrdlabels_add(st->state->chart_labels, "device", raid->name, RRDLABEL_SRC_AUTO); + rrdlabels_add(st->state->chart_labels, "raid_level", raid->level, RRDLABEL_SRC_AUTO); +} + int do_proc_mdstat(int update_every, usec_t dt) { (void)dt; @@ -407,7 +412,8 @@ int do_proc_mdstat(int update_every, usec_t dt) RRDSET_TYPE_LINE); rrdset_isnot_obsolete(st_mdstat_health); - } else + } + else rrdset_next(st_mdstat_health); if (!redundant_num) { @@ -458,7 +464,10 @@ int do_proc_mdstat(int update_every, usec_t dt) RRDSET_TYPE_STACKED); rrdset_isnot_obsolete(raid->st_disks); - } else + + add_labels_to_mdstat(raid, raid->st_disks); + } + else rrdset_next(raid->st_disks); if (unlikely(!raid->rd_inuse && !(raid->rd_inuse = rrddim_find_active(raid->st_disks, "inuse")))) @@ -495,7 +504,10 @@ int do_proc_mdstat(int update_every, usec_t dt) RRDSET_TYPE_LINE); rrdset_isnot_obsolete(raid->st_mismatch_cnt); - } else + + add_labels_to_mdstat(raid, raid->st_mismatch_cnt); + } + else rrdset_next(raid->st_mismatch_cnt); if (unlikely(!raid->rd_mismatch_cnt && !(raid->rd_mismatch_cnt = rrddim_find_active(raid->st_mismatch_cnt, "count")))) @@ -529,7 +541,10 @@ int do_proc_mdstat(int update_every, usec_t dt) RRDSET_TYPE_LINE); rrdset_isnot_obsolete(raid->st_operation); - } else + + add_labels_to_mdstat(raid, raid->st_operation); + } + else rrdset_next(raid->st_operation); if(unlikely(!raid->rd_check && !(raid->rd_check = rrddim_find_active(raid->st_operation, "check")))) @@ -569,7 +584,10 @@ int do_proc_mdstat(int update_every, usec_t dt) update_every, RRDSET_TYPE_LINE); rrdset_isnot_obsolete(raid->st_finish); - } else + + add_labels_to_mdstat(raid, raid->st_finish); + } + else rrdset_next(raid->st_finish); if(unlikely(!raid->rd_finish_in && !(raid->rd_finish_in = rrddim_find_active(raid->st_finish, "finish_in")))) @@ -601,7 +619,10 @@ int do_proc_mdstat(int update_every, usec_t dt) RRDSET_TYPE_LINE); rrdset_isnot_obsolete(raid->st_speed); - } else + + add_labels_to_mdstat(raid, raid->st_speed); + } + else rrdset_next(raid->st_speed); if (unlikely(!raid->rd_speed && !(raid->rd_speed = rrddim_find_active(raid->st_speed, "speed")))) @@ -635,7 +656,10 @@ int do_proc_mdstat(int update_every, usec_t dt) RRDSET_TYPE_LINE); rrdset_isnot_obsolete(raid->st_nonredundant); - } else + + add_labels_to_mdstat(raid, raid->st_nonredundant); + } + else rrdset_next(raid->st_nonredundant); if (unlikely(!raid->rd_nonredundant && !(raid->rd_nonredundant = rrddim_find_active(raid->st_nonredundant, "available")))) diff --git a/collectors/proc.plugin/proc_net_dev.c b/collectors/proc.plugin/proc_net_dev.c index a9a2abbcb5..2931783726 100644 --- a/collectors/proc.plugin/proc_net_dev.c +++ b/collectors/proc.plugin/proc_net_dev.c @@ -743,11 +743,13 @@ int do_proc_net_dev(int update_every, usec_t dt) { snprintfz(buffer, FILENAME_MAX, path_to_sys_devices_virtual_net, d->name); if (likely(access(buffer, R_OK) == 0)) { d->virtual = 1; - rrdlabels_add(d->chart_labels, "type", "virtual", RRDLABEL_SRC_AUTO); - } else { + rrdlabels_add(d->chart_labels, "interface_type", "virtual", RRDLABEL_SRC_AUTO|RRDLABEL_FLAG_PERMANENT); + } + else { d->virtual = 0; - rrdlabels_add(d->chart_labels, "type", "real", RRDLABEL_SRC_AUTO); + rrdlabels_add(d->chart_labels, "interface_type", "real", RRDLABEL_SRC_AUTO|RRDLABEL_FLAG_PERMANENT); } + rrdlabels_add(d->chart_labels, "device", name, RRDLABEL_SRC_AUTO|RRDLABEL_FLAG_PERMANENT); if(likely(!d->virtual)) { // set the filename to get the interface speed diff --git a/collectors/proc.plugin/proc_net_wireless.c b/collectors/proc.plugin/proc_net_wireless.c index cff6bc54fa..c6ee4ff700 100644 --- a/collectors/proc.plugin/proc_net_wireless.c +++ b/collectors/proc.plugin/proc_net_wireless.c @@ -198,6 +198,10 @@ static void configure_device(int do_status, int do_quality, int do_discarded_pac wireless_dev->chart_id_net_missed_beacon = strdupz(buffer); } +static void add_labels_to_wireless(struct netwireless *w, RRDSET *st) { + rrdlabels_add(st->state->chart_labels, "device", w->name, RRDLABEL_SRC_AUTO); +} + int do_proc_net_wireless(int update_every, usec_t dt) { UNUSED(dt); @@ -209,21 +213,11 @@ int do_proc_net_wireless(int update_every, usec_t dt) char filename[FILENAME_MAX + 1]; snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/proc/net/wireless"); - proc_net_wireless_filename = config_get(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS,"filename to monitor", - filename); - - do_status = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, - "status for all interfaces", CONFIG_BOOLEAN_AUTO); - - do_quality = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, - "quality for all interfaces", CONFIG_BOOLEAN_AUTO); - - do_discarded_packets = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, - "discarded packets for all interfaces", - CONFIG_BOOLEAN_AUTO); - - do_beacon = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, - "missed beacon for all interface", CONFIG_BOOLEAN_AUTO); + proc_net_wireless_filename = config_get(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS,"filename to monitor", filename); + do_status = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, "status for all interfaces", CONFIG_BOOLEAN_AUTO); + do_quality = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, "quality for all interfaces", CONFIG_BOOLEAN_AUTO); + do_discarded_packets = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, "discarded packets for all interfaces", CONFIG_BOOLEAN_AUTO); + do_beacon = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_NETWIRELESS, "missed beacon for all interface", CONFIG_BOOLEAN_AUTO); } if (unlikely(!ff)) { @@ -255,25 +249,28 @@ int do_proc_net_wireless(int update_every, usec_t dt) wireless_dev->status = str2kernel_uint_t(procfile_lineword(ff, l, 1)); if (unlikely(!wireless_dev->st_status)) { - wireless_dev->st_status = rrdset_create_localhost("wireless", - wireless_dev->chart_id_net_status, - NULL, - wireless_dev->name, - "wireless.status", - "Internal status reported by interface.", - "status", - PLUGIN_PROC_NAME, - PLUGIN_PROC_MODULE_NETWIRELESS_NAME, - NETDATA_CHART_PRIO_WIRELESS_IFACE, - update_every, - RRDSET_TYPE_LINE); + wireless_dev->st_status = rrdset_create_localhost( + "wireless", + wireless_dev->chart_id_net_status, + NULL, + wireless_dev->name, + "wireless.status", + "Internal status reported by interface.", + "status", + PLUGIN_PROC_NAME, + PLUGIN_PROC_MODULE_NETWIRELESS_NAME, + NETDATA_CHART_PRIO_WIRELESS_IFACE, + update_every, + RRDSET_TYPE_LINE); + rrdset_flag_set(wireless_dev->st_status, RRDSET_FLAG_DETAIL); - wireless_dev->rd_status = rrddim_add(wireless_dev->st_status, "status", NULL, 1, - 1, RRD_ALGORITHM_ABSOLUTE); - } else { - rrdset_next(wireless_dev->st_status); + wireless_dev->rd_status = rrddim_add(wireless_dev->st_status, "status", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_wireless(wireless_dev, wireless_dev->st_status); } + else + rrdset_next(wireless_dev->st_status); rrddim_set_by_pointer(wireless_dev->st_status, wireless_dev->rd_status, (collected_number)wireless_dev->status); @@ -286,78 +283,81 @@ int do_proc_net_wireless(int update_every, usec_t dt) wireless_dev->noise = str2ndd(procfile_lineword(ff, l, 4), NULL); if (unlikely(!wireless_dev->st_link)) { - wireless_dev->st_link = rrdset_create_localhost("wireless", - wireless_dev->chart_id_net_link, - NULL, - wireless_dev->name, - "wireless.link_quality", - "Overall quality of the link. This is an aggregate value, and depends on the driver and hardware.", - "value", - PLUGIN_PROC_NAME, - PLUGIN_PROC_MODULE_NETWIRELESS_NAME, - NETDATA_CHART_PRIO_WIRELESS_IFACE + 1, - update_every, - RRDSET_TYPE_LINE); + wireless_dev->st_link = rrdset_create_localhost( + "wireless", + wireless_dev->chart_id_net_link, + NULL, + wireless_dev->name, + "wireless.link_quality", + "Overall quality of the link. This is an aggregate value, and depends on the driver and hardware.", + "value", + PLUGIN_PROC_NAME, + PLUGIN_PROC_MODULE_NETWIRELESS_NAME, + NETDATA_CHART_PRIO_WIRELESS_IFACE + 1, + update_every, + RRDSET_TYPE_LINE); rrdset_flag_set(wireless_dev->st_link, RRDSET_FLAG_DETAIL); - wireless_dev->rd_link = rrddim_add(wireless_dev->st_link, "link_quality", NULL, 1, 1, - RRD_ALGORITHM_ABSOLUTE); - } else { - rrdset_next(wireless_dev->st_link); + wireless_dev->rd_link = rrddim_add(wireless_dev->st_link, "link_quality", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_wireless(wireless_dev, wireless_dev->st_link); } + else + rrdset_next(wireless_dev->st_link); if (unlikely(!wireless_dev->st_level)) { - wireless_dev->st_level = rrdset_create_localhost("wireless", - wireless_dev->chart_id_net_level, - NULL, - wireless_dev->name, - "wireless.signal_level", - "The signal level is the wireless signal power level received by the wireless client. The closer the value is to 0, the stronger the signal.", - "dBm", - PLUGIN_PROC_NAME, - PLUGIN_PROC_MODULE_NETWIRELESS_NAME, - NETDATA_CHART_PRIO_WIRELESS_IFACE + 2, - update_every, - RRDSET_TYPE_LINE); + wireless_dev->st_level = rrdset_create_localhost( + "wireless", + wireless_dev->chart_id_net_level, + NULL, + wireless_dev->name, + "wireless.signal_level", + "The signal level is the wireless signal power level received by the wireless client. The closer the value is to 0, the stronger the signal.", + "dBm", + PLUGIN_PROC_NAME, + PLUGIN_PROC_MODULE_NETWIRELESS_NAME, + NETDATA_CHART_PRIO_WIRELESS_IFACE + 2, + update_every, + RRDSET_TYPE_LINE); rrdset_flag_set(wireless_dev->st_level, RRDSET_FLAG_DETAIL); - wireless_dev->rd_level = rrddim_add(wireless_dev->st_level, "signal_level", NULL, 1, 1, - RRD_ALGORITHM_ABSOLUTE); - } else { - rrdset_next(wireless_dev->st_level); + wireless_dev->rd_level = rrddim_add(wireless_dev->st_level, "signal_level", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_wireless(wireless_dev, wireless_dev->st_level); } + else + rrdset_next(wireless_dev->st_level); if (unlikely(!wireless_dev->st_noise)) { - wireless_dev->st_noise = rrdset_create_localhost("wireless", - wireless_dev->chart_id_net_noise, - NULL, - wireless_dev->name, - "wireless.noise_level", - "The noise level indicates the amount of background noise in your environment. The closer the value to 0, the greater the noise level.", - "dBm", - PLUGIN_PROC_NAME, - PLUGIN_PROC_MODULE_NETWIRELESS_NAME, - NETDATA_CHART_PRIO_WIRELESS_IFACE + 3, - update_every, - RRDSET_TYPE_LINE); + wireless_dev->st_noise = rrdset_create_localhost( + "wireless", + wireless_dev->chart_id_net_noise, + NULL, + wireless_dev->name, + "wireless.noise_level", + "The noise level indicates the amount of background noise in your environment. The closer the value to 0, the greater the noise level.", + "dBm", + PLUGIN_PROC_NAME, + PLUGIN_PROC_MODULE_NETWIRELESS_NAME, + NETDATA_CHART_PRIO_WIRELESS_IFACE + 3, + update_every, + RRDSET_TYPE_LINE); rrdset_flag_set(wireless_dev->st_noise, RRDSET_FLAG_DETAIL); - wireless_dev->rd_noise = rrddim_add(wireless_dev->st_noise, "noise_level", NULL, 1, 1, - RRD_ALGORITHM_ABSOLUTE); - } else { - rrdset_next(wireless_dev->st_noise); + wireless_dev->rd_noise = rrddim_add(wireless_dev->st_noise, "noise_level", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_wireless(wireless_dev, wireless_dev->st_noise); } + else + rrdset_next(wireless_dev->st_noise); - rrddim_set_by_pointer(wireless_dev->st_link, wireless_dev->rd_link, - (collected_number)wireless_dev->link); + rrddim_set_by_pointer(wireless_dev->st_link, wireless_dev->rd_link, (collected_number)wireless_dev->link); rrdset_done(wireless_dev->st_link); - rrddim_set_by_pointer(wireless_dev->st_level, wireless_dev->rd_level, - (collected_number)wireless_dev->level); + rrddim_set_by_pointer(wireless_dev->st_level, wireless_dev->rd_level, (collected_number)wireless_dev->level); rrdset_done(wireless_dev->st_level); - rrddim_set_by_pointer(wireless_dev->st_noise, wireless_dev->rd_noise, - (collected_number)wireless_dev->noise); + rrddim_set_by_pointer(wireless_dev->st_noise, wireless_dev->rd_noise, (collected_number)wireless_dev->noise); rrdset_done(wireless_dev->st_noise); } @@ -369,49 +369,38 @@ int do_proc_net_wireless(int update_every, usec_t dt) wireless_dev->misc = str2kernel_uint_t(procfile_lineword(ff, l, 9)); if (unlikely(!wireless_dev->st_discarded_packets)) { - wireless_dev->st_discarded_packets = rrdset_create_localhost("wireless", - wireless_dev->chart_id_net_discarded_packets, - NULL, - wireless_dev->name, - "wireless.discarded_packets", - "Packet discarded in the wireless adapter due to \"wireless\" specific problems.", - "packets/s", - PLUGIN_PROC_NAME, - PLUGIN_PROC_MODULE_NETWIRELESS_NAME, - NETDATA_CHART_PRIO_WIRELESS_IFACE + 4, - update_every, - RRDSET_TYPE_LINE); + wireless_dev->st_discarded_packets = rrdset_create_localhost( + "wireless", + wireless_dev->chart_id_net_discarded_packets, + NULL, + wireless_dev->name, + "wireless.discarded_packets", + "Packet discarded in the wireless adapter due to \"wireless\" specific problems.", + "packets/s", + PLUGIN_PROC_NAME, + PLUGIN_PROC_MODULE_NETWIRELESS_NAME, + NETDATA_CHART_PRIO_WIRELESS_IFACE + 4, + update_every, + RRDSET_TYPE_LINE); rrdset_flag_set(wireless_dev->st_discarded_packets, RRDSET_FLAG_DETAIL); - wireless_dev->rd_nwid = rrddim_add(wireless_dev->st_discarded_packets, "nwid", NULL, 1, - 1, RRD_ALGORITHM_INCREMENTAL); - wireless_dev->rd_crypt = rrddim_add(wireless_dev->st_discarded_packets, "crypt", NULL, 1, - 1, RRD_ALGORITHM_INCREMENTAL); - wireless_dev->rd_frag = rrddim_add(wireless_dev->st_discarded_packets, "frag", NULL, 1, - 1, RRD_ALGORITHM_INCREMENTAL); - wireless_dev->rd_retry = rrddim_add(wireless_dev->st_discarded_packets, "retry", NULL, 1, - 1, RRD_ALGORITHM_INCREMENTAL); - wireless_dev->rd_misc = rrddim_add(wireless_dev->st_discarded_packets, "misc", NULL, 1, - 1, RRD_ALGORITHM_INCREMENTAL); - } else { - rrdset_next(wireless_dev->st_discarded_packets); - } - - rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_nwid, - (collected_number)wireless_dev->nwid); - - rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_crypt, - (collected_number)wireless_dev->crypt); + wireless_dev->rd_nwid = rrddim_add(wireless_dev->st_discarded_packets, "nwid", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + wireless_dev->rd_crypt = rrddim_add(wireless_dev->st_discarded_packets, "crypt", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + wireless_dev->rd_frag = rrddim_add(wireless_dev->st_discarded_packets, "frag", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + wireless_dev->rd_retry = rrddim_add(wireless_dev->st_discarded_packets, "retry", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + wireless_dev->rd_misc = rrddim_add(wireless_dev->st_discarded_packets, "misc", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_frag, - (collected_number)wireless_dev->frag); - - rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_retry, - (collected_number)wireless_dev->retry); + add_labels_to_wireless(wireless_dev, wireless_dev->st_discarded_packets); + } + else + rrdset_next(wireless_dev->st_discarded_packets); - rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_misc, - (collected_number)wireless_dev->misc); + rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_nwid, (collected_number)wireless_dev->nwid); + rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_crypt, (collected_number)wireless_dev->crypt); + rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_frag, (collected_number)wireless_dev->frag); + rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_retry, (collected_number)wireless_dev->retry); + rrddim_set_by_pointer(wireless_dev->st_discarded_packets, wireless_dev->rd_misc, (collected_number)wireless_dev->misc); rrdset_done(wireless_dev->st_discarded_packets); } @@ -420,28 +409,31 @@ int do_proc_net_wireless(int update_every, usec_t dt) wireless_dev->missed_beacon = str2kernel_uint_t(procfile_lineword(ff, l, 10)); if (unlikely(!wireless_dev->st_missed_beacon)) { - wireless_dev->st_missed_beacon = rrdset_create_localhost("wireless", - wireless_dev->chart_id_net_missed_beacon, - NULL, - wireless_dev->name, - "wireless.missed_beacons", - "Number of missed beacons.", - "frames/s", - PLUGIN_PROC_NAME, - PLUGIN_PROC_MODULE_NETWIRELESS_NAME, - NETDATA_CHART_PRIO_WIRELESS_IFACE + 5, - update_every, - RRDSET_TYPE_LINE); + wireless_dev->st_missed_beacon = rrdset_create_localhost( + "wireless", + wireless_dev->chart_id_net_missed_beacon, + NULL, + wireless_dev->name, + "wireless.missed_beacons", + "Number of missed beacons.", + "frames/s", + PLUGIN_PROC_NAME, + PLUGIN_PROC_MODULE_NETWIRELESS_NAME, + NETDATA_CHART_PRIO_WIRELESS_IFACE + 5, + update_every, + RRDSET_TYPE_LINE); + rrdset_flag_set(wireless_dev->st_missed_beacon, RRDSET_FLAG_DETAIL); - wireless_dev->rd_missed_beacon = rrddim_add(wireless_dev->st_missed_beacon, "missed_beacons", - NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); - } else { - rrdset_next(wireless_dev->st_missed_beacon); + wireless_dev->rd_missed_beacon = rrddim_add(wireless_dev->st_missed_beacon, "missed_beacons", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL); + + add_labels_to_wireless(wireless_dev, wireless_dev->st_missed_beacon); } + else + rrdset_next(wireless_dev->st_missed_beacon); + + rrddim_set_by_pointer(wireless_dev->st_missed_beacon, wireless_dev->rd_missed_beacon, (collected_number)wireless_dev->missed_beacon); - rrddim_set_by_pointer(wireless_dev->st_missed_beacon, wireless_dev->rd_missed_beacon, - (collected_number)wireless_dev->missed_beacon); rrdset_done(wireless_dev->st_missed_beacon); } diff --git a/collectors/proc.plugin/proc_pagetypeinfo.c b/collectors/proc.plugin/proc_pagetypeinfo.c index e1026cf515..017edc49a9 100644 --- a/collectors/proc.plugin/proc_pagetypeinfo.c +++ b/collectors/proc.plugin/proc_pagetypeinfo.c @@ -242,15 +242,14 @@ int do_proc_pagetypeinfo(int update_every, usec_t dt) { // "Node" + NUMA-NodeID + ZoneName + TypeName char setname[4+1+MAX_ZONETYPE_NAME+1+MAX_PAGETYPE_NAME +1]; - snprintfz(setname, MAX_ZONETYPE_NAME + MAX_PAGETYPE_NAME, "Node %d %s %s", - pgl->node, pgl->zone, pgl->type); + snprintfz(setname, MAX_ZONETYPE_NAME + MAX_PAGETYPE_NAME, "Node %d %s %s", pgl->node, pgl->zone, pgl->type); st_nodezonetype[p] = rrdset_create_localhost( "mem" , setid , NULL , "pagetype" - , NULL + , "mem.pagetype" , setname , "B" , PLUGIN_PROC_NAME @@ -259,6 +258,13 @@ int do_proc_pagetypeinfo(int update_every, usec_t dt) { , update_every , RRDSET_TYPE_STACKED ); + + char node[50+1]; + snprintfz(node, 50, "node%d", pgl->node); + rrdlabels_add(st_nodezonetype[p]->state->chart_labels, "node_id", node, RRDLABEL_SRC_AUTO); + rrdlabels_add(st_nodezonetype[p]->state->chart_labels, "node_zone", pgl->zone, RRDLABEL_SRC_AUTO); + rrdlabels_add(st_nodezonetype[p]->state->chart_labels, "node_type", pgl->type, RRDLABEL_SRC_AUTO); + for (o = 0; o < pageorders_cnt; o++) { char dimid[3+1]; snprintfz(dimid, 3, "%lu", o); diff --git a/collectors/proc.plugin/proc_softirqs.c b/collectors/proc.plugin/proc_softirqs.c index bb14c15966..7eff28c989 100644 --- a/collectors/proc.plugin/proc_softirqs.c +++ b/collectors/proc.plugin/proc_softirqs.c @@ -217,6 +217,10 @@ int do_proc_softirqs(int update_every, usec_t dt) { , update_every , RRDSET_TYPE_STACKED ); + + char core[50+1]; + snprintfz(core, 50, "cpu%d", c); + rrdlabels_add(core_st[c]->state->chart_labels, "cpu", core, RRDLABEL_SRC_AUTO); } else rrdset_next(core_st[c]); diff --git a/collectors/proc.plugin/proc_stat.c b/collectors/proc.plugin/proc_stat.c index c889f0736e..6faba55a91 100644 --- a/collectors/proc.plugin/proc_stat.c +++ b/collectors/proc.plugin/proc_stat.c @@ -1039,6 +1039,10 @@ int do_proc_stat(int update_every, usec_t dt) { , RRDSET_TYPE_STACKED ); + char corebuf[50+1]; + snprintfz(corebuf, 50, "cpu%zu", core); + rrdlabels_add(cpuidle_charts[core].st->state->chart_labels, "cpu", corebuf, RRDLABEL_SRC_AUTO); + char cpuidle_dim_id[RRD_ID_LENGTH_MAX + 1]; cpuidle_charts[core].active_time_rd = rrddim_add(cpuidle_charts[core].st, "active", "C0 (active)", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL); for(state = 0; state < cpuidle_charts[core].cpuidle_state_len; state++) { diff --git a/collectors/proc.plugin/sys_block_zram.c b/collectors/proc.plugin/sys_block_zram.c index 3a39b3b66c..ddd1e7ae01 100644 --- a/collectors/proc.plugin/sys_block_zram.c +++ b/collectors/proc.plugin/sys_block_zram.c @@ -75,6 +75,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); snprintfz(chart_name, RRD_ID_LENGTH_MAX, "zram_savings.%s", name); d->st_savings = rrdset_create_localhost( @@ -92,6 +93,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); snprintfz(chart_name, RRD_ID_LENGTH_MAX, "zram_ratio.%s", name); d->st_comp_ratio = rrdset_create_localhost( @@ -108,6 +110,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); snprintfz(chart_name, RRD_ID_LENGTH_MAX, "zram_efficiency.%s", name); d->st_alloc_efficiency = rrdset_create_localhost( @@ -124,6 +127,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); } static int init_devices(DICTIONARY *devices, unsigned int zram_id, int update_every) { diff --git a/collectors/proc.plugin/sys_class_power_supply.c b/collectors/proc.plugin/sys_class_power_supply.c index c558a384da..a80d46e937 100644 --- a/collectors/proc.plugin/sys_class_power_supply.c +++ b/collectors/proc.plugin/sys_class_power_supply.c @@ -112,6 +112,10 @@ void power_supply_free(struct power_supply *ps) { } } +static void add_labels_to_power_supply(struct power_supply *ps, RRDSET *st) { + rrdlabels_add(st->state->chart_labels, "device", ps->name, RRDLABEL_SRC_AUTO); +} + int do_sys_class_power_supply(int update_every, usec_t dt) { (void)dt; static int do_capacity = -1, do_property[3] = {-1}; @@ -358,6 +362,8 @@ int do_sys_class_power_supply(int update_every, usec_t dt) { , update_every , RRDSET_TYPE_LINE ); + + add_labels_to_power_supply(ps, ps->capacity->st); } else rrdset_next(ps->capacity->st); @@ -389,6 +395,8 @@ int do_sys_class_power_supply(int update_every, usec_t dt) { , update_every , RRDSET_TYPE_LINE ); + + add_labels_to_power_supply(ps, pr->st); } else rrdset_next(pr->st); diff --git a/collectors/proc.plugin/sys_devices_system_node.c b/collectors/proc.plugin/sys_devices_system_node.c index ff408ed88e..fd33943097 100644 --- a/collectors/proc.plugin/sys_devices_system_node.c +++ b/collectors/proc.plugin/sys_devices_system_node.c @@ -115,6 +115,8 @@ int do_proc_sys_devices_system_node(int update_every, usec_t dt) { , RRDSET_TYPE_LINE ); + rrdlabels_add(m->numastat_st->state->chart_labels, "numa_node", m->name, RRDLABEL_SRC_AUTO); + rrdset_flag_set(m->numastat_st, RRDSET_FLAG_DETAIL); rrddim_add(m->numastat_st, "numa_hit", "hit", 1, 1, RRD_ALGORITHM_INCREMENTAL); diff --git a/collectors/proc.plugin/sys_fs_btrfs.c b/collectors/proc.plugin/sys_fs_btrfs.c index e28b60a7a5..158587a8f7 100644 --- a/collectors/proc.plugin/sys_fs_btrfs.c +++ b/collectors/proc.plugin/sys_fs_btrfs.c @@ -448,6 +448,11 @@ static inline int find_all_btrfs_pools(const char *path) { return 0; } +static void add_labels_to_btrfs(BTRFS_NODE *n, RRDSET *st) { + rrdlabels_add(st->state->chart_labels, "device", n->id, RRDLABEL_SRC_AUTO); + rrdlabels_add(st->state->chart_labels, "device_label", n->label, RRDLABEL_SRC_AUTO); +} + int do_sys_fs_btrfs(int update_every, usec_t dt) { static int initialized = 0 , do_allocation_disks = CONFIG_BOOLEAN_AUTO @@ -579,6 +584,8 @@ int do_sys_fs_btrfs(int update_every, usec_t dt) { node->rd_allocation_disks_metadata_used = rrddim_add(node->st_allocation_disks, "meta_used", "meta used", 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); node->rd_allocation_disks_system_free = rrddim_add(node->st_allocation_disks, "sys_free", "sys free", 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); node->rd_allocation_disks_system_used = rrddim_add(node->st_allocation_disks, "sys_used", "sys used", 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_btrfs(node, node->st_allocation_disks); } else rrdset_next(node->st_allocation_disks); @@ -632,6 +639,8 @@ int do_sys_fs_btrfs(int update_every, usec_t dt) { node->rd_allocation_data_free = rrddim_add(node->st_allocation_data, "free", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); node->rd_allocation_data_used = rrddim_add(node->st_allocation_data, "used", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_btrfs(node, node->st_allocation_data); } else rrdset_next(node->st_allocation_data); @@ -676,6 +685,8 @@ int do_sys_fs_btrfs(int update_every, usec_t dt) { node->rd_allocation_metadata_free = rrddim_add(node->st_allocation_metadata, "free", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); node->rd_allocation_metadata_used = rrddim_add(node->st_allocation_metadata, "used", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); node->rd_allocation_metadata_reserved = rrddim_add(node->st_allocation_metadata, "reserved", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_btrfs(node, node->st_allocation_metadata); } else rrdset_next(node->st_allocation_metadata); @@ -720,6 +731,8 @@ int do_sys_fs_btrfs(int update_every, usec_t dt) { node->rd_allocation_system_free = rrddim_add(node->st_allocation_system, "free", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); node->rd_allocation_system_used = rrddim_add(node->st_allocation_system, "used", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE); + + add_labels_to_btrfs(node, node->st_allocation_system); } else rrdset_next(node->st_allocation_system); diff --git a/database/rrd.h b/database/rrd.h index 179dd17ff3..a65d4ca742 100644 --- a/database/rrd.h +++ b/database/rrd.h @@ -197,15 +197,16 @@ typedef enum rrddim_flags { #define rrddim_flag_clear(rd, flag) __atomic_and_fetch(&((rd)->flags), ~(flag), __ATOMIC_SEQ_CST) typedef enum rrdlabel_source { - RRDLABEL_SRC_AUTO = (1 << 0), // set when Netdata found the label by some automation - RRDLABEL_SRC_CONFIG = (1 << 1), // set when the user configured the label - RRDLABEL_SRC_K8S = (1 << 2), // set when this label is found from k8s (RRDLABEL_SRC_AUTO should also be set) - RRDLABEL_SRC_ACLK = (1 << 3), // set when this label is found from ACLK (RRDLABEL_SRC_AUTO should also be set) + RRDLABEL_SRC_AUTO = (1 << 0), // set when Netdata found the label by some automation + RRDLABEL_SRC_CONFIG = (1 << 1), // set when the user configured the label + RRDLABEL_SRC_K8S = (1 << 2), // set when this label is found from k8s (RRDLABEL_SRC_AUTO should also be set) + RRDLABEL_SRC_ACLK = (1 << 3), // set when this label is found from ACLK (RRDLABEL_SRC_AUTO should also be set) // more sources can be added here - RRDLABEL_FLAG_OLD = (1 << 30), // marks set for rrdlabels internal use - they are not exposed outside rrdlabels - RRDLABEL_FLAG_NEW = (1 << 31) // + RRDLABEL_FLAG_PERMANENT = (1 << 29), // set when this label should never be removed (can be overwritten though) + RRDLABEL_FLAG_OLD = (1 << 30), // marks for rrdlabels internal use - they are not exposed outside rrdlabels + RRDLABEL_FLAG_NEW = (1 << 31) // marks for rrdlabels internal use - they are not exposed outside rrdlabels } RRDLABEL_SRC; extern DICTIONARY *rrdlabels_create(void); diff --git a/database/rrdlabels.c b/database/rrdlabels.c index 1b93fdd49d..b7fcf0508e 100644 --- a/database/rrdlabels.c +++ b/database/rrdlabels.c @@ -369,11 +369,11 @@ __attribute__((constructor)) void initialize_labels_keys_char_map(void) { } -static size_t rrdlabels_sanitize(unsigned char *dst, const unsigned char *src, size_t dst_size, unsigned char *char_map, bool utf) { +static size_t rrdlabels_sanitize(unsigned char *dst, const unsigned char *src, size_t dst_size, unsigned char *char_map, bool utf, const char *empty) { if(unlikely(!dst_size)) return 0; if(unlikely(!src || !*src)) { - *dst = '\0'; - return 0; + strncpyz((char *)dst, empty, dst_size); + return strlen((char *)dst); } unsigned char *d = dst; @@ -456,11 +456,11 @@ static size_t rrdlabels_sanitize(unsigned char *dst, const unsigned char *src, s } static inline size_t rrdlabels_sanitize_name(char *dst, const char *src, size_t dst_size) { - return rrdlabels_sanitize((unsigned char *)dst, (const unsigned char *)src, dst_size, label_names_char_map, 0); + return rrdlabels_sanitize((unsigned char *)dst, (const unsigned char *)src, dst_size, label_names_char_map, 0, ""); } static inline size_t rrdlabels_sanitize_value(char *dst, const char *src, size_t dst_size) { - return rrdlabels_sanitize((unsigned char *)dst, (const unsigned char *)src, dst_size, label_values_char_map, 1); + return rrdlabels_sanitize((unsigned char *)dst, (const unsigned char *)src, dst_size, label_values_char_map, 1, "[unset]"); } // ---------------------------------------------------------------------------- @@ -477,7 +477,8 @@ static void rrdlabel_insert_callback(const char *name, void *value, void *data) RRDLABEL *lb = (RRDLABEL *)value; // label_value is already allocated by the STRING - lb->label_source |= RRDLABEL_FLAG_NEW; + lb->label_source |= RRDLABEL_FLAG_NEW; + lb->label_source &= ~RRDLABEL_FLAG_OLD; } static void rrdlabel_delete_callback(const char *name, void *value, void *data) { @@ -497,8 +498,9 @@ static void rrdlabel_conflict_callback(const char *name, void *oldvalue, void *n if(lbold->label_value == lbnew->label_value || strcmp(string2str(lbold->label_value), string2str(lbnew->label_value)) == 0) { // they are the same - lbold->label_source |= lbnew->label_source; - lbold->label_source |= RRDLABEL_FLAG_OLD; + lbold->label_source |= lbnew->label_source; + lbold->label_source |= RRDLABEL_FLAG_OLD; + lbold->label_source &= ~RRDLABEL_FLAG_NEW; // free the new one string_freez(lbnew->label_value); @@ -506,9 +508,10 @@ static void rrdlabel_conflict_callback(const char *name, void *oldvalue, void *n else { // they are different string_freez(lbold->label_value); - lbold->label_value = lbnew->label_value; - lbold->label_source = lbnew->label_source; - lbold->label_source |= RRDLABEL_FLAG_NEW; + lbold->label_value = lbnew->label_value; + lbold->label_source = lbnew->label_source; + lbold->label_source |= RRDLABEL_FLAG_NEW; + lbold->label_source &= ~RRDLABEL_FLAG_OLD; } } @@ -654,7 +657,7 @@ static int remove_not_old_not_new_callback(const char *name, void *value, void * DICTIONARY *dict = (DICTIONARY *)data; RRDLABEL *lb = (RRDLABEL *)value; - if(!(lb->label_source & RRDLABEL_FLAG_OLD) && !(lb->label_source & RRDLABEL_FLAG_NEW)) { + if(!(lb->label_source & (RRDLABEL_FLAG_OLD | RRDLABEL_FLAG_NEW | RRDLABEL_FLAG_PERMANENT))) { dictionary_del_having_write_lock(dict, name); return 1; } diff --git a/database/rrdset.c b/database/rrdset.c index 6a437555b5..3e0366cc31 100644 --- a/database/rrdset.c +++ b/database/rrdset.c @@ -487,6 +487,19 @@ static inline RRDSET *rrdset_find_on_create(RRDHOST *host, const char *fullid) { return NULL; } +static inline void rrdset_update_permanent_labels(RRDSET *st) { + if(!st->state || !st->state->chart_labels) return; + + if(st->plugin_name) + rrdlabels_add(st->state->chart_labels, "_collect_plugin", st->plugin_name, RRDLABEL_SRC_AUTO| RRDLABEL_FLAG_PERMANENT); + + if(st->module_name) + rrdlabels_add(st->state->chart_labels, "_collect_module", st->module_name, RRDLABEL_SRC_AUTO| RRDLABEL_FLAG_PERMANENT); + + if(st->family) + rrdlabels_add(st->state->chart_labels, "_instance_family", st->family, RRDLABEL_SRC_AUTO| RRDLABEL_FLAG_PERMANENT); +} + RRDSET *rrdset_create_custom( RRDHOST *host , const char *type @@ -667,6 +680,7 @@ RRDSET *rrdset_create_custom( } /* Fall-through during switch from archived to active so that the host lock is taken and health is linked */ if (!changed_from_archived_to_active) { + rrdset_update_permanent_labels(st); rrdcontext_updated_rrdset(st); return st; } @@ -758,6 +772,7 @@ RRDSET *rrdset_create_custom( netdata_rwlock_init(&st->rrdset_rwlock); st->state->chart_labels = rrdlabels_create(); + rrdset_update_permanent_labels(st); if(name && *name && rrdset_set_name(st, name)) // we did set the name -- cgit v1.2.3