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