From df9ce3636695781be6ab2479f90766a56747dbd7 Mon Sep 17 00:00:00 2001 From: Scott Emidy Date: Fri, 7 Aug 2015 14:20:29 -0500 Subject: ARI: Retrieve existing log channels An http request can be sent to get the existing Asterisk logs. The command "curl -v -u user:pass -X GET 'http://localhost:8088 /ari/asterisk/logging'" can be run in the terminal to access the newly implemented functionality. * Retrieve all existing log channels ASTERISK-25252 Change-Id: I7bb08b93e3b938c991f3f56cc5d188654768a808 --- res/ari/resource_asterisk.c | 59 ++++++++++++++++++++++++++++++++++++++++++--- res/ari/resource_asterisk.h | 11 +++++++++ 2 files changed, 66 insertions(+), 4 deletions(-) (limited to 'res/ari') diff --git a/res/ari/resource_asterisk.c b/res/ari/resource_asterisk.c index 070a1aa3d..30684d276 100644 --- a/res/ari/resource_asterisk.c +++ b/res/ari/resource_asterisk.c @@ -628,6 +628,57 @@ void ast_ari_asterisk_reload_module(struct ast_variable *headers, ast_ari_response_no_content(response); } +/*! + * \brief Process logger information and append to a json array + * \param channel Resource logger channel name path + * \param type Resource log type + * \param status Resource log status + * \param configuration Resource logger levels + * \param log_data_list Resource array + * + * \retval -1 if no resource exists + * \retval 0 if resource exists + */ +static int process_log_list(const char *channel, const char *type, + const char *status, const char *configuration, void *log_data_list) +{ + struct ast_json *logger_info; + + logger_info = ast_json_pack("{s: s, s: s, s: s, s: s}", + "channel", channel, "type", type, "status", status, "configuration", + configuration); + + if (!logger_info) { + return AST_LOGGER_FAILURE; + } + + ast_json_array_append(log_data_list, logger_info); + return AST_LOGGER_SUCCESS; +} + +void ast_ari_asterisk_list_log_channels(struct ast_variable *headers, + struct ast_ari_asterisk_list_log_channels_args *args, + struct ast_ari_response *response) +{ + struct ast_json *json; + int res; + + json = ast_json_array_create(); + res = ast_logger_get_channels(&process_log_list, json); + + if (res == AST_LOGGER_FAILURE) { + ast_ari_response_error(response, 500, "Internal Server Error", + "Response body is not valid"); + return; + } else if (res == AST_LOGGER_ALLOC_ERROR) { + ast_ari_response_error(response, 500, "Internal Server Error", + "Allocation Failed"); + return; + } + + ast_ari_response_ok(response, json); +} + void ast_ari_asterisk_add_log(struct ast_variable *headers, struct ast_ari_asterisk_add_log_args *args, struct ast_ari_response *response) @@ -659,18 +710,18 @@ void ast_ari_asterisk_rotate_log(struct ast_variable *headers, struct ast_ari_asterisk_rotate_log_args *args, struct ast_ari_response *response) { - int success; + int res; ast_assert(response != NULL); - success = ast_logger_rotate_channel(args->log_channel_name); + res = ast_logger_rotate_channel(args->log_channel_name); - if (success == 0) { + if (res == AST_LOGGER_FAILURE) { ast_ari_response_error( response, 404, "Not Found", "Log channel does not exist"); return; - } else if (success == -1) { + } else if (res == AST_LOGGER_ALLOC_ERROR) { ast_ari_response_error( response, 500, "Internal Server Error", "Allocation failed"); diff --git a/res/ari/resource_asterisk.h b/res/ari/resource_asterisk.h index 5f84d0761..a4a7da080 100644 --- a/res/ari/resource_asterisk.h +++ b/res/ari/resource_asterisk.h @@ -194,6 +194,17 @@ struct ast_ari_asterisk_reload_module_args { * \param[out] response HTTP response */ void ast_ari_asterisk_reload_module(struct ast_variable *headers, struct ast_ari_asterisk_reload_module_args *args, struct ast_ari_response *response); +/*! Argument struct for ast_ari_asterisk_list_log_channels() */ +struct ast_ari_asterisk_list_log_channels_args { +}; +/*! + * \brief Gets Asterisk log channel information. + * + * \param headers HTTP headers + * \param args Swagger parameters + * \param[out] response HTTP response + */ +void ast_ari_asterisk_list_log_channels(struct ast_variable *headers, struct ast_ari_asterisk_list_log_channels_args *args, struct ast_ari_response *response); /*! Argument struct for ast_ari_asterisk_add_log() */ struct ast_ari_asterisk_add_log_args { /*! The log channel to add */ -- cgit v1.2.3