mirror of
https://github.com/netdata/netdata.git
synced 2025-04-17 03:02:41 +00:00

* modularized all external plugins * added README.md in plugins * fixed title * fixed typo * relative link to external plugins * external plugins configuration README * added plugins link * remove plugins link * plugin names are links * added links to external plugins * removed unecessary spacing * list to table * added language * fixed typo * list to table on internal plugins * added more documentation to internal plugins * moved python, node, and bash code and configs into the external plugins * added statsd README * fix bug with corrupting config.h every 2nd compilation * moved all config files together with their code * more documentation * diskspace info * fixed broken links in apps.plugin * added backends docs * updated plugins readme * move nc-backend.sh to backends * created daemon directory * moved all code outside src/ * fixed readme identation * renamed plugins.d.plugin to plugins.d * updated readme * removed linux- from linux plugins * updated readme * updated readme * updated readme * updated readme * updated readme * updated readme * fixed README.md links * fixed netdata tree links * updated codacy, codeclimate and lgtm excluded paths * update CMakeLists.txt * updated automake options at top directory * libnetdata slit into directories * updated READMEs * updated READMEs * updated ARL docs * updated ARL docs * moved /plugins to /collectors * moved all external plugins outside plugins.d * updated codacy, codeclimate, lgtm * updated README * updated url * updated readme * updated readme * updated readme * updated readme * moved api and web into webserver * web/api web/gui web/server * modularized webserver * removed web/gui/version.txt
61 lines
2.2 KiB
C
61 lines
2.2 KiB
C
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#define NETDATA_RRD_INTERNALS
|
|
#include "rrd.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// RRDFAMILY index
|
|
|
|
int rrdfamily_compare(void *a, void *b) {
|
|
if(((RRDFAMILY *)a)->hash_family < ((RRDFAMILY *)b)->hash_family) return -1;
|
|
else if(((RRDFAMILY *)a)->hash_family > ((RRDFAMILY *)b)->hash_family) return 1;
|
|
else return strcmp(((RRDFAMILY *)a)->family, ((RRDFAMILY *)b)->family);
|
|
}
|
|
|
|
#define rrdfamily_index_add(host, rc) (RRDFAMILY *)avl_insert_lock(&((host)->rrdfamily_root_index), (avl *)(rc))
|
|
#define rrdfamily_index_del(host, rc) (RRDFAMILY *)avl_remove_lock(&((host)->rrdfamily_root_index), (avl *)(rc))
|
|
|
|
static RRDFAMILY *rrdfamily_index_find(RRDHOST *host, const char *id, uint32_t hash) {
|
|
RRDFAMILY tmp;
|
|
tmp.family = id;
|
|
tmp.hash_family = (hash)?hash:simple_hash(tmp.family);
|
|
|
|
return (RRDFAMILY *)avl_search_lock(&(host->rrdfamily_root_index), (avl *) &tmp);
|
|
}
|
|
|
|
RRDFAMILY *rrdfamily_create(RRDHOST *host, const char *id) {
|
|
RRDFAMILY *rc = rrdfamily_index_find(host, id, 0);
|
|
if(!rc) {
|
|
rc = callocz(1, sizeof(RRDFAMILY));
|
|
|
|
rc->family = strdupz(id);
|
|
rc->hash_family = simple_hash(rc->family);
|
|
|
|
// initialize the variables index
|
|
avl_init_lock(&rc->rrdvar_root_index, rrdvar_compare);
|
|
|
|
RRDFAMILY *ret = rrdfamily_index_add(host, rc);
|
|
if(ret != rc)
|
|
error("RRDFAMILY: INTERNAL ERROR: Expected to INSERT RRDFAMILY '%s' into index, but inserted '%s'.", rc->family, (ret)?ret->family:"NONE");
|
|
}
|
|
|
|
rc->use_count++;
|
|
return rc;
|
|
}
|
|
|
|
void rrdfamily_free(RRDHOST *host, RRDFAMILY *rc) {
|
|
rc->use_count--;
|
|
if(!rc->use_count) {
|
|
RRDFAMILY *ret = rrdfamily_index_del(host, rc);
|
|
if(ret != rc)
|
|
error("RRDFAMILY: INTERNAL ERROR: Expected to DELETE RRDFAMILY '%s' from index, but deleted '%s'.", rc->family, (ret)?ret->family:"NONE");
|
|
else {
|
|
debug(D_RRD_CALLS, "RRDFAMILY: Cleaning up remaining family variables for host '%s', family '%s'", host->hostname, rc->family);
|
|
rrdvar_free_remaining_variables(host, &rc->rrdvar_root_index);
|
|
|
|
freez((void *) rc->family);
|
|
freez(rc);
|
|
}
|
|
}
|
|
}
|
|
|