1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// SPDX-License-Identifier: GPL-3.0-or-later
#include "common.h"
static const char *verify_required_directory(const char *dir)
{
if (chdir(dir) == -1)
fatal("Cannot change directory to '%s'", dir);
DIR *d = opendir(dir);
if (!d)
fatal("Cannot examine the contents of directory '%s'", dir);
closedir(d);
return dir;
}
static const char *verify_or_create_required_directory(const char *dir) {
errno_clear();
if (mkdir(dir, 0755) != 0 && errno != EEXIST)
fatal("Cannot create required directory '%s'", dir);
return verify_required_directory(dir);
}
static const char *verify_or_create_required_private_directory(const char *dir) {
errno_clear();
if (mkdir(dir, 0770) != 0 && errno != EEXIST)
fatal("Cannot create required directory '%s'", dir);
return verify_required_directory(dir);
}
void set_environment_for_plugins_and_scripts(void) {
{
char b[16];
snprintfz(b, sizeof(b) - 1, "%d", default_rrd_update_every);
nd_setenv("NETDATA_UPDATE_EVERY", b, 1);
}
nd_setenv("NETDATA_VERSION", NETDATA_VERSION, 1);
nd_setenv("NETDATA_HOSTNAME", netdata_configured_hostname, 1);
nd_setenv("NETDATA_CONFIG_DIR", verify_required_directory(netdata_configured_user_config_dir), 1);
nd_setenv("NETDATA_USER_CONFIG_DIR", verify_required_directory(netdata_configured_user_config_dir), 1);
nd_setenv("NETDATA_STOCK_CONFIG_DIR", verify_required_directory(netdata_configured_stock_config_dir), 1);
nd_setenv("NETDATA_PLUGINS_DIR", verify_required_directory(netdata_configured_primary_plugins_dir), 1);
nd_setenv("NETDATA_WEB_DIR", verify_required_directory(netdata_configured_web_dir), 1);
nd_setenv("NETDATA_CACHE_DIR", verify_or_create_required_directory(netdata_configured_cache_dir), 1);
nd_setenv("NETDATA_LIB_DIR", verify_or_create_required_directory(netdata_configured_varlib_dir), 1);
nd_setenv("NETDATA_LOCK_DIR", verify_or_create_required_directory(netdata_configured_lock_dir), 1);
nd_setenv("NETDATA_LOG_DIR", verify_or_create_required_directory(netdata_configured_log_dir), 1);
nd_setenv("NETDATA_HOST_PREFIX", netdata_configured_host_prefix, 1);
nd_setenv("CLAIMING_DIR", verify_or_create_required_private_directory(netdata_configured_cloud_dir), 1);
{
BUFFER *user_plugins_dirs = buffer_create(FILENAME_MAX, NULL);
for (size_t i = 1; i < PLUGINSD_MAX_DIRECTORIES && plugin_directories[i]; i++) {
if (i > 1)
buffer_strcat(user_plugins_dirs, " ");
buffer_strcat(user_plugins_dirs, plugin_directories[i]);
}
nd_setenv("NETDATA_USER_PLUGINS_DIRS", buffer_tostring(user_plugins_dirs), 1);
buffer_free(user_plugins_dirs);
}
const char *default_port = appconfig_get(&netdata_config, CONFIG_SECTION_WEB, "default port", NULL);
int clean = 0;
if (!default_port) {
default_port = strdupz("19999");
clean = 1;
}
nd_setenv("NETDATA_LISTEN_PORT", default_port, 1);
if (clean)
freez((char *)default_port);
// set the path we need
char path[4096], *p = getenv("PATH");
if (!p) p = "/bin:/usr/bin";
snprintfz(path, sizeof(path), "%s:%s", p, "/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin");
setenv("PATH", config_get(CONFIG_SECTION_ENV_VARS, "PATH", path), 1);
// python options
p = getenv("PYTHONPATH");
if (!p) p = "";
setenv("PYTHONPATH", config_get(CONFIG_SECTION_ENV_VARS, "PYTHONPATH", p), 1);
// disable buffering for python plugins
setenv("PYTHONUNBUFFERED", "1", 1);
// switch to standard locale for plugins
setenv("LC_ALL", "C", 1);
}
|