mirror of
https://github.com/emqx/neuron.git
synced 2026-10-28 05:56:39 +08:00
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user