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

Add nornsctl_status() to summarize task progress

parent 65fdc95c
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -71,6 +71,21 @@ typedef struct {
    size_t                 j_nlimits;  /* entries in limits list */
} nornsctl_job_t;

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

    /* Number of pending tasks */
    size_t st_pending_tasks;

    /* E.T.A. in seconds for active tasks
     *
     * This value is computed as the max of alls ETAs for all currently 
     * active tasks */
    size_t st_eta;
} nornsctl_stat_t;

nornsctl_backend_t 
NORNSCTL_BACKEND(nornsctl_backend_flags_t flags, 
                 const char* mount_point, 
@@ -114,7 +129,7 @@ nornsctl_send_command(nornsctl_command_t command,
                      void* args) __THROW;

norns_error_t
nornsctl_status(void) __THROW;
nornsctl_status(nornsctl_stat_t* stats) __THROW;

/* Register a batch job into the system */
norns_error_t 
+24 −0
Original line number Diff line number Diff line
@@ -107,6 +107,29 @@ send_status_request(norns_iotask_t* task, norns_stat_t* stats) {
    return resp.r_error_code;
}

norns_error_t
send_control_status_request(nornsctl_stat_t* stats) {

    int res;
    norns_response_t resp;

    if((res = send_request(NORNSCTL_STATUS, &resp)) 
            != NORNS_SUCCESS) {
        return res;
    }

    if(resp.r_type != NORNSCTL_STATUS) {
        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;

    return resp.r_error_code;
}

norns_error_t
send_ping_request() {

@@ -210,6 +233,7 @@ send_request(norns_rpc_type_t type, norns_response_t* resp, ...) {
            break;
        }

        case NORNSCTL_STATUS:
        case NORNS_PING:
        {
            if((res = pack_to_buffer(type, &req_buf)) != NORNS_SUCCESS) {
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ norns_error_t send_process_request(norns_rpc_type_t type, uint32_t jobid,
                                   uid_t uid, gid_t gid, pid_t pid);
norns_error_t send_namespace_request(norns_rpc_type_t type, const char* nsid, 
                                     nornsctl_backend_t* backend);
norns_error_t send_control_status_request(nornsctl_stat_t* stats);
norns_error_t send_ping_request();

#pragma GCC visibility pop
+22 −1
Original line number Diff line number Diff line
@@ -120,10 +120,31 @@ libnornsctl_reload_config_file(void) {

/* Control API */
norns_error_t
nornsctl_ping() {
nornsctl_ping(void) {
    return send_ping_request();
}

norns_error_t
nornsctl_send_command(nornsctl_command_t command, 
                      void* args) {
    // TODO
    (void) command;
    (void) args;

    return NORNS_SUCCESS;
}

norns_error_t
nornsctl_status(nornsctl_stat_t* stats) {

    if(stats == NULL) {
        ERR("invalid arguments");
        return NORNS_EBADARGS;
    }

    return send_control_status_request(stats);
}

/* Register and describe a batch job */
norns_error_t 
nornsctl_register_job(uint32_t jobid, nornsctl_job_t* job) {
+5 −1
Original line number Diff line number Diff line
@@ -107,6 +107,8 @@ encode_request_type(norns_rpc_type_t type) {
            return NORNS__RPC__REQUEST__TYPE__NAMESPACE_UPDATE;
        case NORNS_NAMESPACE_UNREGISTER:
            return NORNS__RPC__REQUEST__TYPE__NAMESPACE_UNREGISTER;
        case NORNSCTL_STATUS:
            return NORNS__RPC__REQUEST__TYPE__CTL_STATUS;
        default:
            return -1;
    }
@@ -155,7 +157,8 @@ build_request_msg(norns_rpc_type_t type, va_list ap) {

    norns__rpc__request__init(req_msg);

    if((req_msg->type = encode_request_type(type)) < 0) {
    if( (int) (req_msg->type = encode_request_type(type)) < 0) {
        ERR("Encoding of request type failed");
        goto cleanup_on_error;
    }

@@ -172,6 +175,7 @@ build_request_msg(norns_rpc_type_t type, va_list ap) {
            break;
        }

        case NORNSCTL_STATUS:
        case NORNS_PING:
        {
            break;
Loading