diff options
Diffstat (limited to 'daemon/common.c')
-rw-r--r-- | daemon/common.c | 58 |
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; +} |