summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimotej S <6674623+underhood@users.noreply.github.com>2021-06-14 10:38:58 +0200
committerGitHub <noreply@github.com>2021-06-14 10:38:58 +0200
commit59af90b08c705a66bdca7551b43257781db47711 (patch)
tree18f7961b77aea97891c7472cd792fd61d1c98e6f
parentf71036cdeca8e6c5becd357928ddc0325154a622 (diff)
Allows ACLK NG and Legacy to coexist (#11225)
-rw-r--r--.github/workflows/tests.yml2
-rw-r--r--CMakeLists.txt77
-rw-r--r--Makefile.am50
-rw-r--r--aclk/aclk.c69
-rw-r--r--aclk/aclk.h50
-rw-r--r--aclk/aclk_api.c179
-rw-r--r--aclk/aclk_api.h51
-rw-r--r--aclk/aclk_collector_list.h2
-rw-r--r--aclk/aclk_otp.c2
-rw-r--r--aclk/aclk_otp.h1
-rw-r--r--aclk/aclk_proxy.c186
-rw-r--r--aclk/aclk_proxy.h22
-rw-r--r--aclk/aclk_rrdhost_state.h (renamed from aclk/legacy/aclk_rrdhost_state.h)10
-rw-r--r--aclk/aclk_rx_msgs.c7
-rw-r--r--aclk/aclk_stats.c2
-rw-r--r--aclk/aclk_stats.h2
-rw-r--r--aclk/aclk_tx_msgs.c4
-rw-r--r--aclk/aclk_util.c185
-rw-r--r--aclk/aclk_util.h14
-rw-r--r--aclk/legacy/aclk_common.c211
-rw-r--r--aclk/legacy/aclk_common.h33
-rw-r--r--aclk/legacy/aclk_lws_https_client.c6
-rw-r--r--aclk/legacy/aclk_lws_wss_client.c25
-rw-r--r--aclk/legacy/aclk_query.c91
-rw-r--r--aclk/legacy/aclk_query.h19
-rw-r--r--aclk/legacy/aclk_rx_msgs.c75
-rw-r--r--aclk/legacy/aclk_rx_msgs.h2
-rw-r--r--aclk/legacy/aclk_stats.c130
-rw-r--r--aclk/legacy/aclk_stats.h24
-rw-r--r--aclk/legacy/agent_cloud_link.c361
-rw-r--r--aclk/legacy/agent_cloud_link.h33
-rw-r--r--aclk/legacy/mqtt.c8
-rw-r--r--aclk/legacy/mqtt.h2
-rw-r--r--claim/claim.c6
-rw-r--r--configure.ac153
-rw-r--r--daemon/buildinfo.c83
-rw-r--r--daemon/common.h6
-rw-r--r--database/rrd.h7
-rw-r--r--database/rrdset.c4
-rwxr-xr-xnetdata-installer.sh13
-rw-r--r--web/api/web_api_v1.c16
41 files changed, 998 insertions, 1225 deletions
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 7e47f12da4..72c789582a 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -52,7 +52,7 @@ jobs:
- name: Configure
run: |
autoreconf -ivf
- ./configure --without-aclk-ng
+ ./configure
# XXX: Work-around for bug with libbson-1.0 in Ubuntu 18.04
# See: https://bugs.launchpad.net/ubuntu/+source/libmongoc/+bug/1790771
# https://jira.mongodb.org/browse/CDRIVER-2818
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ce737436ee..c5d4bc8f52 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -730,12 +730,22 @@ set(BACKENDS_PLUGIN_FILES
set(CLAIM_PLUGIN_FILES
claim/claim.c
claim/claim.h
- aclk/legacy/aclk_rrdhost_state.h
- aclk/legacy/aclk_common.c
- aclk/legacy/aclk_common.h
)
-set(ACLK_PLUGIN_FILES
+set(ACLK_ALWAYS_BUILD
+ aclk/aclk_rrdhost_state.h
+ aclk/aclk_api.c
+ aclk/aclk_api.h
+ aclk/aclk_proxy.c
+ aclk/aclk_proxy.h
+ )
+
+set(ACLK_COMMON_FILES
+ aclk/aclk_collector_list.c
+ aclk/aclk_collector_list.h
+ )
+
+set(ACLK_LEGACY_FILES
aclk/legacy/agent_cloud_link.c
aclk/legacy/agent_cloud_link.h
aclk/legacy/aclk_query.c
@@ -750,6 +760,40 @@ set(ACLK_PLUGIN_FILES
aclk/legacy/aclk_stats.h
aclk/legacy/aclk_rx_msgs.c
aclk/legacy/aclk_rx_msgs.h
+ aclk/legacy/aclk_common.c
+ aclk/legacy/aclk_common.h
+ )
+
+set(ACLK_NG_FILES
+ aclk/aclk.c
+ aclk/aclk.h
+ aclk/aclk_util.c
+ aclk/aclk_util.h
+ aclk/aclk_stats.c
+ aclk/aclk_stats.h
+ aclk/aclk_query.c
+ aclk/aclk_query.h
+ aclk/aclk_query_queue.c
+ aclk/aclk_query_queue.h
+ aclk/aclk_otp.c
+ aclk/aclk_otp.h
+ aclk/aclk_tx_msgs.c
+ aclk/aclk_tx_msgs.h
+ aclk/aclk_rx_msgs.c
+ aclk/aclk_rx_msgs.h
+ aclk/https_client.c
+ aclk/https_client.h
+ mqtt_websockets/src/mqtt_wss_client.c
+ mqtt_websockets/src/include/mqtt_wss_client.h
+ mqtt_websockets/src/mqtt_wss_log.c
+ mqtt_websockets/src/include/mqtt_wss_log.h
+ mqtt_websockets/src/ws_client.c
+ mqtt_websockets/src/include/ws_client.h
+ mqtt_websockets/c-rbuf/src/ringbuffer.c
+ mqtt_websockets/c-rbuf/include/ringbuffer.h
+ mqtt_websockets/c-rbuf/src/ringbuffer_internal.h
+ mqtt_websockets/MQTT-C/src/mqtt.c
+ mqtt_websockets/MQTT-C/include/mqtt.h
)
set(SPAWN_PLUGIN_FILES
@@ -759,7 +803,7 @@ set(SPAWN_PLUGIN_FILES
spawn/spawn.h
)
-set(ACLK_STATIC_LIBS
+set(ACLK_LEGACY_STATIC_LIBS
${CMAKE_SOURCE_DIR}/externaldeps/mosquitto/libmosquitto.a
${CMAKE_SOURCE_DIR}/externaldeps/libwebsockets/libwebsockets.a
)
@@ -967,21 +1011,21 @@ ENDIF()
set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} m ${CMAKE_THREAD_LIBS_INIT})
-set(ACLK_CAN_BUILD 1)
+set(ACLK_LEGACY_CAN_BUILD 1)
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/externaldeps/mosquitto/libmosquitto.a")
message(WARNING "Static build of mosquitto not found. Disabling ACLK")
- set(ACLK_CAN_BUILD 0)
+ set(ACLK_LEGACY_CAN_BUILD 0)
ENDIF()
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/externaldeps/libwebsockets/libwebsockets.a")
message(WARNING "Static build of libwebsockets not found. Disabling ACLK")
- set(ACLK_CAN_BUILD 0)
+ set(ACLK_LEGACY_CAN_BUILD 0)
ENDIF()
-IF(ACLK_CAN_BUILD)
- message(STATUS "agent-cloud-link: enabled")
- list(APPEND NETDATA_FILES ${ACLK_PLUGIN_FILES})
- list(APPEND NETDATA_COMMON_LIBRARIES ${ACLK_STATIC_LIBS})
+IF(ACLK_LEGACY_CAN_BUILD)
+ message(STATUS "agent-cloud-link Legacy: enabled")
+ list(APPEND NETDATA_FILES ${ACLK_LEGACY_FILES})
+ list(APPEND NETDATA_COMMON_LIBRARIES ${ACLK_LEGACY_STATIC_LIBS})
include_directories(BEFORE ${CMAKE_SOURCE_DIR}/externaldeps/libwebsockets/include)
IF(LINUX AND CAP_FOUND)
list(APPEND NETDATA_COMMON_LIBRARIES ${CAP_LIBRARIES})
@@ -989,9 +1033,16 @@ IF(ACLK_CAN_BUILD)
list(APPEND NETDATA_COMMON_CFLAGS ${CAP_CFLAGS_OTHER})
ENDIF()
ELSE()
- message(STATUS "agent-cloud-link: disabled")
+ message(STATUS "agent-cloud-link Legacy: disabled")
ENDIF()
+list(APPEND NETDATA_FILES ${ACLK_ALWAYS_BUILD})
+list(APPEND NETDATA_FILES ${ACLK_NG_FILES})
+list(APPEND NETDATA_FILES ${ACLK_COMMON_FILES})
+include_directories(BEFORE ${CMAKE_SOURCE_DIR}/mqtt_websockets/MQTT-C/include)
+include_directories(BEFORE ${CMAKE_SOURCE_DIR}/mqtt_websockets/src/include)
+include_directories(BEFORE ${CMAKE_SOURCE_DIR}/mqtt_websockets/c-rbuf/include)
+
# -----------------------------------------------------------------------------
# netdata
diff --git a/Makefile.am b/Makefile.am
index da23b4b15d..1c98e30b6a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -114,7 +114,7 @@ SUBDIRS += \
spawn \
$(NULL)
-if !ACLK_NG
+if ENABLE_ACLK
SUBDIRS += \
aclk/legacy \
$(NULL)
@@ -540,7 +540,7 @@ PARSER_FILES = \
$(NULL)
if ACLK_NG
-ACLK_FILES = \
+ACLK_NG_FILES = \
aclk/aclk.c \
aclk/aclk.h \
aclk/aclk_util.c \
@@ -551,8 +551,6 @@ ACLK_FILES = \
aclk/aclk_query.h \
aclk/aclk_query_queue.c \
aclk/aclk_query_queue.h \
- aclk/aclk_collector_list.c \
- aclk/aclk_collector_list.h \
aclk/aclk_otp.c \
aclk/aclk_otp.h \
aclk/aclk_tx_msgs.c \
@@ -573,17 +571,25 @@ ACLK_FILES = \
mqtt_websockets/MQTT-C/src/mqtt.c \
mqtt_websockets/MQTT-C/include/mqtt.h \
$(NULL)
-else #ACLK_NG
-ACLK_FILES = \
- aclk/legacy/aclk_rrdhost_state.h \
- aclk/legacy/aclk_common.c \
- aclk/legacy/aclk_common.h \
- aclk/legacy/aclk_stats.c \
- aclk/legacy/aclk_stats.h \
- $(NULL)
+endif #ACLK_NG
if ENABLE_ACLK
-ACLK_FILES += \
+ACLK_COMMON_FILES = \
+ aclk/aclk_collector_list.c \
+ aclk/aclk_collector_list.h \
+ $(NULL)
+endif
+
+ACLK_ALWAYS_BUILD_FILES = \
+ aclk/aclk_rrdhost_state.h \
+ aclk/aclk_api.c \
+ aclk/aclk_api.h \
+ aclk/aclk_proxy.c \
+ aclk/aclk_proxy.h \
+ $(NULL)
+
+if ACLK_LEGACY
+ACLK_LEGACY_FILES = \
aclk/legacy/agent_cloud_link.c \
aclk/legacy/agent_cloud_link.h \
aclk/legacy/aclk_query.c \
@@ -596,9 +602,12 @@ ACLK_FILES += \
aclk/legacy/aclk_lws_wss_client.h \
aclk/legacy/aclk_lws_https_client.c \
aclk/legacy/aclk_lws_https_client.h \
+ aclk/legacy/aclk_common.c \
+ aclk/legacy/aclk_common.h \
+ aclk/legacy/aclk_stats.c \
+ aclk/legacy/aclk_stats.h \
$(NULL)
-endif #ENABLE_ACLK
-endif #ACLK_NG
+endif #ACLK_LEGACY
SPAWN_PLUGIN_FILES = \
spawn/spawn.c \
@@ -710,7 +719,10 @@ NETDATA_FILES = \
$(WEB_PLUGIN_FILES) \
$(CLAIM_FILES) \
$(PARSER_FILES) \
- $(ACLK_FILES) \
+ $(ACLK_ALWAYS_BUILD_FILES) \
+ $(ACLK_COMMON_FILES) \
+ $(ACLK_LEGACY_FILES) \
+ $(ACLK_NG_FILES) \
$(SPAWN_PLUGIN_FILES) \
$(NULL)
@@ -770,16 +782,14 @@ netdata_LDADD = \
$(NETDATA_COMMON_LIBS) \
$(NULL)
-if !ACLK_NG
-if ENABLE_ACLK
+if ACLK_LEGACY
netdata_LDADD += \
$(abs_top_srcdir)/externaldeps/mosquitto/libmosquitto.a \
$(OPTIONAL_LIBCAP_LIBS) \
$(OPTIONAL_LWS_LIBS) \
$(NETDATA_COMMON_LIBS) \
$(NULL)
-endif #ENABLE_ACLK
-endif #ACLK_NG
+endif #ACLK_LEGACY
if ENABLE_CXX_LINKER
netdata_LINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
diff --git a/aclk/aclk.c b/aclk/aclk.c
index 3e538a5f4c..7e8c1c32e0 100644
--- a/aclk/aclk.c
+++ b/aclk/aclk.c
@@ -13,6 +13,8 @@
#include "aclk_collector_list.h"
#include "https_client.h"
+#include "aclk_proxy.h"
+
#ifdef ACLK_LOG_CONVERSATION_DIR
#include <sys/types.h>
#include <sys/stat.h>
@@ -21,19 +23,10 @@
#define ACLK_STABLE_TIMEOUT 3 // Minimum delay to mark AGENT as stable
-//TODO remove most (as in 99.999999999%) of this crap
-int aclk_connected = 0;
-int aclk_disable_runtime = 0;
-int aclk_disable_single_updates = 0;
-int aclk_kill_link = 0;
-
int aclk_pubacks_per_conn = 0; // How many PubAcks we got since MQTT conn est.
time_t aclk_block_until = 0;
-usec_t aclk_session_us = 0; // Used by the mqtt layer
-time_t aclk_session_sec = 0; // Used by the mqtt layer
-
aclk_env_t *aclk_env = NULL;
mqtt_wss_client mqttwss_client;
@@ -43,22 +36,12 @@ netdata_mutex_t aclk_shared_state_mutex = NETDATA_MUTEX_INITIALIZER;
#define ACLK_SHARED_STATE_UNLOCK netdata_mutex_unlock(&aclk_shared_state_mutex)
struct aclk_shared_state aclk_shared_state = {
- .agent_state = AGENT_INITIALIZING,
+ .agent_state = ACLK_HOST_INITIALIZING,
.last_popcorn_interrupt = 0,
.mqtt_shutdown_msg_id = -1,
.mqtt_shutdown_msg_rcvd = 0
};
-void aclk_single_update_disable()
-{
- aclk_disable_single_updates = 1;
-}
-
-void aclk_single_update_enable()
-{
- aclk_disable_single_updates = 0;
-}
-
//ENDTODO
static RSA *aclk_private_key = NULL;
@@ -301,7 +284,7 @@ static int handle_connection(mqtt_wss_client client)
inline static int aclk_popcorn_check_bump()
{
ACLK_SHARED_STATE_LOCK;
- if (unlikely(aclk_shared_state.agent_state == AGENT_INITIALIZING)) {
+ if (unlikely(aclk_shared_state.agent_state == ACLK_HOST_INITIALIZING)) {
aclk_shared_state.last_popcorn_interrupt = now_realtime_sec();
ACLK_SHARED_STATE_UNLOCK;
return 1;
@@ -340,7 +323,7 @@ static inline void mqtt_connected_actions(mqtt_wss_client client)
aclk_pubacks_per_conn = 0;
ACLK_SHARED_STATE_LOCK;
- if (aclk_shared_state.agent_state != AGENT_INITIALIZING) {
+ if (aclk_shared_state.agent_state != ACLK_HOST_INITIALIZING) {
error("Sending `connect` payload immediately as popcorning was finished already.");
queue_connect_payloads();
}
@@ -360,13 +343,13 @@ static int wait_popcorning_finishes(mqtt_wss_client client, struct aclk_query_th
int need_wait;
while (!netdata_exit) {
ACLK_SHARED_STATE_LOCK;
- if (likely(aclk_shared_state.agent_state != AGENT_INITIALIZING)) {
+ if (likely(aclk_shared_state.agent_state != ACLK_HOST_INITIALIZING)) {
ACLK_SHARED_STATE_UNLOCK;
return 0;
}
elapsed = now_realtime_sec() - aclk_shared_state.last_popcorn_interrupt;
if (elapsed >= ACLK_STABLE_TIMEOUT) {
- aclk_shared_state.agent_state = AGENT_STABLE;
+ aclk_shared_state.agent_state = ACLK_HOST_STABLE;
ACLK_SHARED_STATE_UNLOCK;
error("ACLK localhost popocorn finished");
if (unlikely(!query_threads->thread_list))
@@ -721,10 +704,10 @@ exit:
// fix this in both old and new ACLK
extern void health_alarm_entry2json_nolock(BUFFER *wb, ALARM_ENTRY *ae, RRDHOST *host);
-void aclk_alarm_reload(void)
+void ng_aclk_alarm_reload(void)
{
ACLK_SHARED_STATE_LOCK;
- if (unlikely(aclk_shared_state.agent_state == AGENT_INITIALIZING)) {
+ if (unlikely(aclk_shared_state.agent_state == ACLK_HOST_INITIALIZING)) {
ACLK_SHARED_STATE_UNLOCK;
return;
}
@@ -733,7 +716,7 @@ void aclk_alarm_reload(void)
aclk_queue_query(aclk_query_new(METADATA_ALARMS));
}
-int aclk_update_alarm(RRDHOST *host, ALARM_ENTRY *ae)
+int ng_aclk_update_alarm(RRDHOST *host, ALARM_ENTRY *ae)
{
BUFFER *local_buffer;
json_object *msg;
@@ -742,7 +725,7 @@ int aclk_update_alarm(RRDHOST *host, ALARM_ENTRY *ae)
return 0;
ACLK_SHARED_STATE_LOCK;
- if (unlikely(aclk_shared_state.agent_state == AGENT_INITIALIZING)) {
+ if (unlikely(aclk_shared_state.agent_state == ACLK_HOST_INITIALIZING)) {
ACLK_SHARED_STATE_UNLOCK;
return 0;
}
@@ -764,7 +747,7 @@ int aclk_update_alarm(RRDHOST *host, ALARM_ENTRY *ae)
return 0;
}
-int aclk_update_chart(RRDHOST *host, char *chart_name, int create)
+int ng_aclk_update_chart(RRDHOST *host, char *chart_name, int create)
{
struct aclk_query *query;
@@ -788,7 +771,7 @@ int aclk_update_chart(RRDHOST *host, char *chart_name, int create)
* Add a new collector to the list
* If it exists, update the chart count
*/
-void aclk_add_collector(RRDHOST *host, const char *plugin_name, const char *module_name)
+void ng_aclk_add_collector(RRDHOST *host, const char *plugin_name, const char *module_name)
{
struct aclk_query *query;
struct _collector *tmp_collector;
@@ -831,7 +814,7 @@ void aclk_add_collector(RRDHOST *host, const char *plugin_name, const char *modu
* This function will release the memory used and schedule
* a cloud update
*/
-void aclk_del_collector(RRDHOST *host, const char *plugin_name, const char *module_name)
+void ng_aclk_del_collector(RRDHOST *host, const char *plugin_name, const char *module_name)
{
struct aclk_query *query;
struct _collector *tmp_collector;
@@ -871,27 +854,3 @@ void aclk_del_collector(RRDHOST *host, const char *plugin_name, const char *modu
query->data.metadata_alarms.initial_on_connect = 0;
aclk_queue_query(query);
}
-
-struct label *add_aclk_host_labels(struct label *label) {
-#ifdef ENABLE_ACLK
- ACLK_PROXY_TYPE aclk_proxy;
- char *proxy_str;
- aclk_get_proxy(&aclk_proxy);
-
- switch(aclk_proxy) {
- case PROXY_TYPE_SOCKS5:
- proxy_str = "SOCKS5";
- break;