summaryrefslogtreecommitdiffstats
path: root/daemon/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/common.c')
-rw-r--r--daemon/common.c58
1 files changed, 51 insertions, 7 deletions
diff --git a/daemon/common.c b/daemon/common.c
index 9e1c9b9c63..1fa95d0abe 100644
--- a/daemon/common.c
+++ b/daemon/common.c
@@ -6,11 +6,11 @@ char *netdata_configured_hostname = NULL;
char *netdata_configured_user_config_dir = CONFIG_DIR;
char *netdata_configured_stock_config_dir = LIBCONFIG_DIR;
char *netdata_configured_log_dir = LOG_DIR;
-char *netdata_configured_primary_plugins_dir = NULL;
+char *netdata_configured_primary_plugins_dir = PLUGINS_DIR;
char *netdata_configured_web_dir = WEB_DIR;
char *netdata_configured_cache_dir = CACHE_DIR;
char *netdata_configured_varlib_dir = VARLIB_DIR;
-char *netdata_configured_lock_dir = NULL;
+char *netdata_configured_lock_dir = VARLIB_DIR "/lock";
char *netdata_configured_home_dir = VARLIB_DIR;
char *netdata_configured_host_prefix = NULL;
char *netdata_configured_timezone = NULL;
@@ -20,9 +20,9 @@ int32_t netdata_configured_utc_offset = 0;
bool netdata_ready = false;
#if defined( DISABLE_CLOUD ) || !defined( ENABLE_ACLK )
-bool netdata_cloud_enabled = false;
+int netdata_cloud_enabled = CONFIG_BOOLEAN_NO;
#else
-bool netdata_cloud_enabled = true;
+int netdata_cloud_enabled = CONFIG_BOOLEAN_AUTO;
#endif
long get_netdata_cpus(void) {
@@ -67,6 +67,12 @@ long get_netdata_cpus(void) {
const char *cloud_status_to_string(CLOUD_STATUS status) {
switch(status) {
default:
+ case CLOUD_STATUS_UNAVAILABLE:
+ return "unavailable";
+
+ case CLOUD_STATUS_AVAILABLE:
+ return "available";
+
case CLOUD_STATUS_DISABLED:
return "disabled";
@@ -89,12 +95,21 @@ CLOUD_STATUS cloud_status(void) {
if(aclk_connected)
return CLOUD_STATUS_ONLINE;
- if(netdata_cloud_enabled)
- return CLOUD_STATUS_OFFLINE;
+ if(netdata_cloud_enabled == CONFIG_BOOLEAN_YES) {
+ char *agent_id = get_agent_claimid();
+ bool claimed = agent_id != NULL;
+ freez(agent_id);
+
+ if(claimed)
+ return CLOUD_STATUS_OFFLINE;
+ }
+
+ if(netdata_cloud_enabled != CONFIG_BOOLEAN_NO)
+ return CLOUD_STATUS_AVAILABLE;
return CLOUD_STATUS_DISABLED;
#else
- return CLOUD_STATUS_DISABLED;
+ return CLOUD_STATUS_UNAVAILABLE;
#endif
}
@@ -145,3 +160,32 @@ const char *cloud_base_url() {
return NULL;
#endif
}
+
+CLOUD_STATUS buffer_json_cloud_status(BUFFER *wb, time_t now_s) {
+ CLOUD_STATUS status = cloud_status();
+
+ buffer_json_member_add_object(wb, "cloud");
+ {
+ size_t id = cloud_connection_id();
+ time_t last_change = cloud_last_change();
+ time_t next_connect = cloud_next_connection_attempt();
+ buffer_json_member_add_uint64(wb, "id", id);
+ buffer_json_member_add_string(wb, "status", cloud_status_to_string(status));
+ buffer_json_member_add_time_t(wb, "since", last_change);
+ buffer_json_member_add_time_t(wb, "age", now_s - last_change);
+
+ if (status != CLOUD_STATUS_ONLINE)
+ buffer_json_member_add_string(wb, "reason", cloud_offline_reason());
+
+ if (status == CLOUD_STATUS_OFFLINE && next_connect > now_s) {
+ buffer_json_member_add_time_t(wb, "next_check", next_connect);
+ buffer_json_member_add_time_t(wb, "next_in", next_connect - now_s);
+ }
+
+ if (status != CLOUD_STATUS_DISABLED && cloud_base_url())
+ buffer_json_member_add_string(wb, "url", cloud_base_url());
+ }
+ buffer_json_object_close(wb); // cloud
+
+ return status;
+}