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)