diff options
author | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-05-10 17:18:15 +0200 |
---|---|---|
committer | Javier Sánchez Parra <jsanchez@soleta.eu> | 2022-05-18 16:50:14 +0200 |
commit | df5161ebc351df35504bd6366526a544ff6a96da (patch) | |
tree | 4ced41a36a5219a32dc41459258be9852a4f9094 /src/rest.c | |
parent | f03425e6aeb95fe25253ed541565378c78b6eea1 (diff) |
#915 Add last_cmd to GET /clients API
"last_cmd" json object contains information of the last command executed
by the correspondent client. For now, it only includes "result" string
property, which stores "success" if the last command finished correctly
or "failure" on the contrary.
To populate "result" property, this commit also adds "last_cmd_result"
enum attribute to og_client struct. Client response processing fills
this attribute according to its success.
Clients in WOL_SENT state always have last_cmd->result = "unknown".
Request: GET /clients
Response: 200 OK
{
"clients": [
{
"addr": "10.141.10.102",
"state": "WOL_SENT",
"last_cmd": {
"result": "unknown"
}
},
{
"addr": "10.141.10.101",
"state": "OPG",
"speed": 1000,
"last_cmd": {
"result": "success"
}
},
{
"addr": "10.141.10.100",
"state": "OPG",
"speed": 1000,
"last_cmd": {
"result": "failure"
}
}
]
}
Diffstat (limited to 'src/rest.c')
-rw-r--r-- | src/rest.c | 34 |
1 files changed, 32 insertions, 2 deletions
@@ -387,9 +387,35 @@ static int og_json_dump_clients(const char *buffer, size_t size, void *data) return 0; } +static const char *og_cmd_result_str_array[] = { + [OG_UNKNOWN] = "unknown", + [OG_FAILURE] = "failure", + [OG_SUCCESS] = "success", +}; + +static const char *og_cmd_result_str(const enum og_cmd_result result) +{ + if (result > OG_SUCCESS) + return "unknown"; + + return og_cmd_result_str_array[result]; +} + +static json_t *og_json_client_cmd_result(const enum og_cmd_result result) +{ + const char *result_str; + json_t *last_cmd; + + last_cmd = json_object(); + result_str = og_cmd_result_str(result); + json_object_set_new(last_cmd, "result", json_string(result_str)); + + return last_cmd; +} + static int og_json_client_append(json_t *array, struct og_client *client) { - json_t *addr, *state, *object; + json_t *addr, *state, *last_cmd, *object; object = json_object(); if (!object) @@ -408,6 +434,8 @@ static int og_json_client_append(json_t *array, struct og_client *client) } json_object_set_new(object, "state", state); json_object_set_new(object, "speed", json_integer(client->speed)); + last_cmd = og_json_client_cmd_result(client->last_cmd_result); + json_object_set_new(object, "last_cmd", last_cmd); json_array_append_new(array, object); return 0; @@ -416,7 +444,7 @@ static int og_json_client_append(json_t *array, struct og_client *client) static int og_json_client_wol_append(json_t *array, struct og_client_wol *cli_wol) { - json_t *addr, *state, *object; + json_t *addr, *state, *last_cmd, *object; object = json_object(); if (!object) @@ -434,6 +462,8 @@ static int og_json_client_wol_append(json_t *array, return -1; } json_object_set_new(object, "state", state); + last_cmd = og_json_client_cmd_result(OG_UNKNOWN); + json_object_set_new(object, "last_cmd", last_cmd); json_array_append_new(array, object); return 0; |