Merge pull request #696 from fengzeroz/main

api: get all nodes state
This commit is contained in:
fengzeroz
2022-08-04 18:14:15 +08:00
committed by GitHub
8 changed files with 110 additions and 9 deletions
+1 -1
View File
@@ -349,7 +349,7 @@ inline static UT_icd neu_nodes_state_t_icd()
return icd;
}
typedef struct {
UT_array *states; // array of neu_node_state_t
UT_array *states; // array of neu_nodes_state_t
} neu_resp_get_nodes_state_t, neu_reqresp_nodes_state_t;
typedef struct neu_req_update_license {
+34 -8
View File
@@ -234,17 +234,15 @@ void handle_get_node_state(nng_aio *aio)
VALIDATE_JWT(aio);
header.ctx = aio;
if (http_get_param_str(aio, "node", node_name, sizeof(node_name)) <= 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_PARAM_IS_WRONG, {
http_response(aio, error_code.error, result_error);
})
return;
header.type = NEU_REQ_GET_NODES_STATE;
} else {
header.type = NEU_REQ_GET_NODE_STATE;
strcpy(cmd.node, node_name);
}
header.ctx = aio;
header.type = NEU_REQ_GET_NODE_STATE;
strcpy(cmd.node, node_name);
ret = neu_plugin_op(plugin, header, &cmd);
if (ret != 0) {
NEU_JSON_RESPONSE_ERROR(NEU_ERR_IS_BUSY, {
@@ -265,4 +263,32 @@ void handle_get_node_state_resp(nng_aio *aio, neu_resp_get_node_state_t *state)
http_ok(aio, result);
free(result);
}
void handle_get_nodes_state_resp(nng_aio * aio,
neu_resp_get_nodes_state_t *states)
{
neu_json_get_nodes_state_resp_t states_res = { 0 };
char * result = NULL;
states_res.n_node = utarray_len(states->states);
states_res.nodes =
calloc(states_res.n_node, sizeof(neu_json_get_nodes_state_t));
utarray_foreach(states->states, neu_nodes_state_t *, state)
{
int index = utarray_eltidx(states->states, state);
states_res.nodes[index].name = state->node;
states_res.nodes[index].running = state->state.running;
states_res.nodes[index].link = state->state.link;
}
neu_json_encode_by_fn(&states_res, neu_json_encode_get_nodes_state_resp,
&result);
http_ok(aio, result);
free(result);
free(states_res.nodes);
utarray_free(states->states);
}
+2
View File
@@ -36,5 +36,7 @@ void handle_get_node_setting_resp(nng_aio * aio,
void handle_node_ctl(nng_aio *aio);
void handle_get_node_state(nng_aio *aio);
void handle_get_node_state_resp(nng_aio *aio, neu_resp_get_node_state_t *state);
void handle_get_nodes_state_resp(nng_aio * aio,
neu_resp_get_nodes_state_t *states);
#endif
+4
View File
@@ -280,6 +280,10 @@ static int dashb_plugin_request(neu_plugin_t * plugin,
handle_get_node_setting_resp(header->ctx,
(neu_resp_get_node_setting_t *) data);
break;
case NEU_RESP_GET_NODES_STATE:
handle_get_nodes_state_resp(header->ctx,
(neu_resp_get_nodes_state_t *) data);
break;
case NEU_RESP_GET_NODE_STATE:
handle_get_node_state_resp(header->ctx,
(neu_resp_get_node_state_t *) data);
+1
View File
@@ -249,6 +249,7 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data)
case NEU_REQ_UPDATE_LICENSE:
case NEU_REQ_APP_UNSUBSCRIBE_GROUP:
case NEU_RESP_GET_NODE_STATE:
case NEU_RESP_GET_NODES_STATE:
case NEU_RESP_GET_NODE_SETTING:
case NEU_RESP_READ_GROUP:
case NEU_RESP_GET_SUBSCRIBE_GROUP:
+13
View File
@@ -358,7 +358,20 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
reply(manager, header, &resp);
break;
}
case NEU_REQ_GET_NODES_STATE: {
neu_resp_get_nodes_state_t resp = { 0 };
UT_array *states = neu_node_manager_get_state(manager->node_manager);
resp.states = utarray_clone(states);
strcpy(header->receiver, header->sender);
strcpy(header->sender, "manager");
header->type = NEU_RESP_GET_NODES_STATE;
reply(manager, header, &resp);
utarray_free(states);
break;
}
case NEU_REQ_GET_NODE_SETTING:
case NEU_REQ_READ_GROUP:
case NEU_REQ_WRITE_TAG:
+42
View File
@@ -145,6 +145,48 @@ int neu_json_encode_get_node_state_resp(void *json_object, void *param)
return ret;
}
int neu_json_encode_get_nodes_state_resp(void *json_object, void *param)
{
int ret = 0;
neu_json_get_nodes_state_resp_t *resp =
(neu_json_get_nodes_state_resp_t *) param;
void * node_array = neu_json_array();
neu_json_get_nodes_state_t *p_node = resp->nodes;
for (int i = 0; i < resp->n_node; i++) {
neu_json_elem_t node_elems[] = {
{
.name = "node",
.t = NEU_JSON_STR,
.v.val_str = p_node->name,
},
{
.name = "running",
.t = NEU_JSON_INT,
.v.val_int = p_node->running,
},
{
.name = "link",
.t = NEU_JSON_INT,
.v.val_int = p_node->link,
},
};
node_array = neu_json_encode_array(node_array, node_elems,
NEU_JSON_ELEM_SIZE(node_elems));
p_node++;
}
neu_json_elem_t resp_elems[] = { {
.name = "states",
.t = NEU_JSON_OBJECT,
.v.val_object = node_array,
} };
ret = neu_json_encode_field(json_object, resp_elems,
NEU_JSON_ELEM_SIZE(resp_elems));
return ret;
}
int neu_json_encode_get_nodes_resp(void *json_object, void *param)
{
int ret = 0;
+13
View File
@@ -53,6 +53,19 @@ typedef struct {
int neu_json_encode_get_node_state_resp(void *json_object, void *param);
typedef struct {
char * name;
int64_t running;
int64_t link;
} neu_json_get_nodes_state_t;
typedef struct {
uint16_t n_node;
neu_json_get_nodes_state_t *nodes;
} neu_json_get_nodes_state_resp_t;
int neu_json_encode_get_nodes_state_resp(void *json_object, void *param);
typedef struct {
char *name;
char *plugin;