summaryrefslogtreecommitdiffstats
path: root/daemon
diff options
context:
space:
mode:
authorAustin S. Hemmelgarn <austin@netdata.cloud>2022-01-24 12:25:31 -0500
committerGitHub <noreply@github.com>2022-01-24 12:25:31 -0500
commitf70a97206e99654c08e0714aeff3f5290f2f40c4 (patch)
tree5b5c5fa02740c8b1af440c471c18b8fcf006f94c /daemon
parent2b313d1ff2515782827965545fef716be5c49bc6 (diff)
Add install type info to `-W buildinfo` output. (#12010)
* Add install type info to `-W buildinfo` ouptut. By reading it from the `.install-type` file and presenting it properly. * Move get_value_from_key from daemon/analytics to libnetdata. It will be used also in the buildinfo code. * Restructure install type handling for buildinfo. * Restructure to make code more reusable. Allowing for deduplication and also enabling other potential callers. * Fix incorrect variable name in analytics changes.
Diffstat (limited to 'daemon')
-rw-r--r--daemon/analytics.c49
-rw-r--r--daemon/buildinfo.c64
-rw-r--r--daemon/buildinfo.h10
3 files changed, 86 insertions, 37 deletions
diff --git a/daemon/analytics.c b/daemon/analytics.c
index 89091a4878..4501a46a50 100644
--- a/daemon/analytics.c
+++ b/daemon/analytics.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "common.h"
+#include "buildinfo.h"
struct analytics_data analytics_data;
extern void analytics_exporting_connectors (BUFFER *b);
@@ -359,47 +360,23 @@ void analytics_alarms_notifications(void)
buffer_free(b);
}
-char *get_value_from_key(char *buffer, char *key)
-{
- char *s = NULL, *t = NULL;
- s = t = buffer + strlen(key) + 2;
- if (s) {
- while (*s == '\'')
- s++;
- while (*++t != '\0');
- while (--t > s && *t == '\'')
- *t = '\0';
- }
- return s;
-}
-
-/*
- * Checks for the existence of .install_type file and reads it
- */
void analytics_get_install_type(void)
{
- char *install_type_filename;
- analytics_set_data_str(&analytics_data.netdata_install_type, "");
- analytics_set_data_str(&analytics_data.netdata_prebuilt_distro, "");
+ struct install_type_info t = get_install_type();
- int install_type_filename_len = (strlen(netdata_configured_user_config_dir) + strlen(".install-type") + 3);
- install_type_filename = mallocz(sizeof(char) * install_type_filename_len);
- snprintfz(install_type_filename, install_type_filename_len - 1, "%s/%s", netdata_configured_user_config_dir, ".install-type");
+ if (t.install_type == NULL) {
+ analytics_set_data_str(&analytics_data.netdata_install_type, "unknown");
+ } else {
+ analytics_set_data_str(&analytics_data.netdata_install_type, t.install_type);
+ }
- FILE *fp = fopen(install_type_filename, "r");
- if (fp) {
- char *s, buf[256 + 1];
- size_t len = 0;
-
- while ((s = fgets_trim_len(buf, 256, fp, &len))) {
- if (!strncmp(buf, "INSTALL_TYPE='", 14))
- analytics_set_data_str(&analytics_data.netdata_install_type, (char *)get_value_from_key(buf, "INSTALL_TYPE"));
- else if (!strncmp(buf, "PREBUILT_DISTRO='", 17))
- analytics_set_data_str(&analytics_data.netdata_prebuilt_distro, (char *)get_value_from_key(buf, "PREBUILT_DISTRO"));
- }
- fclose(fp);
+ if (t.prebuilt_distro != NULL) {
+ analytics_set_data_str(&analytics_data.netdata_prebuilt_distro, t.prebuilt_distro);
}
- freez(install_type_filename);
+
+ freez(t.prebuilt_arch);
+ freez(t.prebuilt_distro);
+ freez(t.install_type);
}
/*
diff --git a/daemon/buildinfo.c b/daemon/buildinfo.c
index 6566537696..b64a78f29c 100644
--- a/daemon/buildinfo.c
+++ b/daemon/buildinfo.c
@@ -3,6 +3,7 @@
#include <stdio.h>
#include "./config.h"
#include "common.h"
+#include "buildinfo.h"
// Optional features
@@ -207,9 +208,71 @@
#define FEAT_YES_NO(x) ((x) ? "YES" : "NO")
+
+char *get_value_from_key(char *buffer, char *key) {
+ char *s = NULL, *t = NULL;
+ s = t = buffer + strlen(key) + 2;
+ if (s) {
+ while (*s == '\'')
+ s++;
+ while (*++t != '\0');
+ while (--t > s && *t == '\'')
+ *t = '\0';
+ }
+ return s;
+}
+
+struct install_type_info get_install_type() {
+ char *install_type_filename;
+ struct install_type_info ret = {.install_type = NULL, .prebuilt_arch = NULL, .prebuilt_distro = NULL};
+
+ int install_type_filename_len = (strlen(netdata_configured_user_config_dir) + strlen(".install-type") + 3);
+ install_type_filename = mallocz(sizeof(char) * install_type_filename_len);
+ snprintfz(install_type_filename, install_type_filename_len - 1, "%s/%s", netdata_configured_user_config_dir, ".install-type");
+
+ FILE *fp = fopen(install_type_filename, "r");
+ if (fp) {
+ char *s, buf[256 + 1];
+ size_t len = 0;
+
+ while ((s = fgets_trim_len(buf, 256, fp, &len))) {
+ if (!strncmp(buf, "INSTALL_TYPE='", 14))
+ ret.install_type = strdupz((char *)get_value_from_key(buf, "INSTALL_TYPE"));
+ else if (!strncmp(buf, "PREBUILT_ARCH='", 15))
+ ret.prebuilt_arch = strdupz((char *)get_value_from_key(buf, "PREBUILT_ARCH"));
+ else if (!strncmp(buf, "PREBUILT_DISTRO='", 17))
+ ret.prebuilt_distro = strdupz((char *)get_value_from_key(buf, "PREBUILT_DISTRO"));
+ }
+ fclose(fp);
+ }
+ freez(install_type_filename);
+
+ return ret;
+}
+
void print_build_info(void) {
+ struct install_type_info t = get_install_type();
+
printf("Configure options: %s\n", CONFIGURE_COMMAND);
+ if (t.install_type == NULL) {
+ printf("Install type: unknown\n");
+ } else {
+ printf("Install type: %s\n", t.install_type);
+ }
+
+ if (t.prebuilt_arch != NULL) {
+ printf(" Binary architecture: %s\n", t.prebuilt_arch);
+ }
+
+ if (t.prebuilt_distro != NULL) {
+ printf(" Packaging distro: %s\n", t.prebuilt_distro);
+ }
+
+ freez(t.install_type);
+ freez(t.prebuilt_arch);
+ freez(t.prebuilt_distro);
+
printf("Features:\n");
printf(" dbengine: %s\n", FEAT_YES_NO(FEAT_DBENGINE));
printf(" Native HTTPS: %s\n", FEAT_YES_NO(FEAT_NATIVE_HTTPS));
@@ -250,7 +313,6 @@ void print_build_info(void) {
printf(" Prometheus Remote Write: %s\n", FEAT_YES_NO(FEAT_REMOTE_WRITE));
};
-
#define FEAT_JSON_BOOL(x) ((x) ? "true" : "false")
// This intentionally does not use JSON-C so it works even if JSON-C is not present
// This is used for anonymous statistics reporting, so it intentionally
diff --git a/daemon/buildinfo.h b/daemon/buildinfo.h
index 05e5efb5af..e2a31c94aa 100644
--- a/daemon/buildinfo.h
+++ b/daemon/buildinfo.h
@@ -3,8 +3,18 @@
#ifndef NETDATA_BUILDINFO_H
#define NETDATA_BUILDINFO_H 1
+struct install_type_info {
+ char *install_type;
+ char *prebuilt_arch;
+ char *prebuilt_distro;
+};
+
extern void print_build_info(void);
extern void print_build_info_json(void);
+extern char *get_value_from_key(char *buffer, char *key);
+
+extern struct install_type_info get_install_type();
+
#endif // NETDATA_BUILDINFO_H