From 5228cfa76cc9478b0492daa77c49b3593afd4e7e Mon Sep 17 00:00:00 2001 From: Marcin Haba Date: Tue, 7 Aug 2018 21:27:35 +0200 Subject: [PATCH] baculum: Add to jobs endpoint filtering by client and clientid --- gui/baculum/protected/API/Pages/API/Jobs.php | 48 +++++++++++++++++-- .../protected/API/openapi_baculum.json | 20 +++++++- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/gui/baculum/protected/API/Pages/API/Jobs.php b/gui/baculum/protected/API/Pages/API/Jobs.php index d27e6651d..f5960caea 100644 --- a/gui/baculum/protected/API/Pages/API/Jobs.php +++ b/gui/baculum/protected/API/Pages/API/Jobs.php @@ -26,6 +26,18 @@ class Jobs extends BaculumAPIServer { $jobstatus = $this->Request->contains('jobstatus') ? $this->Request['jobstatus'] : ''; $misc = $this->getModule('misc'); $jobname = $this->Request->contains('name') && $misc->isValidName($this->Request['name']) ? $this->Request['name'] : ''; + $clientid = $this->Request->contains('clientid') ? $this->Request['clientid'] : ''; + if (!empty($clientid) && !$misc->isValidId($clientid)) { + $this->output = JobError::MSG_ERROR_CLIENT_DOES_NOT_EXISTS; + $this->error = JobError::ERROR_CLIENT_DOES_NOT_EXISTS; + return; + } + $client = $this->Request->contains('client') ? $this->Request['client'] : ''; + if (!empty($client) && !$misc->isValidName($client)) { + $this->output = JobError::MSG_ERROR_CLIENT_DOES_NOT_EXISTS; + $this->error = JobError::ERROR_CLIENT_DOES_NOT_EXISTS; + return; + } $params = array(); $jobstatuses = array_keys($misc->getJobState()); $sts = str_split($jobstatus); @@ -49,9 +61,39 @@ class Jobs extends BaculumAPIServer { } $params['name']['operator'] = 'OR'; $params['name']['vals'] = $vals; - $jobs = $this->getModule('job')->getJobs($limit, $params); - $this->output = $jobs; - $this->error = JobError::ERROR_NO_ERRORS; + + $error = false; + // Client name and clientid filter + if (!empty($client) || !empty($clientid)) { + $result = $this->getModule('bconsole')->bconsoleCommand($this->director, array('.client')); + if ($result->exitcode === 0) { + array_shift($result->output); + $cli = null; + if (!empty($client)) { + $cli = $this->getModule('client')->getClientByName($client); + } elseif (!empty($clientid)) { + $cli = $this->getModule('client')->getClientById($clientid); + } + if (is_object($cli) && in_array($cli->name, $result->output)) { + $params['clientid']['operator'] = 'AND'; + $params['clientid']['vals'] = array($cli->clientid); + } else { + $error = true; + $this->output = JobError::MSG_ERROR_CLIENT_DOES_NOT_EXISTS; + $this->error = JobError::ERROR_CLIENT_DOES_NOT_EXISTS; + } + } else { + $error = true; + $this->output = $result->output; + $this->error = $result->exitcode; + } + } + + if ($error === false) { + $jobs = $this->getModule('job')->getJobs($limit, $params); + $this->output = $jobs; + $this->error = JobError::ERROR_NO_ERRORS; + } } else { $this->output = $result->output; $this->error = $result->exitcode; diff --git a/gui/baculum/protected/API/openapi_baculum.json b/gui/baculum/protected/API/openapi_baculum.json index 9d3d79b91..8e906f8f9 100644 --- a/gui/baculum/protected/API/openapi_baculum.json +++ b/gui/baculum/protected/API/openapi_baculum.json @@ -523,7 +523,7 @@ "error": { "type": "integer", "description": "Error code", - "enum": [0, 1, 2, 3, 4, 5, 6, 7, 1000] + "enum": [0, 1, 2, 3, 4, 5, 6, 7, 53, 1000] } } } @@ -553,6 +553,24 @@ "schema": { "type": "string" } + }, + { + "name": "clientid", + "in": "query", + "required": false, + "description": "Client identifier", + "schema": { + "type": "integer" + } + }, + { + "name": "client", + "in": "query", + "required": false, + "description": "Client name", + "schema": { + "type": "string" + } } ] } -- 2.47.3