summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client.c6
-rw-r--r--src/rest.c34
-rw-r--r--src/rest.h7
3 files changed, 45 insertions, 2 deletions
diff --git a/src/client.c b/src/client.c
index f4a47eb..a53f52c 100644
--- a/src/client.c
+++ b/src/client.c
@@ -768,6 +768,11 @@ int og_agent_state_process_response(struct og_client *cli)
break;
}
+ if (success)
+ cli->last_cmd_result = OG_SUCCESS;
+ else
+ cli->last_cmd_result = OG_FAILURE;
+
if (code != 200 && code != 103) {
og_dbi_update_action(cli->last_cmd_id, success);
cli->last_cmd_id = 0;
@@ -831,6 +836,7 @@ int og_agent_state_process_response(struct og_client *cli)
if (err < 0) {
err = 0;
success = false;
+ cli->last_cmd_result = OG_FAILURE;
/* ... cancel pending actions related to this task for this client here */
}
diff --git a/src/rest.c b/src/rest.c
index b7552ca..7daf09f 100644
--- a/src/rest.c
+++ b/src/rest.c
@@ -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;
diff --git a/src/rest.h b/src/rest.h
index d586ef6..df6b225 100644
--- a/src/rest.h
+++ b/src/rest.h
@@ -42,6 +42,12 @@ enum og_cmd_type {
OG_CMD_MAX
};
+enum og_cmd_result {
+ OG_UNKNOWN = 0,
+ OG_FAILURE = 1,
+ OG_SUCCESS = 2,
+};
+
#define OG_MSG_REQUEST_MAXLEN 131072
struct og_client {
@@ -59,6 +65,7 @@ struct og_client {
enum og_client_status status;
enum og_cmd_type last_cmd;
unsigned int last_cmd_id;
+ enum og_cmd_result last_cmd_result;
bool autorun;
uint32_t speed;
const char *shell_output;