diff options
author | Scott Emidy <jemidy@digium.com> | 2015-08-07 14:20:29 -0500 |
---|---|---|
committer | Scott Emidy <jemidy@digium.com> | 2015-08-07 14:55:53 -0500 |
commit | df9ce3636695781be6ab2479f90766a56747dbd7 (patch) | |
tree | 48963ab145b594360a26dc3ea9085c1e2c5dd970 /res/ari | |
parent | e9f1bc08cbda7759707c30b8883b266555d0fefc (diff) |
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
Diffstat (limited to 'res/ari')
-rw-r--r-- | res/ari/resource_asterisk.c | 59 | ||||
-rw-r--r-- | res/ari/resource_asterisk.h | 11 |
2 files changed, 66 insertions, 4 deletions
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 */ |