|
4 | 4 |
|
5 | 5 | struct analytics_data analytics_data;
|
6 | 6 | extern void analytics_exporting_connectors (BUFFER *b);
|
| 7 | +extern void analytics_exporting_connectors_ssl (BUFFER *b); |
7 | 8 | extern void analytics_build_info (BUFFER *b);
|
8 | 9 | extern int aclk_connected;
|
9 | 10 |
|
@@ -54,6 +55,12 @@ void analytics_log_data(void)
|
54 | 55 | debug(D_ANALYTICS, "NETDATA_HOST_ACLK_IMPLEMENTATION : [%s]", analytics_data.netdata_host_aclk_implementation);
|
55 | 56 | debug(D_ANALYTICS, "NETDATA_HOST_AGENT_CLAIMED : [%s]", analytics_data.netdata_host_agent_claimed);
|
56 | 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); |
57 | 64 | }
|
58 | 65 |
|
59 | 66 | /*
|
@@ -93,6 +100,12 @@ void analytics_free_data(void)
|
93 | 100 | freez(analytics_data.netdata_host_aclk_implementation);
|
94 | 101 | freez(analytics_data.netdata_host_agent_claimed);
|
95 | 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); |
96 | 109 | }
|
97 | 110 |
|
98 | 111 | /*
|
@@ -184,6 +197,15 @@ void analytics_log_dashboard(void)
|
184 | 197 | }
|
185 | 198 | }
|
186 | 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 | + |
187 | 209 | void analytics_mirrored_hosts(void)
|
188 | 210 | {
|
189 | 211 | RRDHOST *host;
|
@@ -335,6 +357,71 @@ void analytics_alarms_notifications(void)
|
335 | 357 | buffer_free(b);
|
336 | 358 | }
|
337 | 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 | + |
338 | 425 | void analytics_charts(void)
|
339 | 426 | {
|
340 | 427 | RRDSET *st;
|
@@ -426,17 +513,33 @@ void analytics_misc(void)
|
426 | 513 | else
|
427 | 514 | #endif
|
428 | 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"); |
429 | 531 | }
|
430 | 532 |
|
431 | 533 | /*
|
432 | 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 |
434 | 536 | * don't try to read them on each META event send
|
435 | 537 | */
|
436 | 538 | void analytics_gather_immutable_meta_data(void)
|
437 | 539 | {
|
438 | 540 | analytics_misc();
|
439 | 541 | analytics_exporters();
|
| 542 | + analytics_https(); |
440 | 543 | }
|
441 | 544 |
|
442 | 545 | /*
|
@@ -521,7 +624,7 @@ void *analytics_main(void *ptr)
|
521 | 624 |
|
522 | 625 | analytics_gather_immutable_meta_data();
|
523 | 626 | analytics_gather_mutable_meta_data();
|
524 |
| - send_statistics("META", "-", "-"); |
| 627 | + send_statistics("META_START", "-", "-"); |
525 | 628 | analytics_log_data();
|
526 | 629 |
|
527 | 630 | sec = 0;
|
@@ -567,7 +670,6 @@ void set_late_global_environment()
|
567 | 670 | {
|
568 | 671 | analytics_set_data(&analytics_data.netdata_config_stream_enabled, default_rrdpush_enabled ? "true" : "false");
|
569 | 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"); |
571 | 673 |
|
572 | 674 | #ifdef DISABLE_CLOUD
|
573 | 675 | analytics_set_data(&analytics_data.netdata_host_cloud_enabled, "false");
|
@@ -607,6 +709,8 @@ void set_late_global_environment()
|
607 | 709 | analytics_set_data_str(&analytics_data.netdata_buildinfo, (char *)buffer_tostring(bi));
|
608 | 710 | buffer_free(bi);
|
609 | 711 | }
|
| 712 | + |
| 713 | + analytics_get_install_type(); |
610 | 714 | }
|
611 | 715 |
|
612 | 716 | static void get_system_timezone(void)
|
@@ -793,6 +897,12 @@ void set_global_environment()
|
793 | 897 | analytics_set_data(&analytics_data.netdata_host_aclk_available, "null");
|
794 | 898 | analytics_set_data(&analytics_data.netdata_host_agent_claimed, "null");
|
795 | 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"); |
796 | 906 |
|
797 | 907 | analytics_data.prometheus_hits = 0;
|
798 | 908 | analytics_data.shell_hits = 0;
|
@@ -874,7 +984,7 @@ void send_statistics(const char *action, const char *action_result, const char *
|
874 | 984 |
|
875 | 985 | sprintf(
|
876 | 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' ", |
878 | 988 | as_script,
|
879 | 989 | action,
|
880 | 990 | action_result,
|
@@ -910,7 +1020,13 @@ void send_statistics(const char *action, const char *action_result, const char *
|
910 | 1020 | analytics_data.netdata_host_aclk_available,
|
911 | 1021 | analytics_data.netdata_host_aclk_implementation,
|
912 | 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); |
914 | 1030 |
|
915 | 1031 | info("%s '%s' '%s' '%s'", as_script, action, action_result, action_data);
|
916 | 1032 |
|
|
0 commit comments