@cryptotaxi247 / netdata-1 / commits / c09dbb224

minor - add capability signifying this agent can speak apiv2 (#14817)

* capa apiv2 * build new cancellation proto * commited on wrong branch :D Revert "build new cancellation proto" This reverts commit 8290422de4074b9c383e29ad10e041668056679a. * use common source of truth for capas in apiv2 * fix for possible races

Timotej S committed Mar 31, 2023 at 05:11 UTC c09dbb224aded790c591e0ce3aa0d717264da908
4 files changed +38 -36
CMakeLists.txt
+2 -2
@@ -886,6 +886,8 @@ set(ACLK_ALWAYS_BUILD
886 aclk/aclk_proxy.h
887 aclk/aclk.c
888 aclk/aclk.h
889 + aclk/aclk_capas.c
890 + aclk/aclk_capas.h
891 )
892
893 set(ACLK_FILES
@@ -909,8 +911,6 @@ set(ACLK_FILES
911 aclk/aclk_alarm_api.h
912 aclk/aclk_contexts_api.c
913 aclk/aclk_contexts_api.h
912 - aclk/aclk_capas.c
913 - aclk/aclk_capas.h
914 aclk/schema-wrappers/connection.cc
915 aclk/schema-wrappers/connection.h
916 aclk/schema-wrappers/node_connection.cc
Makefile.am
+2 -2
@@ -696,8 +696,6 @@ ACLK_FILES = \
696 aclk/aclk_alarm_api.h \
697 aclk/aclk_contexts_api.c \
698 aclk/aclk_contexts_api.h \
699 - aclk/aclk_capas.c \
700 - aclk/aclk_capas.h \
699 aclk/helpers/mqtt_wss_pal.h \
700 aclk/helpers/ringbuffer_pal.h \
701 aclk/schema-wrappers/connection.cc \
@@ -843,6 +841,8 @@ ACLK_ALWAYS_BUILD_FILES = \
841 aclk/aclk_proxy.h \
842 aclk/aclk.c \
843 aclk/aclk.h \
844 + aclk/aclk_capas.c \
845 + aclk/aclk_capas.h \
846 $(NULL)
847
848 SPAWN_PLUGIN_FILES = \
aclk/aclk_capas.c
+20 -16
@@ -7,13 +7,14 @@
7 const struct capability *aclk_get_agent_capas()
8 {
9 static struct capability agent_capabilities[] = {
10 - { .name = "json", .version = 2, .enabled = 0 },
11 - { .name = "proto", .version = 1, .enabled = 1 },
12 - { .name = "ml", .version = 0, .enabled = 0 },
13 - { .name = "mc", .version = 0, .enabled = 0 },
14 - { .name = "ctx", .version = 1, .enabled = 1 },
15 - { .name = "funcs", .version = 1, .enabled = 1 },
16 - { .name = NULL, .version = 0, .enabled = 0 }
10 + { .name = "json", .version = 2, .enabled = 0 },
11 + { .name = "proto", .version = 1, .enabled = 1 },
12 + { .name = "ml", .version = 0, .enabled = 0 },
13 + { .name = "mc", .version = 0, .enabled = 0 },
14 + { .name = "ctx", .version = 1, .enabled = 1 },
15 + { .name = "funcs", .version = 1, .enabled = 1 },
16 + { .name = "http_api_v2", .version = 1, .enabled = 1 },
17 + { .name = NULL, .version = 0, .enabled = 0 }
18 };
19 agent_capabilities[2].version = ml_capable() ? 1 : 0;
20 agent_capabilities[2].enabled = ml_enabled(localhost);
@@ -27,21 +28,24 @@ const struct capability *aclk_get_agent_capas()
28 struct capability *aclk_get_node_instance_capas(RRDHOST *host)
29 {
30 struct capability ni_caps[] = {
30 - { .name = "proto", .version = 1, .enabled = 1 },
31 - { .name = "ml", .version = ml_capable(), .enabled = ml_enabled(host) },
31 + { .name = "proto", .version = 1, .enabled = 1 },
32 + { .name = "ml", .version = ml_capable(), .enabled = ml_enabled(host) },
33 { .name = "mc",
34 .version = enable_metric_correlations ? metric_correlations_version : 0,
35 .enabled = enable_metric_correlations },
35 - { .name = "ctx", .version = 1, .enabled = 1 },
36 - { .name = "funcs", .version = 0, .enabled = 0 },
37 - { .name = NULL, .version = 0, .enabled = 0 }
36 + { .name = "ctx", .version = 1, .enabled = 1 },
37 + { .name = "funcs", .version = 0, .enabled = 0 },
38 + { .name = "http_api_v2", .version = 1, .enabled = 1 },
39 + { .name = NULL, .version = 0, .enabled = 0 }
40 };
39 - if (host == localhost || (host->receiver && stream_has_capability(host->receiver, STREAM_CAP_FUNCTIONS))) {
40 - ni_caps[4].version = 1;
41 - ni_caps[4].enabled = 1;
42 - }
41
42 struct capability *ret = mallocz(sizeof(ni_caps));
43 memcpy(ret, ni_caps, sizeof(ni_caps));
44 +
45 + if (host == localhost || (host->receiver && stream_has_capability(host->receiver, STREAM_CAP_FUNCTIONS))) {
46 + ret[4].version = 1;
47 + ret[4].enabled = 1;
48 + }
49 +
50 return ret;
51 }
database/contexts/api_v2.c
+14 -16
@@ -2,6 +2,7 @@
2
3 #include "internal.h"
4
5 +#include "aclk/aclk_capas.h"
6
7 // ----------------------------------------------------------------------------
8 // /api/v2/contexts API
@@ -306,23 +307,20 @@ static ssize_t rrdcontext_to_json_v2_add_host(void *data, RRDHOST *host, bool qu
307 buffer_json_member_add_array(wb, "services");
308 buffer_json_array_close(wb);
309
309 - buffer_json_member_add_array(wb, "capabilities");
310 - buffer_json_add_array_item_object(wb);
311 - buffer_json_member_add_string(wb, "name", "funcs");
312 - buffer_json_member_add_uint64(wb, "version", 1);
313 - buffer_json_member_add_boolean(wb, "enabled", true);
314 - buffer_json_object_close(wb);
315 - buffer_json_add_array_item_object(wb);
316 - buffer_json_member_add_string(wb, "name", "mc");
317 - buffer_json_member_add_uint64(wb, "version", 1);
318 - buffer_json_member_add_boolean(wb, "enabled", true);
319 - buffer_json_object_close(wb);
320 - buffer_json_add_array_item_object(wb);
321 - buffer_json_member_add_string(wb, "name", "ml");
322 - buffer_json_member_add_uint64(wb, "version", 1);
323 - buffer_json_member_add_boolean(wb, "enabled", true);
324 - buffer_json_object_close(wb);
310 + buffer_json_member_add_array(wb, "nodeInstanceCapabilities");
311 +
312 + struct capability *capas = aclk_get_node_instance_capas(host);
313 + struct capability *capa = capas;
314 + while(capa->name != NULL) {
315 + buffer_json_add_array_item_object(wb);
316 + buffer_json_member_add_string(wb, "name", capa->name);
317 + buffer_json_member_add_uint64(wb, "version", capa->version);
318 + buffer_json_member_add_boolean(wb, "enabled", capa->enabled);
319 + buffer_json_object_close(wb);
320 + capa++;
321 + }
322 buffer_json_array_close(wb);
323 + freez(capas);
324
325 web_client_api_request_v1_info_summary_alarm_statuses(host, wb, "alarmCounters");
326