#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.
master
Jose M. Guisado 2021-07-22 14:09:46 +02:00 committed by OpenGnSys Support Team
parent 33d8cecfe1
commit 261d490c4e
2 changed files with 14 additions and 3 deletions

View File

@ -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;

View File

@ -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;