Skip to content

Commit d002afb

Browse files
author
Emmanuel Vasilakis
authored
Extra posthog attributes (netdata#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 4f0adf8. * 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
1 parent 86f2415 commit d002afb

File tree

6 files changed

+164
-12
lines changed

6 files changed

+164
-12
lines changed

daemon/analytics.c

+121-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
struct analytics_data analytics_data;
66
extern void analytics_exporting_connectors (BUFFER *b);
7+
extern void analytics_exporting_connectors_ssl (BUFFER *b);
78
extern void analytics_build_info (BUFFER *b);
89
extern int aclk_connected;
910

@@ -54,6 +55,12 @@ void analytics_log_data(void)
5455
debug(D_ANALYTICS, "NETDATA_HOST_ACLK_IMPLEMENTATION : [%s]", analytics_data.netdata_host_aclk_implementation);
5556
debug(D_ANALYTICS, "NETDATA_HOST_AGENT_CLAIMED : [%s]", analytics_data.netdata_host_agent_claimed);
5657
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);
5764
}
5865

5966
/*
@@ -93,6 +100,12 @@ void analytics_free_data(void)
93100
freez(analytics_data.netdata_host_aclk_implementation);
94101
freez(analytics_data.netdata_host_agent_claimed);
95102
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);
96109
}
97110

98111
/*
@@ -184,6 +197,15 @@ void analytics_log_dashboard(void)
184197
}
185198
}
186199

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+
187209
void analytics_mirrored_hosts(void)
188210
{
189211
RRDHOST *host;
@@ -335,6 +357,71 @@ void analytics_alarms_notifications(void)
335357
buffer_free(b);
336358
}
337359

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+
338425
void analytics_charts(void)
339426
{
340427
RRDSET *st;
@@ -426,17 +513,33 @@ void analytics_misc(void)
426513
else
427514
#endif
428515
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");
429531
}
430532

431533
/*
432534
* 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
434536
* don't try to read them on each META event send
435537
*/
436538
void analytics_gather_immutable_meta_data(void)
437539
{
438540
analytics_misc();
439541
analytics_exporters();
542+
analytics_https();
440543
}
441544

442545
/*
@@ -521,7 +624,7 @@ void *analytics_main(void *ptr)
521624

522625
analytics_gather_immutable_meta_data();
523626
analytics_gather_mutable_meta_data();
524-
send_statistics("META", "-", "-");
627+
send_statistics("META_START", "-", "-");
525628
analytics_log_data();
526629

527630
sec = 0;
@@ -567,7 +670,6 @@ void set_late_global_environment()
567670
{
568671
analytics_set_data(&analytics_data.netdata_config_stream_enabled, default_rrdpush_enabled ? "true" : "false");
569672
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");
571673

572674
#ifdef DISABLE_CLOUD
573675
analytics_set_data(&analytics_data.netdata_host_cloud_enabled, "false");
@@ -607,6 +709,8 @@ void set_late_global_environment()
607709
analytics_set_data_str(&analytics_data.netdata_buildinfo, (char *)buffer_tostring(bi));
608710
buffer_free(bi);
609711
}
712+
713+
analytics_get_install_type();
610714
}
611715

612716
static void get_system_timezone(void)
@@ -793,6 +897,12 @@ void set_global_environment()
793897
analytics_set_data(&analytics_data.netdata_host_aclk_available, "null");
794898
analytics_set_data(&analytics_data.netdata_host_agent_claimed, "null");
795899
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");
796906

797907
analytics_data.prometheus_hits = 0;
798908
analytics_data.shell_hits = 0;
@@ -874,7 +984,7 @@ void send_statistics(const char *action, const char *action_result, const char *
874984

875985
sprintf(
876986
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' ",
878988
as_script,
879989
action,
880990
action_result,
@@ -910,7 +1020,13 @@ void send_statistics(const char *action, const char *action_result, const char *
9101020
analytics_data.netdata_host_aclk_available,
9111021
analytics_data.netdata_host_aclk_implementation,
9121022
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);
9141030

9151031
info("%s '%s' '%s' '%s'", as_script, action, action_result, action_data);
9161032

daemon/analytics.h

+8-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
},
3030

3131
/* Needed to calculate the space needed for parameters */
32-
#define ANALYTICS_NO_OF_ITEMS 32
32+
#define ANALYTICS_NO_OF_ITEMS 38
3333

