rest: fix GET /session payload structure

Split partition data by client instead of a single array with every
partition.

Old payload structure:
{
  'sessions': [{'disk': 1, 'partition': 1, 'name': 'unknown'}, {'disk': 1, 'partition': 2, 'name': 'unknown'}, {'disk': 1, 'partition': 1, 'name': 'Ubuntu 22.04.4 LTS 64 bits'}]
}

New payload structure:
{
  'sessions': [
     {'addr': '1.1.1.1', 'partitions': ['disk': 1, 'partition': 1, 'name': 'Ubuntu 22.04.4 LTS 64 bits']},
     {'addr': '1.1.1.2', 'partitions': [{'disk': 1, 'partition': 1, 'name': 'unknown'}, {'disk': 1, 'partition': 2, 'name': 'unknown'}]}
  ]
}
master v1.2.5-22
Alejandro Sirgo Rica 2024-10-11 11:22:33 +02:00
parent ca3503b716
commit 65b397f59f
1 changed files with 22 additions and 2 deletions

View File

@ -954,7 +954,7 @@ static int og_json_os_array_get(struct og_dbi *dbi, json_t *array, const char *i
static int og_cmd_get_session(json_t *element, struct og_msg_params *params,
char *buffer_reply)
{
json_t *value, *root, *array;
json_t *value, *root, *array, *client_data, *partitions;
struct og_dbi *dbi;
const char *key;
int err = 0, i;
@ -992,11 +992,31 @@ static int og_cmd_get_session(json_t *element, struct og_msg_params *params,
}
for (i = 0; i < params->ips_array_len; i++) {
if (og_json_os_array_get(dbi, array, params->ips_array[i]) < 0) {
client_data = json_object();
if (!client_data) {
json_decref(array);
og_dbi_close(dbi);
return -1;
}
json_object_set_new(client_data, "addr", json_string(params->ips_array[i]));
partitions = json_array();
if (!partitions) {
json_decref(client_data);
json_decref(array);
og_dbi_close(dbi);
return -1;
}
if (og_json_os_array_get(dbi, partitions, params->ips_array[i]) < 0) {
json_decref(partitions);
json_decref(client_data);
json_decref(array);
og_dbi_close(dbi);
return -1;
}
json_object_set_new(client_data, "partitions", partitions);
json_array_append_new(array, client_data);
}
og_dbi_close(dbi);