Pre release fixes (#15405)
Costa Tsaousis committed
Jul 14, 2023 at 21:04 UTC
a05a8f4074d8bdf8320915590e2a3794997215c1
7 files changed
+28
-37
daemon/main.c
+2
@@ -1904,6 +1904,8 @@ int main(int argc, char **argv) {
1904
1905
get_system_timezone();
1906
1907
+ bearer_tokens_init();
1908
+
1909
replication_initialize();
1910
1911
// --------------------------------------------------------------------
database/rrdhost.c
+2
@@ -1065,12 +1065,14 @@ int rrd_init(char *hostname, struct rrdhost_system_info *system_info, bool unitt
1065
return 1;
1066
}
1067
1068
+#ifdef NETDATA_DEV_MODE
1069
// we register this only on localhost
1070
// for the other nodes, the origin server should register it
1071
rrd_collector_started(); // this creates a collector that runs for as long as netdata runs
1072
rrd_collector_add_function(localhost, NULL, "streaming", 10,
1073
RRDFUNCTIONS_STREAMING_HELP, true,
1074
rrdhost_function_streaming, NULL);
1075
+#endif
1076
1077
if (likely(system_info)) {
1078
migrate_localhost(&localhost->host_uuid);
libnetdata/socket/socket.h
+1
@@ -28,6 +28,7 @@ typedef enum web_client_acl {
28
} WEB_CLIENT_ACL;
29
30
#define WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC (WEB_CLIENT_ACL_DASHBOARD | WEB_CLIENT_ACL_ACLK | WEB_CLIENT_ACL_WEBRTC | WEB_CLIENT_ACL_BEARER_OPTIONAL)
31
+#define WEB_CLIENT_ACL_ACLK_WEBRTC_DASHBOARD_WITH_BEARER (WEB_CLIENT_ACL_DASHBOARD | WEB_CLIENT_ACL_ACLK | WEB_CLIENT_ACL_WEBRTC | WEB_CLIENT_ACL_BEARER_REQUIRED)
32
33
#ifdef NETDATA_DEV_MODE
34
#define ACL_DEV_OPEN_ACCESS WEB_CLIENT_ACL_DASHBOARD
registry/registry.c
+11
-18
@@ -190,26 +190,19 @@ int registry_request_hello_json(RRDHOST *host, struct web_client *w) {
190
buffer_json_member_add_boolean(w->response.data, "anonymous_statistics", netdata_anonymous_statistics_enabled);
191
192
buffer_json_member_add_array(w->response.data, "nodes");
193
- {
193
+ RRDHOST *h;
194
+ dfe_start_read(rrdhost_root_index, h) {
195
buffer_json_add_array_item_object(w->response.data);
195
- buffer_json_member_add_string(w->response.data, "machine_guid", host->machine_guid);
196
- buffer_json_member_add_string(w->response.data, "hostname", rrdhost_registry_hostname(host));
196
+ buffer_json_member_add_string(w->response.data, "machine_guid", h->machine_guid);
197
+
198
+ if(h->node_id)
199
+ buffer_json_member_add_uuid(w->response.data, "node_id", h->node_id);
200
+
201
+ buffer_json_member_add_string(w->response.data, "hostname", rrdhost_registry_hostname(h));
202
+ buffer_json_object_close(w->response.data);
203
}
198
- buffer_json_object_close(w->response.data); // nodes
199
-
200
-// RRDHOST *h;
201
-// dfe_start_read(rrdhost_root_index, h) {
202
-// buffer_json_add_array_item_object(w->response.data);
203
-// buffer_json_member_add_string(w->response.data, "machine_guid", h->machine_guid);
204
-//
205
-// if(h->node_id)
206
-// buffer_json_member_add_uuid(w->response.data, "node_id", h->node_id);
207
-//
208
-// buffer_json_member_add_string(w->response.data, "hostname", rrdhost_registry_hostname(h));
209
-// buffer_json_object_close(w->response.data);
210
-// }
211
-// dfe_done(h);
212
- buffer_json_array_close(w->response.data);
204
+ dfe_done(h);
205
+ buffer_json_array_close(w->response.data); // nodes
206
207
registry_json_footer(w);
208
return HTTP_RESP_OK;
web/api/web_api.h
+1
@@ -13,6 +13,7 @@ extern bool netdata_is_protected_by_bearer;
13
extern DICTIONARY *netdata_authorized_bearers;
14
bool api_check_bearer_token(struct web_client *w);
15
bool extract_bearer_token_from_request(struct web_client *w, char *dst, size_t dst_len);
16
+void bearer_tokens_init(void);
17
18
struct web_api_command {
19
const char *command;
web/api/web_api_v1.c
+4
-4
@@ -1545,18 +1545,18 @@ static struct web_api_command api_commands_v1[] = {
1545
// { "ml_models", 0, WEB_CLIENT_ACL_DASHBOARD, web_client_api_request_v1_ml_models },
1546
#endif
1547
1548
- {"manage/health", 0, WEB_CLIENT_ACL_MGMT | WEB_CLIENT_ACL_ACLK | WEB_CLIENT_ACL_BEARER_REQUIRED, web_client_api_request_v1_mgmt_health },
1548
+ {"manage/health", 0, WEB_CLIENT_ACL_MGMT | WEB_CLIENT_ACL_ACLK_WEBRTC_DASHBOARD_WITH_BEARER, web_client_api_request_v1_mgmt_health },
1549
{ "aclk", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v1_aclk_state },
1550
{ "metric_correlations", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v1_metric_correlations },
1551
{ "weights", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v1_weights },
1552
1553
- {"function", 0, WEB_CLIENT_ACL_ACLK | WEB_CLIENT_ACL_BEARER_REQUIRED | ACL_DEV_OPEN_ACCESS, web_client_api_request_v1_function },
1554
- {"functions", 0, WEB_CLIENT_ACL_ACLK | WEB_CLIENT_ACL_BEARER_REQUIRED | ACL_DEV_OPEN_ACCESS, web_client_api_request_v1_functions },
1553
+ {"function", 0, WEB_CLIENT_ACL_ACLK_WEBRTC_DASHBOARD_WITH_BEARER | ACL_DEV_OPEN_ACCESS, web_client_api_request_v1_function },
1554
+ {"functions", 0, WEB_CLIENT_ACL_ACLK_WEBRTC_DASHBOARD_WITH_BEARER | ACL_DEV_OPEN_ACCESS, web_client_api_request_v1_functions },
1555
1556
{ "dbengine_stats", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v1_dbengine_stats },
1557
1558
// terminator
1559
- { NULL, 0, WEB_CLIENT_ACL_NONE, NULL },
1559
+ { NULL, 0, WEB_CLIENT_ACL_NONE, NULL },
1560
};
1561
1562
inline int web_client_api_request_v1(RRDHOST *host, struct web_client *w, char *url_path_endpoint) {
web/api/web_api_v2.c
+7
-15
@@ -28,21 +28,13 @@ static void bearer_token_cleanup(void) {
28
dictionary_garbage_collect(netdata_authorized_bearers);
29
}
30
31
-static time_t bearer_get_token(uuid_t *uuid) {
32
- static SPINLOCK spinlock = NETDATA_SPINLOCK_INITIALIZER;
33
- static bool initialized = false;
34
-
35
- if(!initialized) {
36
- spinlock_lock(&spinlock);
37
- if (!netdata_authorized_bearers) {
38
- netdata_authorized_bearers = dictionary_create_advanced(
39
- DICT_OPTION_SINGLE_THREADED | DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE,
40
- NULL, sizeof(struct bearer_token));
41
- }
42
- spinlock_unlock(&spinlock);
43
- initialized = true;
44
- }
31
+void bearer_tokens_init(void) {
32
+ netdata_authorized_bearers = dictionary_create_advanced(
33
+ DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE,
34
+ NULL, sizeof(struct bearer_token));
35
+}
36
37
+static time_t bearer_get_token(uuid_t *uuid) {
38
char uuid_str[UUID_STR_LEN];
39
40
uuid_generate_random(*uuid);
@@ -657,7 +649,7 @@ static struct web_api_command api_commands_v2[] = {
649
{"nodes", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v2_nodes},
650
{"node_instances", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v2_node_instances},
651
{"versions", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v2_versions},
660
- {"functions", 0, WEB_CLIENT_ACL_ACLK | WEB_CLIENT_ACL_BEARER_REQUIRED | ACL_DEV_OPEN_ACCESS, web_client_api_request_v2_functions},
652
+ {"functions", 0, WEB_CLIENT_ACL_ACLK_WEBRTC_DASHBOARD_WITH_BEARER | ACL_DEV_OPEN_ACCESS, web_client_api_request_v2_functions},
653
{"q", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v2_q},
654
{"alerts", 0, WEB_CLIENT_ACL_DASHBOARD_ACLK_WEBRTC, web_client_api_request_v2_alerts},
655