|
@@ -47,6 +47,7 @@ static cmd_status_t cmd_write_config_execute(char *args, char **message);
|
|
|
static cmd_status_t cmd_ping_execute(char *args, char **message);
|
|
|
static cmd_status_t cmd_aclk_state(char *args, char **message);
|
|
|
static cmd_status_t cmd_version(char *args, char **message);
|
|
|
+static cmd_status_t cmd_dumpconfig(char *args, char **message);
|
|
|
|
|
|
static command_info_t command_info_array[] = {
|
|
|
{"help", cmd_help_execute, CMD_TYPE_HIGH_PRIORITY}, // show help menu
|
|
@@ -61,7 +62,8 @@ static command_info_t command_info_array[] = {
|
|
|
{"write-config", cmd_write_config_execute, CMD_TYPE_ORTHOGONAL},
|
|
|
{"ping", cmd_ping_execute, CMD_TYPE_ORTHOGONAL},
|
|
|
{"aclk-state", cmd_aclk_state, CMD_TYPE_ORTHOGONAL},
|
|
|
- {"version", cmd_version, CMD_TYPE_ORTHOGONAL}
|
|
|
+ {"version", cmd_version, CMD_TYPE_ORTHOGONAL},
|
|
|
+ {"dumpconfig", cmd_dumpconfig, CMD_TYPE_ORTHOGONAL}
|
|
|
};
|
|
|
|
|
|
/* Mutexes for commands of type CMD_TYPE_ORTHOGONAL */
|
|
@@ -127,6 +129,8 @@ static cmd_status_t cmd_help_execute(char *args, char **message)
|
|
|
" Return with 'pong' if agent is alive.\n"
|
|
|
"aclk-state [json]\n"
|
|
|
" Returns current state of ACLK and Cloud connection. (optionally in json).\n"
|
|
|
+ "dumpconfig\n"
|
|
|
+ " Returns the current netdata.conf on stdout.\n"
|
|
|
"version\n"
|
|
|
" Returns the netdata version.\n",
|
|
|
MAX_COMMAND_LENGTH - 1);
|
|
@@ -330,6 +334,17 @@ static cmd_status_t cmd_version(char *args, char **message)
|
|
|
return CMD_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
+static cmd_status_t cmd_dumpconfig(char *args, char **message)
|
|
|
+{
|
|
|
+ (void)args;
|
|
|
+
|
|
|
+ BUFFER *wb = buffer_create(1024, NULL);
|
|
|
+ config_generate(wb, 0);
|
|
|
+ *message = strdupz(buffer_tostring(wb));
|
|
|
+ buffer_free(wb);
|
|
|
+ return CMD_STATUS_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
static void cmd_lock_exclusive(unsigned index)
|
|
|
{
|
|
|
(void)index;
|
|
@@ -393,32 +408,30 @@ static void pipe_write_cb(uv_write_t* req, int status)
|
|
|
|
|
|
uv_close((uv_handle_t *)client, pipe_close_cb);
|
|
|
--clients;
|
|
|
- freez(client->data);
|
|
|
+ buffer_free(client->data);
|
|
|
info("Command Clients = %u\n", clients);
|
|
|
}
|
|
|
|
|
|
-static inline void add_char_to_command_reply(char *reply_string, unsigned *reply_string_size, char character)
|
|
|
+static inline void add_char_to_command_reply(BUFFER *reply_string, unsigned *reply_string_size, char character)
|
|
|
{
|
|
|
- reply_string[(*reply_string_size)++] = character;
|
|
|
+ buffer_fast_charcat(reply_string, character);
|
|
|
+ *reply_string_size +=1;
|
|
|
}
|
|
|
|
|
|
-static inline void add_string_to_command_reply(char *reply_string, unsigned *reply_string_size, char *str)
|
|
|
+static inline void add_string_to_command_reply(BUFFER *reply_string, unsigned *reply_string_size, char *str)
|
|
|
{
|
|
|
unsigned len;
|
|
|
|
|
|
len = strlen(str);
|
|
|
-
|
|
|
- if (MAX_COMMAND_LENGTH - 1 < len + *reply_string_size)
|
|
|
- len = MAX_COMMAND_LENGTH - *reply_string_size - 1;
|
|
|
-
|
|
|
- strncpyz(reply_string + *reply_string_size, str, len);
|
|
|
+ buffer_fast_strcat(reply_string, str, len);
|
|
|
*reply_string_size += len;
|
|
|
}
|
|
|
|
|
|
static void send_command_reply(struct command_context *cmd_ctx, cmd_status_t status, char *message)
|
|
|
{
|
|
|
int ret;
|
|
|
- char *reply_string = mallocz(MAX_COMMAND_LENGTH);
|
|
|
+ BUFFER *reply_string = buffer_create(128, NULL);
|
|
|
+
|
|
|
char exit_status_string[MAX_EXIT_STATUS_LENGTH + 1] = {'\0', };
|
|
|
unsigned reply_string_size = 0;
|
|
|
uv_buf_t write_buf;
|
|
@@ -436,13 +449,12 @@ static void send_command_reply(struct command_context *cmd_ctx, cmd_status_t sta
|
|
|
|
|
|
cmd_ctx->write_req.data = client;
|
|
|
client->data = reply_string;
|
|
|
- write_buf.base = reply_string;
|
|
|
+ write_buf.base = reply_string->buffer;
|
|
|
write_buf.len = reply_string_size;
|
|
|
ret = uv_write(&cmd_ctx->write_req, (uv_stream_t *)client, &write_buf, 1, pipe_write_cb);
|
|
|
if (ret) {
|
|
|
error("uv_write(): %s", uv_strerror(ret));
|
|
|
}
|
|
|
- info("COMMAND: Sending reply: \"%s\"", reply_string);
|
|
|
}
|
|
|
|
|
|
cmd_status_t execute_command(cmd_t idx, char *args, char **message)
|