summaryrefslogtreecommitdiffstats
path: root/daemon/analytics.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/analytics.c')
-rw-r--r--daemon/analytics.c86
1 files changed, 41 insertions, 45 deletions
diff --git a/daemon/analytics.c b/daemon/analytics.c
index 370818b8a..3d0e514d6 100644
--- a/daemon/analytics.c
+++ b/daemon/analytics.c
@@ -10,8 +10,8 @@ extern void analytics_build_info (BUFFER *b);
extern int aclk_connected;
struct collector {
- char *plugin;
- char *module;
+ const char *plugin;
+ const char *module;
};
struct array_printer {
@@ -249,8 +249,7 @@ void analytics_exporters(void)
buffer_free(bi);
}
-int collector_counter_callb(const char *name, void *entry, void *data) {
- (void)name;
+int collector_counter_callb(const DICTIONARY_ITEM *item __maybe_unused, void *entry, void *data) {
struct array_printer *ap = (struct array_printer *)data;
struct collector *col = (struct collector *)entry;
@@ -279,19 +278,22 @@ int collector_counter_callb(const char *name, void *entry, void *data) {
void analytics_collectors(void)
{
RRDSET *st;
- DICTIONARY *dict = dictionary_create(DICTIONARY_FLAG_SINGLE_THREADED);
+ DICTIONARY *dict = dictionary_create(DICT_OPTION_SINGLE_THREADED);
char name[500];
BUFFER *bt = buffer_create(1000);
- rrdset_foreach_read(st, localhost)
- {
- if (rrdset_is_available_for_viewers(st)) {
- struct collector col = { .plugin = st->plugin_name ? st->plugin_name : "",
- .module = st->module_name ? st->module_name : "" };
- snprintfz(name, 499, "%s:%s", col.plugin, col.module);
- dictionary_set(dict, name, &col, sizeof(struct collector));
- }
+ rrdset_foreach_read(st, localhost) {
+ if(!rrdset_is_available_for_viewers(st))
+ continue;
+
+ struct collector col = {
+ .plugin = rrdset_plugin_name(st),
+ .module = rrdset_module_name(st)
+ };
+ snprintfz(name, 499, "%s:%s", col.plugin, col.module);
+ dictionary_set(dict, name, &col, sizeof(struct collector));
}
+ rrdset_foreach_done(st);
struct array_printer ap;
ap.c = 0;
@@ -335,11 +337,12 @@ void analytics_alarms_notifications(void)
BUFFER *b = buffer_create(1000);
int cnt = 0;
- FILE *fp = mypopen(script, &command_pid);
- if (fp) {
+ FILE *fp_child_input;
+ FILE *fp_child_output = netdata_popen(script, &command_pid, &fp_child_input);
+ if (fp_child_output) {
char line[200 + 1];
- while (fgets(line, 200, fp) != NULL) {
+ while (fgets(line, 200, fp_child_output) != NULL) {
char *end = line;
while (*end && *end != '\n')
end++;
@@ -352,7 +355,7 @@ void analytics_alarms_notifications(void)
cnt++;
}
- mypclose(fp, command_pid);
+ netdata_pclose(fp_child_input, fp_child_output, command_pid);
}
freez(script);
@@ -382,8 +385,8 @@ void analytics_https(void)
BUFFER *b = buffer_create(30);
#ifdef ENABLE_HTTPS
analytics_exporting_connectors_ssl(b);
- buffer_strcat(b, netdata_client_ctx && localhost->ssl.flags == NETDATA_SSL_HANDSHAKE_COMPLETE && __atomic_load_n(&localhost->rrdpush_sender_connected, __ATOMIC_SEQ_CST) ? "streaming|" : "|");
- buffer_strcat(b, netdata_srv_ctx ? "web" : "");
+ buffer_strcat(b, netdata_ssl_client_ctx && rrdhost_flag_check(localhost, RRDHOST_FLAG_RRDPUSH_SENDER_CONNECTED) && localhost->sender->ssl.flags == NETDATA_SSL_HANDSHAKE_COMPLETE ? "streaming|" : "|");
+ buffer_strcat(b, netdata_ssl_srv_ctx ? "web" : "");
#else
buffer_strcat(b, "||");
#endif
@@ -396,12 +399,11 @@ void analytics_charts(void)
{
RRDSET *st;
int c = 0;
+
rrdset_foreach_read(st, localhost)
- {
- if (rrdset_is_available_for_viewers(st)) {
- c++;
- }
- }
+ if(rrdset_is_available_for_viewers(st)) c++;
+ rrdset_foreach_done(st);
+
{
char b[7];
snprintfz(b, 6, "%d", c);
@@ -413,22 +415,19 @@ void analytics_metrics(void)
{
RRDSET *st;
long int dimensions = 0;
- RRDDIM *rd;
- rrdset_foreach_read(st, localhost)
- {
- rrdset_rdlock(st);
-
+ rrdset_foreach_read(st, localhost) {
if (rrdset_is_available_for_viewers(st)) {
- rrddim_foreach_read(rd, st)
- {
- if (rrddim_flag_check(rd, RRDDIM_FLAG_HIDDEN) || rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE))
+ RRDDIM *rd;
+ rrddim_foreach_read(rd, st) {
+ if (rrddim_option_check(rd, RRDDIM_OPTION_HIDDEN) || rrddim_flag_check(rd, RRDDIM_FLAG_OBSOLETE))
continue;
dimensions++;
}
+ rrddim_foreach_done(rd);
}
-
- rrdset_unlock(st);
}
+ rrdset_foreach_done(st);
+
{
char b[7];
snprintfz(b, 6, "%ld", dimensions);
@@ -441,7 +440,7 @@ void analytics_alarms(void)
int alarm_warn = 0, alarm_crit = 0, alarm_normal = 0;
char b[10];
RRDCALC *rc;
- for (rc = localhost->alarms; rc; rc = rc->next) {
+ foreach_rrdcalc_in_rrdhost_read(localhost, rc) {
if (unlikely(!rc->rrdset || !rc->rrdset->last_collected_time.tv_sec))
continue;
@@ -456,6 +455,7 @@ void analytics_alarms(void)
alarm_normal++;
}
}
+ foreach_rrdcalc_in_rrdhost_done(rc);
snprintfz(b, 9, "%d", alarm_normal);
analytics_set_data(&analytics_data.netdata_alarms_normal, b);
@@ -525,21 +525,16 @@ void analytics_gather_immutable_meta_data(void)
*/
void analytics_gather_mutable_meta_data(void)
{
- rrdhost_rdlock(localhost);
-
analytics_collectors();
analytics_alarms();
analytics_charts();
analytics_metrics();
analytics_aclk();
-
- rrdhost_unlock(localhost);
-
analytics_mirrored_hosts();
analytics_alarms_notifications();
analytics_set_data(
- &analytics_data.netdata_config_is_parent, (localhost->next || configured_as_parent()) ? "true" : "false");
+ &analytics_data.netdata_config_is_parent, (rrdhost_hosts_available() > 1 || configured_as_parent()) ? "true" : "false");
char *claim_id = get_agent_claimid();
analytics_set_data(&analytics_data.netdata_host_agent_claimed, claim_id ? "true" : "false");
@@ -1022,11 +1017,12 @@ void send_statistics(const char *action, const char *action_result, const char *
info("%s '%s' '%s' '%s'", as_script, action, action_result, action_data);
- FILE *fp = mypopen(command_to_run, &command_pid);
- if (fp) {
+ FILE *fp_child_input;
+ FILE *fp_child_output = netdata_popen(command_to_run, &command_pid, &fp_child_input);
+ if (fp_child_output) {
char buffer[4 + 1];
- char *s = fgets(buffer, 4, fp);
- int exit_code = mypclose(fp, command_pid);
+ char *s = fgets(buffer, 4, fp_child_output);
+ int exit_code = netdata_pclose(fp_child_input, fp_child_output, command_pid);
if (exit_code)
error("Execution of anonymous statistics script returned %d.", exit_code);
if (s && strncmp(buffer, "200", 3))