diff options
author | Vladimir Kobal <vlad@prokk.net> | 2022-02-21 16:56:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-21 16:56:09 +0200 |
commit | 32cd848cb9b1c14a68fcb82549f38c13a788ae73 (patch) | |
tree | 5d55531c57c5ee59ca3e44405eb71e1898f1ce8c /database | |
parent | b9f05de31513ed3bce583c638156bc8aee0bd03a (diff) |
Add serial numbers to chart names (#12067)
Diffstat (limited to 'database')
-rw-r--r-- | database/rrdset.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/database/rrdset.c b/database/rrdset.c index 39f11d8ea2..5809f60b9c 100644 --- a/database/rrdset.c +++ b/database/rrdset.c @@ -144,25 +144,38 @@ int rrdset_set_name(RRDSET *st, const char *name) { debug(D_RRD_CALLS, "rrdset_set_name() old: '%s', new: '%s'", st->name?st->name:"", name); - char b[CONFIG_MAX_VALUE + 1]; - char n[RRD_ID_LENGTH_MAX + 1]; + char full_name[RRD_ID_LENGTH_MAX + 1]; + char sanitized_name[CONFIG_MAX_VALUE + 1]; + char new_name[CONFIG_MAX_VALUE + 1]; - snprintfz(n, RRD_ID_LENGTH_MAX, "%s.%s", st->type, name); - rrdset_strncpyz_name(b, n, CONFIG_MAX_VALUE); + snprintfz(full_name, RRD_ID_LENGTH_MAX, "%s.%s", st->type, name); + rrdset_strncpyz_name(sanitized_name, full_name, CONFIG_MAX_VALUE); + strncpyz(new_name, sanitized_name, CONFIG_MAX_VALUE); - if(rrdset_index_find_name(host, b, 0)) { - info("RRDSET: chart name '%s' on host '%s' already exists.", b, host->hostname); - return 0; + if(rrdset_index_find_name(host, new_name, 0)) { + info("RRDSET: chart name '%s' on host '%s' already exists.", new_name, host->hostname); + if(!strcmp(st->id, full_name) && !st->name) { + unsigned i = 1; + + do { + snprintfz(new_name, CONFIG_MAX_VALUE, "%s_%u", sanitized_name, i); + i++; + } while (rrdset_index_find_name(host, new_name, 0)); + + info("RRDSET: using name '%s' for chart '%s' on host '%s'.", new_name, full_name, host->hostname); + } else { + return 0; + } } if(st->name) { rrdset_index_del_name(host, st); - st->name = config_set_default(st->config_section, "name", b); + st->name = config_set_default(st->config_section, "name", new_name); st->hash_name = simple_hash(st->name); rrdsetvar_rename_all(st); } else { - st->name = config_get(st->config_section, "name", b); + st->name = config_get(st->config_section, "name", new_name); st->hash_name = simple_hash(st->name); } |