diff options
author | Vladislavs Sokurenko <vladislavs.sokurenko@zabbix.com> | 2020-04-20 12:26:01 +0300 |
---|---|---|
committer | Vladislavs Sokurenko <vladislavs.sokurenko@zabbix.com> | 2020-04-20 12:26:01 +0300 |
commit | f9151189023ad710297b51bed8391ed4bec44707 (patch) | |
tree | 7699496764e08dca3330d104f5fc872ca1cae268 /src | |
parent | 4df9828b370bd1181f5511e7817def756ac0499a (diff) |
........S. [ZBXNEXT-5877] logging to json, initial commit
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/zbxembed/embed.c | 8 | ||||
-rw-r--r-- | src/libs/zbxembed/embed.h | 1 | ||||
-rw-r--r-- | src/libs/zbxembed/zabbix.c | 22 | ||||
-rw-r--r-- | src/zabbix_server/alerter/alerter.c | 8 |
4 files changed, 37 insertions, 2 deletions
diff --git a/src/libs/zbxembed/embed.c b/src/libs/zbxembed/embed.c index f2be1398fdf..778bdf9ec65 100644 --- a/src/libs/zbxembed/embed.c +++ b/src/libs/zbxembed/embed.c @@ -517,3 +517,11 @@ void zbx_es_set_timeout(zbx_es_t *es, int timeout) { es->env->timeout = timeout; } + +void zbx_es_set_debug(zbx_es_t *es, struct zbx_json *json) +{ + zbx_json_init(json, ZBX_JSON_STAT_BUF_LEN); + zbx_json_addarray(json, "logs"); + + es->env->json = json; +} diff --git a/src/libs/zbxembed/embed.h b/src/libs/zbxembed/embed.h index 8ceee545f31..a716b64536a 100644 --- a/src/libs/zbxembed/embed.h +++ b/src/libs/zbxembed/embed.h @@ -33,6 +33,7 @@ struct zbx_es_env int rt_error_num; int fatal_error; int timeout; + struct zbx_json *json; jmp_buf loc; }; diff --git a/src/libs/zbxembed/zabbix.c b/src/libs/zbxembed/zabbix.c index cba38229cb1..6dea5cfbed7 100644 --- a/src/libs/zbxembed/zabbix.c +++ b/src/libs/zbxembed/zabbix.c @@ -66,7 +66,27 @@ static duk_ret_t es_zabbix_ctor(duk_context *ctx) ******************************************************************************/ static duk_ret_t es_zabbix_log(duk_context *ctx) { - zabbix_log(duk_to_int(ctx, 0), "%s", duk_to_string(ctx, 1)); + zbx_es_env_t *env; + const char *message; + int level; + duk_memory_functions out_funcs; + + level = duk_to_int(ctx, 0); + message = duk_to_string(ctx, 1); + + zabbix_log(level, "%s", message); + + duk_get_memory_functions(ctx, &out_funcs); + env = (zbx_es_env_t *)out_funcs.udata; + + if (NULL == env->json) + return 0; + + zbx_json_addobject(env->json, NULL); + zbx_json_adduint64(env->json, "level", (zbx_uint64_t)level); + zbx_json_addstring(env->json, "message", message, ZBX_JSON_TYPE_STRING); + zbx_json_close(env->json); + return 0; } diff --git a/src/zabbix_server/alerter/alerter.c b/src/zabbix_server/alerter/alerter.c index 4e61ef5f183..a879bc4732b 100644 --- a/src/zabbix_server/alerter/alerter.c +++ b/src/zabbix_server/alerter/alerter.c @@ -214,18 +214,24 @@ static void alerter_process_webhook(zbx_ipc_socket_t *socket, zbx_ipc_message_t { char *script_bin = NULL, *params = NULL, *error = NULL, *output = NULL; int script_bin_sz, ret, timeout; + struct zbx_json json; zbx_alerter_deserialize_webhook(ipc_message->data, &script_bin, &script_bin_sz, &timeout, ¶ms); - if (SUCCEED != (ret = zbx_es_is_env_initialized(&es_engine))) + if (SUCCEED != (ret = zbx_es_is_env_initialized(&es_engine))) ret = zbx_es_init_env(&es_engine, &error); + zbx_es_set_debug(&es_engine, &json); + if (SUCCEED == ret) { zbx_es_set_timeout(&es_engine, timeout); + ret = zbx_es_execute(&es_engine, NULL, script_bin, script_bin_sz, params, &output, &error); } + zbx_json_free(&json); + if (SUCCEED == zbx_es_fatal_error(&es_engine)) { char *errmsg = NULL; |