@cryptotaxi247 / netdata-1 / commits / 9dec7660e

Add a fail reason to pinpoint exactly what went wrong (#15866)

* Add a fail reason to pinpoint exactly what went wrong * Drop the env for setting the fail reason. Always pass netdata_fail_reason

Stelios Fragkakis committed Aug 23, 2023 at 11:00 UTC 9dec7660e8bb8e7696b6433ec0a49307c8543845
5 files changed +16 -5
daemon/analytics.c
+7 -3
@@ -109,6 +109,7 @@ void analytics_free_data(void)
109 freez(analytics_data.netdata_config_use_private_registry);
110 freez(analytics_data.netdata_config_oom_score);
111 freez(analytics_data.netdata_prebuilt_distro);
112 + freez(analytics_data.netdata_fail_reason);
113 }
114
115 /*
@@ -127,7 +128,7 @@ void analytics_set_data(char **name, char *value)
128 /*
129 * Set a string data with a value
130 */
130 -void analytics_set_data_str(char **name, char *value)
131 +void analytics_set_data_str(char **name, const char *value)
132 {
133 size_t value_string_len;
134 if (*name) {
@@ -899,6 +900,7 @@ void set_global_environment()
900 analytics_set_data(&analytics_data.netdata_config_use_private_registry, "null");
901 analytics_set_data(&analytics_data.netdata_config_oom_score, "null");
902 analytics_set_data(&analytics_data.netdata_prebuilt_distro, "null");
903 + analytics_set_data(&analytics_data.netdata_fail_reason, "null");
904
905 analytics_data.prometheus_hits = 0;
906 analytics_data.shell_hits = 0;
@@ -974,6 +976,7 @@ void send_statistics(const char *action, const char *action_result, const char *
976 action_result = "";
977 if (!action_data)
978 action_data = "";
979 +
980 char *command_to_run = mallocz(
981 sizeof(char) * (strlen(action) + strlen(action_result) + strlen(action_data) + strlen(as_script) +
982 analytics_data.data_length + (ANALYTICS_NO_OF_ITEMS * 3) + 15));
@@ -981,7 +984,7 @@ void send_statistics(const char *action, const char *action_result, const char *
984
985 sprintf(
986 command_to_run,
984 - "%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' '%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' '%s' '%s' ",
988 as_script,
989 action,
990 action_result,
@@ -1024,7 +1027,8 @@ void send_statistics(const char *action, const char *action_result, const char *
1027 analytics_data.netdata_config_is_private_registry,
1028 analytics_data.netdata_config_use_private_registry,
1029 analytics_data.netdata_config_oom_score,
1027 - analytics_data.netdata_prebuilt_distro);
1030 + analytics_data.netdata_prebuilt_distro,
1031 + analytics_data.netdata_fail_reason);
1032
1033 netdata_log_info("%s '%s' '%s' '%s'", as_script, action, action_result, action_data);
1034
daemon/analytics.h
+2 -1
@@ -18,7 +18,7 @@
18 #define ANALYTICS_MAX_DASHBOARD_HITS 255
19
20 /* Needed to calculate the space needed for parameters */
21 -#define ANALYTICS_NO_OF_ITEMS 39
21 +#define ANALYTICS_NO_OF_ITEMS 40
22
23 struct analytics_data {
24 char *netdata_config_stream_enabled;
@@ -60,6 +60,7 @@ struct analytics_data {
60 char *netdata_config_use_private_registry;
61 char *netdata_config_oom_score;
62 char *netdata_prebuilt_distro;
63 + char *netdata_fail_reason;
64
65 size_t data_length;
66
daemon/anonymous-statistics.sh.in
+3 -1
@@ -68,6 +68,7 @@ NETDATA_IS_PRIVATE_REGISTRY="${39}"
68 NETDATA_USE_PRIVATE_REGISTRY="${40}"
69 NETDATA_CONFIG_OOM_SCORE="${41}"
70 NETDATA_PREBUILT_DISTRO="${42}"
71 +NETDATA_FAIL_REASON="${43}"
72
73 [ -z "$NETDATA_REGISTRY_UNIQUE_ID" ] && NETDATA_REGISTRY_UNIQUE_ID="00000000-0000-0000-0000-000000000000"
74
@@ -175,7 +176,8 @@ REQ_BODY="$(cat << EOF
176 "mirrored_host_count": ${NETDATA_MIRRORED_HOST_COUNT},
177 "mirrored_hosts_reachable": ${NETDATA_MIRRORED_HOSTS_REACHABLE},
178 "mirrored_hosts_unreachable": ${NETDATA_MIRRORED_HOSTS_UNREACHABLE},
178 - "exporting_connectors": ${NETDATA_EXPORTING_CONNECTORS}
179 + "exporting_connectors": ${NETDATA_EXPORTING_CONNECTORS},
180 + "netdata_fail_reason": ${NETDATA_FAIL_REASON}
181 }
182 }
183 EOF
database/sqlite/sqlite_functions.c
+2
@@ -324,6 +324,7 @@ int init_database_batch(sqlite3 *database, int rebuild, int init_type, const cha
324 if (rc != SQLITE_OK) {
325 error_report("SQLite error during database %s, rc = %d (%s)", init_type ? "cleanup" : "setup", rc, err_msg);
326 error_report("SQLite failed statement %s", batch[i]);
327 + analytics_set_data_str(&analytics_data.netdata_fail_reason, err_msg);
328 sqlite3_free(err_msg);
329 if (SQLITE_CORRUPT == rc) {
330 if (!rebuild)
@@ -398,6 +399,7 @@ int sql_init_database(db_check_action_type_t rebuild, int memory)
399 rc = sqlite3_open(sqlite_database, &db_meta);
400 if (rc != SQLITE_OK) {
401 error_report("Failed to initialize database at %s, due to \"%s\"", sqlite_database, sqlite3_errstr(rc));
402 + analytics_set_data_str(&analytics_data.netdata_fail_reason, sqlite3_errstr(rc));
403 sqlite3_close(db_meta);
404 db_meta = NULL;
405 return 1;
database/sqlite/sqlite_functions.h
+2
@@ -6,6 +6,8 @@
6 #include "daemon/common.h"
7 #include "sqlite3.h"
8
9 +void analytics_set_data_str(char **name, const char *value);
10 +
11 // return a node list
12 struct node_instance_list {
13 uuid_t node_id;