From 261d490c4e8ad9b6cee46e82a8ad029eeaf6cd6b Mon Sep 17 00:00:00 2001 From: "Jose M. Guisado" Date: Thu, 22 Jul 2021 14:09:46 +0200 Subject: #1052 Populate session column when adding actions If the scope of a command, procedure or task is related to a group of computers then actions associated with that schedule can share the same session value. og_dbi_add_action was not initializing session value, as it is only used for visualization purposes in the legacy web interface. This patch enables og_dbi_add_action to populate session column by assigning it the id value of the first action related to the scope. Example: Power off command for a room scope of 4 clients will result in 4 actions, a power off for each client. The first action id will determine the session value for the rest. --- src/rest.c | 16 +++++++++++++--- src/schedule.h | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/rest.c b/src/rest.c index bb64047..fa35eab 100644 --- a/src/rest.c +++ b/src/rest.c @@ -2666,7 +2666,7 @@ static int og_cmd_legacy(const char *input, struct og_cmd *cmd) return err; } -static int og_dbi_add_action(const struct og_dbi *dbi, const struct og_task *task, +static int og_dbi_add_action(const struct og_dbi *dbi, struct og_task *task, struct og_cmd *cmd) { char start_date_string[24]; @@ -2692,7 +2692,7 @@ static int og_dbi_add_action(const struct og_dbi *dbi, const struct og_task *tas "VALUES (%d, %d, %d, '%s', '%s', %d, %d, '%s', " "'%s', %d, %d, %d, %d, '%s', %d, %d, %d)", cmd->client_id, EJECUCION_TAREA, task->task_id, - "", cmd->ip, 0, task->command_id, + "", cmd->ip, task->session, task->command_id, task->params, start_date_string, ACCION_INICIADA, ACCION_SINRESULTADO, task->type_scope, task->scope, "", @@ -2704,13 +2704,23 @@ static int og_dbi_add_action(const struct og_dbi *dbi, const struct og_task *tas __func__, __LINE__, msglog); return -1; } + cmd->id = dbi_conn_sequence_last(dbi->conn, NULL); + if (!task->session) { + task->session = cmd->id; + dbi_result_free(result); + result = dbi_conn_queryf(dbi->conn, + "UPDATE acciones SET sesion=%d " + "WHERE idaccion=%d", + task->session, cmd->id); + } + dbi_result_free(result); return 0; } -static int og_queue_task_command(struct og_dbi *dbi, const struct og_task *task, +static int og_queue_task_command(struct og_dbi *dbi, struct og_task *task, char *query) { struct og_cmd *cmd; diff --git a/src/schedule.h b/src/schedule.h index 12c394c..69dbde9 100644 --- a/src/schedule.h +++ b/src/schedule.h @@ -55,6 +55,7 @@ struct og_task { uint32_t center_id; uint32_t schedule_id; uint32_t type_scope; + uint32_t session; uint32_t scope; const char *filtered_scope; const char *params; -- cgit v1.2.3-18-g5258