Commit 7fe672fa authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Add nornsctl_status function

The new nornctl_status function queries the urd daemon and returns
summarized stats about all iotasks currently in the system. More
specifically, the function returns a nornsctl_stat_t structure that
contains the following information:
    st_running_tasks: Number of tasks currently running
    st_pending_tasks: Number of tasks currently pending
    st_eta: Estimated Time of Arrival of the currently running tasks
            (in seconds). Note that, internally, the daemon estimates
            how long a task will take by keeping track of the average
            namespace-to-namespace bandwidth from previous requests.
            This means that this field may contain NaN if no tasks
            have yet completed, since the daemon will not be able to
            estimate the E.T.A.
parent 71760550
Loading
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -73,17 +73,18 @@ typedef struct {

/* Global task status descriptor */
typedef struct {
    /* Number of active tasks */
    size_t st_active_tasks;
    /* Number of running tasks */
    size_t st_running_tasks;

    /* Number of pending tasks */
    size_t st_pending_tasks;

    /* E.T.A. in seconds for active tasks
    /* E.T.A. in seconds for running tasks or NAN if estimation
     * is not yet available
     *
     * This value is computed as the max of alls ETAs for all currently 
     * active tasks */
    size_t st_eta;
     * running tasks */
    double st_eta;
} nornsctl_stat_t;

nornsctl_backend_t 
+3 −4
Original line number Diff line number Diff line
@@ -122,10 +122,9 @@ send_control_status_request(nornsctl_stat_t* stats) {
        return NORNS_ESNAFU;
    }

//TODO
//    stats->st_status = resp.r_status;
//    stats->st_task_error = resp.r_task_error;
//    stats->st_sys_errno = resp.r_errno;
    stats->st_running_tasks = resp.r_running_tasks;
    stats->st_pending_tasks = resp.r_pending_tasks;
    stats->st_eta = resp.r_eta;

    return resp.r_error_code;
}
+15 −4
Original line number Diff line number Diff line
@@ -119,7 +119,7 @@ decode_response_type(int norns_rpc_type) {
    switch(norns_rpc_type) {
        case NORNS__RPC__RESPONSE__TYPE__IOTASK_SUBMIT:
            return NORNS_IOTASK_SUBMIT;
        case NORNS__RPC__REQUEST__TYPE__IOTASK_STATUS:
        case NORNS__RPC__RESPONSE__TYPE__IOTASK_STATUS:
            return NORNS_IOTASK_STATUS;
        case NORNS__RPC__RESPONSE__TYPE__PING:
            return NORNS_PING;
@@ -133,12 +133,14 @@ decode_response_type(int norns_rpc_type) {
            return NORNS_PROCESS_ADD;
        case NORNS__RPC__RESPONSE__TYPE__PROCESS_REMOVE:
            return NORNS_PROCESS_REMOVE;
        case NORNS__RPC__REQUEST__TYPE__NAMESPACE_REGISTER:
        case NORNS__RPC__RESPONSE__TYPE__NAMESPACE_REGISTER:
            return NORNS_NAMESPACE_REGISTER;
        case NORNS__RPC__REQUEST__TYPE__NAMESPACE_UPDATE:
        case NORNS__RPC__RESPONSE__TYPE__NAMESPACE_UPDATE:
            return NORNS_NAMESPACE_UPDATE;
        case NORNS__RPC__REQUEST__TYPE__NAMESPACE_UNREGISTER:
        case NORNS__RPC__RESPONSE__TYPE__NAMESPACE_UNREGISTER:
            return NORNS_NAMESPACE_UNREGISTER;
        case NORNS__RPC__RESPONSE__TYPE__CTL_STATUS:
            return NORNSCTL_STATUS;
        case NORNS__RPC__RESPONSE__TYPE__BAD_REQUEST:
            // intentionally fall through
        default:
@@ -778,6 +780,15 @@ unpack_from_buffer(msgbuffer_t* buf, norns_response_t* response) {
            response->r_errno = rpc_resp->stats->sys_errnum;
            break;

        case NORNSCTL_STATUS:
            if(rpc_resp->gstats == NULL) {
                return NORNS_ERPCRECVFAILED;
            }
            response->r_running_tasks = rpc_resp->gstats->running_tasks;
            response->r_pending_tasks = rpc_resp->gstats->pending_tasks;
            response->r_eta = rpc_resp->gstats->eta;
            break;

        default:
            break;
    }
+5 −0
Original line number Diff line number Diff line
@@ -77,6 +77,11 @@ typedef struct {
            norns_error_t r_task_error;
            int r_errno;
        };
        struct {
            uint32_t r_running_tasks;
            uint32_t r_pending_tasks;
            double r_eta;
        };
    };
} norns_response_t;

+7 −2
Original line number Diff line number Diff line
@@ -115,11 +115,16 @@ message Response {
        required uint32 sys_errnum = 3;
    }

    message GlobalStats {
        required uint32 running_tasks = 1;
        required uint32 pending_tasks = 2;
        required double eta = 3;
    }

    // most responses only need to return an error code
    required Type type = 1;
    required uint32 error_code = 2;
    optional uint32 taskid = 3;
    optional TaskStats stats = 4;
    optional GlobalStats gstats = 5;
}

Loading