Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVladislavs Sokurenko <vladislavs.sokurenko@zabbix.com>2020-04-20 12:26:01 +0300
committerVladislavs Sokurenko <vladislavs.sokurenko@zabbix.com>2020-04-20 12:26:01 +0300
commitf9151189023ad710297b51bed8391ed4bec44707 (patch)
tree7699496764e08dca3330d104f5fc872ca1cae268 /src
parent4df9828b370bd1181f5511e7817def756ac0499a (diff)
........S. [ZBXNEXT-5877] logging to json, initial commit
Diffstat (limited to 'src')
-rw-r--r--src/libs/zbxembed/embed.c8
-rw-r--r--src/libs/zbxembed/embed.h1
-rw-r--r--src/libs/zbxembed/zabbix.c22
-rw-r--r--src/zabbix_server/alerter/alerter.c8
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, &params);
- 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;