0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-04-27 14:16:20 +00:00

Add install type info to -W buildinfo output. ()

* 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.
This commit is contained in:
Austin S. Hemmelgarn 2022-01-24 12:25:31 -05:00 committed by GitHub
parent 2b313d1ff2
commit f70a97206e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 87 additions and 38 deletions

View file

@ -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");
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.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);
}
freez(install_type_filename);
if (t.prebuilt_distro != NULL) {
analytics_set_data_str(&analytics_data.netdata_prebuilt_distro, t.prebuilt_distro);
}
freez(t.prebuilt_arch);
freez(t.prebuilt_distro);
freez(t.install_type);
}
/*

View file

@ -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

View file

@ -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