Loading include/norns/nornsctl.h +16 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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 Loading lib/communication.c +24 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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) { Loading lib/communication.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading lib/libnornsctl.c +22 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading lib/requests.c +5 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -172,6 +175,7 @@ build_request_msg(norns_rpc_type_t type, va_list ap) { break; } case NORNSCTL_STATUS: case NORNS_PING: { break; Loading Loading
include/norns/nornsctl.h +16 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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 Loading
lib/communication.c +24 −0 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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) { Loading
lib/communication.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
lib/libnornsctl.c +22 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading
lib/requests.c +5 −1 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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; } Loading @@ -172,6 +175,7 @@ build_request_msg(norns_rpc_type_t type, va_list ap) { break; } case NORNSCTL_STATUS: case NORNS_PING: { break; Loading