3434
struct analytics_data {
3535
char *netdata_config_stream_enabled;
@@ -64,6 +64,12 @@ struct analytics_data {
6464
char *netdata_host_aclk_implementation;
6565
char *netdata_host_agent_claimed;
6666
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;
6773

6874
size_t data_length;
6975

@@ -84,6 +90,7 @@ extern void analytics_log_json(void);
8490
extern void analytics_log_prometheus(void);
8591
extern void analytics_log_dashboard(void);
8692
extern void analytics_gather_mutable_meta_data(void);
93+
extern void analytics_report_oom_score(long long int score);
8794

8895
extern struct analytics_data analytics_data;
8996

daemon/anonymous-statistics.sh.in

+13-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ if [ -f "@configdir_POST@/.opt-out-from-anonymous-statistics" ] || [ ! "${DO_NOT
2222
exit 0
2323
fi
2424

25-
# Shorten version for easier reporting
26-
NETDATA_VERSION=$(echo "${NETDATA_VERSION}" | sed 's/-.*//g' | tr -d 'v')
27-
2825
# -------------------------------------------------------------------------------------------------
2926
# Get the extra variables
3027

@@ -60,6 +57,13 @@ NETDATA_HOST_ACLK_AVAILABLE="${32}"
6057
NETDATA_HOST_ACLK_IMPLEMENTATION="${33}"
6158
NETDATA_HOST_AGENT_CLAIMED="${34}"
6259
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+
6367

6468
# define body of request to be sent
6569
REQ_BODY="$(cat << EOF
@@ -80,6 +84,8 @@ REQ_BODY="$(cat << EOF
8084
"netdata_version": "${NETDATA_VERSION}",
8185
"netdata_buildinfo": ${NETDATA_BUILDINFO},
8286
"netdata_release_channel": ${NETDATA_CONFIG_RELEASE_CHANNEL},
87+
"netdata_install_type": ${NETDATA_INSTALL_TYPE},
88+
"netdata_prebuilt_distro": ${NETDATA_PREBUILT_DISTRO},
8389
"host_os_name": "${NETDATA_HOST_OS_NAME}",
8490
"host_os_id": "${NETDATA_HOST_OS_ID}",
8591
"host_os_id_like": "${NETDATA_HOST_OS_ID_LIKE}",
@@ -114,10 +120,14 @@ REQ_BODY="$(cat << EOF
114120
"config_page_cache_size": ${NETDATA_CONFIG_PAGE_CACHE_SIZE},
115121
"config_multidb_disk_quota": ${NETDATA_CONFIG_MULTIDB_DISK_QUOTA},
116122
"config_https_enabled": ${NETDATA_CONFIG_HTTPS_ENABLED},
123+
"config_https_available": ${NETDATA_CONFIG_HTTPS_AVAILABLE},
117124
"config_web_enabled": ${NETDATA_CONFIG_WEB_ENABLED},
118125
"config_exporting_enabled": ${NETDATA_CONFIG_EXPORTING_ENABLED},
119126
"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},
120129
"config_hosts_available": ${NETDATA_CONFIG_HOSTS_AVAILABLE},
130+
"config_oom_score": ${NETDATA_CONFIG_OOM_SCORE},
121131
"alarms_normal": ${NETDATA_ALARMS_NORMAL},
122132
"alarms_warning": ${NETDATA_ALARMS_WARNING},
123133
"alarms_critical": ${NETDATA_ALARMS_CRITICAL},

daemon/daemon.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,10 @@ static void oom_score_adj(void) {
181181
return;
182182
}
183183

184-
if(old_score != 0)
184+
if (old_score != 0) {
185185
wanted_score = old_score;
186+
analytics_report_oom_score(old_score);
187+
}
186188

187189
// check the environment
188190
char *s = getenv("OOMScoreAdjust");
@@ -234,6 +236,7 @@ static void oom_score_adj(void) {
234236
info("Adjusted my Out-Of-Memory (OOM) score from %d to %d.", (int)old_score, (int)final_score);
235237
else
236238
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);
237240
}
238241
else
239242
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
Original file line numberDiff line numberDiff line change
@@ -1267,6 +1267,8 @@ int main(int argc, char **argv) {
12671267

12681268
netdata_zero_metrics_enabled = config_get_boolean_ondemand(CONFIG_SECTION_GLOBAL, "enable zero metrics", CONFIG_BOOLEAN_NO);
12691269

1270+
set_late_global_environment();
1271+
12701272
for (i = 0; static_threads[i].name != NULL ; i++) {
12711273
struct netdata_static_thread *st = &static_threads[i];
12721274

@@ -1286,8 +1288,6 @@ int main(int argc, char **argv) {
12861288
info("netdata initialization completed. Enjoy real-time performance monitoring!");
12871289
netdata_ready = 1;
12881290

1289-
set_late_global_environment();
1290-
12911291
send_statistics("START", "-", "-");
12921292
if (crash_detected)
12931293
send_statistics("CRASH", "-", "-");

exporting/exporting_engine.c

+16
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@
44

55
static struct engine *engine = NULL;
66

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+
723
void analytics_exporting_connectors(BUFFER *b)
824
{
925
if (!engine)

0 commit comments

Comments
 (0)