@cryptotaxi247 / netdata-1 / commits / d002afbe5

Extra posthog attributes (#11237)

* add some more analytics items to posthog * add CI check * use empty string if install_type can not be read * better check of CI variable * reduce scope * get prebuilt distro * check for legacy/ng aclk implementation * use else * add list delimiter to exporting * Revert "check for legacy/ng aclk implementation" This reverts commit 4f0adf872176d75f75232ac95117beebfffdd50d. * formatting * use snprintfz * use a function for getting the value * fix buf size and formatting * fix crash when exporting is not enabled * remove netdata_is_in_ci

Emmanuel Vasilakis committed Jun 28, 2021 at 09:47 UTC d002afbe5663582303979dd188807871c22740e3
6 files changed +164 -12
daemon/analytics.c
+121 -5
@@ -4,6 +4,7 @@
4
5 struct analytics_data analytics_data;
6 extern void analytics_exporting_connectors (BUFFER *b);
7 +extern void analytics_exporting_connectors_ssl (BUFFER *b);
8 extern void analytics_build_info (BUFFER *b);
9 extern int aclk_connected;
10
@@ -54,6 +55,12 @@ void analytics_log_data(void)
55 debug(D_ANALYTICS, "NETDATA_HOST_ACLK_IMPLEMENTATION : [%s]", analytics_data.netdata_host_aclk_implementation);
56 debug(D_ANALYTICS, "NETDATA_HOST_AGENT_CLAIMED : [%s]", analytics_data.netdata_host_agent_claimed);
57 debug(D_ANALYTICS, "NETDATA_HOST_CLOUD_ENABLED : [%s]", analytics_data.netdata_host_cloud_enabled);
58 + debug(D_ANALYTICS, "NETDATA_CONFIG_HTTPS_AVAILABLE : [%s]", analytics_data.netdata_config_https_available);
59 + debug(D_ANALYTICS, "NETDATA_INSTALL_TYPE : [%s]", analytics_data.netdata_install_type);
60 + debug(D_ANALYTICS, "NETDATA_PREBUILT_DISTRO : [%s]", analytics_data.netdata_prebuilt_distro);
61 + debug(D_ANALYTICS, "NETDATA_CONFIG_IS_PRIVATE_REGISTRY : [%s]", analytics_data.netdata_config_is_private_registry);
62 + debug(D_ANALYTICS, "NETDATA_CONFIG_USE_PRIVATE_REGISTRY: [%s]", analytics_data.netdata_config_use_private_registry);
63 + debug(D_ANALYTICS, "NETDATA_CONFIG_OOM_SCORE : [%s]", analytics_data.netdata_config_oom_score);
64 }
65
66 /*
@@ -93,6 +100,12 @@ void analytics_free_data(void)
100 freez(analytics_data.netdata_host_aclk_implementation);
101 freez(analytics_data.netdata_host_agent_claimed);
102 freez(analytics_data.netdata_host_cloud_enabled);
103 + freez(analytics_data.netdata_config_https_available);
104 + freez(analytics_data.netdata_install_type);
105 + freez(analytics_data.netdata_config_is_private_registry);
106 + freez(analytics_data.netdata_config_use_private_registry);
107 + freez(analytics_data.netdata_config_oom_score);
108 + freez(analytics_data.netdata_prebuilt_distro);
109 }
110
111 /*
@@ -184,6 +197,15 @@ void analytics_log_dashboard(void)
197 }
198 }
199
200 +/*
201 + * Called when setting the oom score
202 + */
203 +void analytics_report_oom_score(long long int score){
204 + char b[7];
205 + snprintfz(b, 6, "%d", (int)score);
206 + analytics_set_data(&analytics_data.netdata_config_oom_score, b);
207 +}
208 +
209 void analytics_mirrored_hosts(void)
210 {
211 RRDHOST *host;
@@ -335,6 +357,71 @@ void analytics_alarms_notifications(void)
357 buffer_free(b);
358 }
359
360 +char *get_value_from_key(char *buffer, char *key)
361 +{
362 + char *s = NULL, *t = NULL;
363 + s = t = buffer + strlen(key) + 2;
364 + if (s) {
365 + while (*s == '\'')
366 + s++;
367 + while (*++t != '\0');
368 + while (--t > s && *t == '\'')
369 + *t = '\0';
370 + }
371 + return s;
372 +}
373 +
374 +/*
375 + * Checks for the existance of .install_type file and reads it
376 + */
377 +void analytics_get_install_type(void)
378 +{
379 + char *install_type_filename;
380 + analytics_set_data_str(&analytics_data.netdata_install_type, "");
381 + analytics_set_data_str(&analytics_data.netdata_prebuilt_distro, "");
382 +
383 + int install_type_filename_len = (strlen(netdata_configured_user_config_dir) + strlen(".install-type") + 3);
384 + install_type_filename = mallocz(sizeof(char) * install_type_filename_len);
385 + snprintfz(install_type_filename, install_type_filename_len - 1, "%s/%s", netdata_configured_user_config_dir, ".install-type");
386 + if (unlikely(access(install_type_filename, R_OK) != 0)) {
387 + freez(install_type_filename);
388 + return;
389 + }
390 +
391 + FILE *fp = fopen(install_type_filename, "r");
392 + if (fp) {
393 + char *s, buf[256 + 1];
394 + size_t len = 0;
395 +
396 + while ((s = fgets_trim_len(buf, 256, fp, &len))) {
397 + if (!strncmp(buf, "INSTALL_TYPE='", 14))
398 + analytics_set_data_str(&analytics_data.netdata_install_type, (char *)get_value_from_key(buf, "INSTALL_TYPE"));
399 + else if (!strncmp(buf, "PREBUILT_DISTRO='", 17))
400 + analytics_set_data_str(&analytics_data.netdata_prebuilt_distro, (char *)get_value_from_key(buf, "PREBUILT_DISTRO"));
401 + }
402 + fclose(fp);
403 + }
404 + freez(install_type_filename);
405 +}
406 +
407 +/*
408 + * Pick up if https is actually used
409 + */
410 +void analytics_https(void)
411 +{
412 + BUFFER *b = buffer_create(30);
413 +#ifdef ENABLE_HTTPS
414 + analytics_exporting_connectors_ssl(b);
415 + buffer_strcat(b, netdata_client_ctx && localhost->ssl.flags == NETDATA_SSL_HANDSHAKE_COMPLETE && localhost->rrdpush_sender_connected == 1 ? "streaming|" : "|");
416 + buffer_strcat(b, netdata_srv_ctx ? "web" : "");
417 +#else
418 + buffer_strcat(b, "||");
419 +#endif
420 +
421 + analytics_set_data_str(&analytics_data.netdata_config_https_available, (char *)buffer_tostring(b));
422 + buffer_free(b);
423 +}
424 +
425 void analytics_charts(void)
426 {
427 RRDSET *st;
@@ -426,17 +513,33 @@ void analytics_misc(void)
513 else
514 #endif
515 analytics_set_data(&analytics_data.netdata_host_aclk_available, "false");
516 +
517 + analytics_set_data(&analytics_data.netdata_config_exporting_enabled, appconfig_get_boolean(&exporting_config, CONFIG_SECTION_EXPORTING, "enabled", CONFIG_BOOLEAN_NO) ? "true" : "false");
518 +
519 + analytics_set_data(&analytics_data.netdata_config_is_private_registry, "false");
520 + analytics_set_data(&analytics_data.netdata_config_use_private_registry, "false");
521 +
522 + if (strcmp(
523 + config_get(CONFIG_SECTION_REGISTRY, "registry to announce", "https://registry.my-netdata.io"),
524 + "https://registry.my-netdata.io"))
525 + analytics_set_data(&analytics_data.netdata_config_use_private_registry, "true");
526 +
527 + //do we need both registry to announce and enabled to indicate that this is a private registry ?
528 + if (config_get_boolean(CONFIG_SECTION_REGISTRY, "enabled", CONFIG_BOOLEAN_NO) &&
529 + web_server_mode != WEB_SERVER_MODE_NONE)
530 + analytics_set_data(&analytics_data.netdata_config_is_private_registry, "true");
531 }
532
533 /*
534 * Get the meta data, called from the thread once after the original delay
433 - * These are values that won't change between agent restarts, and therefore
535 + * These are values that won't change during agent runtime, and therefore
536 * don't try to read them on each META event send
537 */
538 void analytics_gather_immutable_meta_data(void)
539 {
540 analytics_misc();
541 analytics_exporters();
542 + analytics_https();
543 }
544
545 /*
@@ -521,7 +624,7 @@ void *analytics_main(void *ptr)
624
625 analytics_gather_immutable_meta_data();
626 analytics_gather_mutable_meta_data();
524 - send_statistics("META", "-", "-");
627 + send_statistics("META_START", "-", "-");
628 analytics_log_data();
629
630 sec = 0;
@@ -567,7 +670,6 @@ void set_late_global_environment()
670 {
671 analytics_set_data(&analytics_data.netdata_config_stream_enabled, default_rrdpush_enabled ? "true" : "false");
672 analytics_set_data_str(&analytics_data.netdata_config_memory_mode, (char *)rrd_memory_mode_name(default_rrd_memory_mode));
570 - analytics_set_data(&analytics_data.netdata_config_exporting_enabled, appconfig_get_boolean(&exporting_config, CONFIG_SECTION_EXPORTING, "enabled", CONFIG_BOOLEAN_NO) ? "true" : "false");
673
674 #ifdef DISABLE_CLOUD
675 analytics_set_data(&analytics_data.netdata_host_cloud_enabled, "false");
@@ -607,6 +709,8 @@ void set_late_global_environment()
709 analytics_set_data_str(&analytics_data.netdata_buildinfo, (char *)buffer_tostring(bi));
710 buffer_free(bi);
711 }
712 +
713 + analytics_get_install_type();
714 }
715
716 static void get_system_timezone(void)
@@ -793,6 +897,12 @@ void set_global_environment()
897 analytics_set_data(&analytics_data.netdata_host_aclk_available, "null");
898 analytics_set_data(&analytics_data.netdata_host_agent_claimed, "null");
899 analytics_set_data(&analytics_data.netdata_host_cloud_enabled, "null");
900 + analytics_set_data(&analytics_data.netdata_config_https_available, "null");
901 + analytics_set_data(&analytics_data.netdata_install_type, "null");
902 + analytics_set_data(&analytics_data.netdata_config_is_private_registry, "null");
903 + analytics_set_data(&analytics_data.netdata_config_use_private_registry, "null");
904 + analytics_set_data(&analytics_data.netdata_config_oom_score, "null");
905 + analytics_set_data(&analytics_data.netdata_prebuilt_distro, "null");
906
907 analytics_data.prometheus_hits = 0;
908 analytics_data.shell_hits = 0;
@@ -874,7 +984,7 @@ void send_statistics(const char *action, const char *action_result, const char *
984
985 sprintf(
986 command_to_run,
877 - "%s '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' ",
987 + "%s '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' '%s' ",
988 as_script,
989 action,
990 action_result,
@@ -910,7 +1020,13 @@ void send_statistics(const char *action, const char *action_result, const char *
1020 analytics_data.netdata_host_aclk_available,
1021 analytics_data.netdata_host_aclk_implementation,
1022 analytics_data.netdata_host_agent_claimed,
913 - analytics_data.netdata_host_cloud_enabled);
1023 + analytics_data.netdata_host_cloud_enabled,
1024 + analytics_data.netdata_config_https_available,
1025 + analytics_data.netdata_install_type,
1026 + analytics_data.netdata_config_is_private_registry,
1027 + analytics_data.netdata_config_use_private_registry,
1028 + analytics_data.netdata_config_oom_score,
1029 + analytics_data.netdata_prebuilt_distro);
1030
1031 info("%s '%s' '%s' '%s'", as_script, action, action_result, action_data);
1032
daemon/analytics.h
+8 -1
@@ -29,7 +29,7 @@
29 },
30
31 /* Needed to calculate the space needed for parameters */
32 -#define ANALYTICS_NO_OF_ITEMS 32
32 +#define ANALYTICS_NO_OF_ITEMS 38
33
34 struct analytics_data {
35 char *netdata_config_stream_enabled;
@@ -64,6 +64,12 @@ struct analytics_data {
64 char *netdata_host_aclk_implementation;
65 char *netdata_host_agent_claimed;
66 char *netdata_host_cloud_enabled;
67 + char *netdata_config_https_available;
68 + char *netdata_install_type;
69 + char *netdata_config_is_private_registry;
70 + char *netdata_config_use_private_registry;
71 + char *netdata_config_oom_score;
72 + char *netdata_prebuilt_distro;
73
74 size_t data_length;
75
@@ -84,6 +90,7 @@ extern void analytics_log_json(void);
90 extern void analytics_log_prometheus(void);
91 extern void analytics_log_dashboard(void);
92 extern void analytics_gather_mutable_meta_data(void);
93 +extern void analytics_report_oom_score(long long int score);
94
95 extern struct analytics_data analytics_data;
96
daemon/anonymous-statistics.sh.in
+13 -3
@@ -22,9 +22,6 @@ if [ -f "@configdir_POST@/.opt-out-from-anonymous-statistics" ] || [ ! "${DO_NOT
22 exit 0
23 fi
24
25 -# Shorten version for easier reporting
26 -NETDATA_VERSION=$(echo "${NETDATA_VERSION}" | sed 's/-.*//g' | tr -d 'v')
27 -
25 # -------------------------------------------------------------------------------------------------
26 # Get the extra variables
27
@@ -60,6 +57,13 @@ NETDATA_HOST_ACLK_AVAILABLE="${32}"
57 NETDATA_HOST_ACLK_IMPLEMENTATION="${33}"
58 NETDATA_HOST_AGENT_CLAIMED="${34}"
59 NETDATA_HOST_CLOUD_ENABLED="${35}"
60 +NETDATA_CONFIG_HTTPS_AVAILABLE="${36}"
61 +NETDATA_INSTALL_TYPE="${37}"
62 +NETDATA_IS_PRIVATE_REGISTRY="${38}"
63 +NETDATA_USE_PRIVATE_REGISTRY="${39}"
64 +NETDATA_CONFIG_OOM_SCORE="${40}"
65 +NETDATA_PREBUILT_DISTRO="${41}"
66 +
67
68 # define body of request to be sent
69 REQ_BODY="$(cat << EOF
@@ -80,6 +84,8 @@ REQ_BODY="$(cat << EOF
84 "netdata_version": "${NETDATA_VERSION}",
85 "netdata_buildinfo": ${NETDATA_BUILDINFO},
86 "netdata_release_channel": ${NETDATA_CONFIG_RELEASE_CHANNEL},
87 + "netdata_install_type": ${NETDATA_INSTALL_TYPE},
88 + "netdata_prebuilt_distro": ${NETDATA_PREBUILT_DISTRO},
89 "host_os_name": "${NETDATA_HOST_OS_NAME}",
90 "host_os_id": "${NETDATA_HOST_OS_ID}",
91 "host_os_id_like": "${NETDATA_HOST_OS_ID_LIKE}",
@@ -114,10 +120,14 @@ REQ_BODY="$(cat << EOF
120 "config_page_cache_size": ${NETDATA_CONFIG_PAGE_CACHE_SIZE},
121 "config_multidb_disk_quota": ${NETDATA_CONFIG_MULTIDB_DISK_QUOTA},
122 "config_https_enabled": ${NETDATA_CONFIG_HTTPS_ENABLED},
123 + "config_https_available": ${NETDATA_CONFIG_HTTPS_AVAILABLE},
124 "config_web_enabled": ${NETDATA_CONFIG_WEB_ENABLED},
125 "config_exporting_enabled": ${NETDATA_CONFIG_EXPORTING_ENABLED},
126 "config_is_parent": ${NETDATA_CONFIG_IS_PARENT},
127 + "config_is_private_registry": ${NETDATA_IS_PRIVATE_REGISTRY},
128 + "config_private_registry_used": ${NETDATA_USE_PRIVATE_REGISTRY},
129 "config_hosts_available": ${NETDATA_CONFIG_HOSTS_AVAILABLE},
130 + "config_oom_score": ${NETDATA_CONFIG_OOM_SCORE},
131 "alarms_normal": ${NETDATA_ALARMS_NORMAL},
132 "alarms_warning": ${NETDATA_ALARMS_WARNING},
133 "alarms_critical": ${NETDATA_ALARMS_CRITICAL},
daemon/daemon.c
+4 -1
@@ -181,8 +181,10 @@ static void oom_score_adj(void) {
181 return;
182 }
183
184 - if(old_score != 0)
184 + if (old_score != 0) {
185 wanted_score = old_score;
186 + analytics_report_oom_score(old_score);
187 + }
188
189 // check the environment
190 char *s = getenv("OOMScoreAdjust");
@@ -234,6 +236,7 @@ static void oom_score_adj(void) {
236 info("Adjusted my Out-Of-Memory (OOM) score from %d to %d.", (int)old_score, (int)final_score);
237 else
238 error("Adjusted my Out-Of-Memory (OOM) score from %d to %d, but it has been set to %d.", (int)old_score, (int)wanted_score, (int)final_score);
239 + analytics_report_oom_score(final_score);
240 }
241 else
242 error("Failed to adjust my Out-Of-Memory (OOM) score to %d. Running with %d. (systemd systems may change it via netdata.service)", (int)wanted_score, (int)old_score);
daemon/main.c
+2 -2
@@ -1267,6 +1267,8 @@ int main(int argc, char **argv) {
1267
1268 netdata_zero_metrics_enabled = config_get_boolean_ondemand(CONFIG_SECTION_GLOBAL, "enable zero metrics", CONFIG_BOOLEAN_NO);
1269
1270 + set_late_global_environment();
1271 +
1272 for (i = 0; static_threads[i].name != NULL ; i++) {
1273 struct netdata_static_thread *st = &static_threads[i];
1274
@@ -1286,8 +1288,6 @@ int main(int argc, char **argv) {
1288 info("netdata initialization completed. Enjoy real-time performance monitoring!");
1289 netdata_ready = 1;
1290
1289 - set_late_global_environment();
1290 -
1291 send_statistics("START", "-", "-");
1292 if (crash_detected)
1293 send_statistics("CRASH", "-", "-");
exporting/exporting_engine.c
+16
@@ -4,6 +4,22 @@
4
5 static struct engine *engine = NULL;
6
7 +void analytics_exporting_connectors_ssl(BUFFER *b)
8 +{
9 +#ifdef ENABLE_HTTPS
10 + if (netdata_exporting_ctx) {
11 + for (struct instance *instance = engine->instance_root; instance; instance = instance->next) {
12 + struct simple_connector_data *connector_specific_data = instance->connector_specific_data;
13 + if (connector_specific_data->flags == NETDATA_SSL_HANDSHAKE_COMPLETE) {
14 + buffer_strcat(b, "exporting");
15 + break;
16 + }
17 + }
18 + }
19 +#endif
20 + buffer_strcat(b, "|");
21 +}
22 +
23 void analytics_exporting_connectors(BUFFER *b)
24 {
25 if (!engine)