From: Marcin Haba Date: Thu, 2 May 2019 07:32:12 +0000 (+0200) Subject: baculum: Add status schedule API endpoint X-Git-Tag: Release-9.4.3~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c934d5b6dc7b1f3eb84aaf7ca20d0b0ca61108b4;p=thirdparty%2Fbacula.git baculum: Add status schedule API endpoint --- diff --git a/gui/baculum/protected/API/Pages/API/ScheduleStatus.php b/gui/baculum/protected/API/Pages/API/ScheduleStatus.php new file mode 100644 index 000000000..4b8acf952 --- /dev/null +++ b/gui/baculum/protected/API/Pages/API/ScheduleStatus.php @@ -0,0 +1,71 @@ +getModule('misc'); + $cmd = array('status', 'schedule'); + if ($this->Request->contains('job') && $misc->isValidName($this->Request['job'])) { + $cmd[] = 'job="' . $this->Request['job'] . '"'; + } + if ($this->Request->contains('client') && $misc->isValidName($this->Request['client'])) { + $cmd[] = 'client="' . $this->Request['client'] . '"'; + } + if ($this->Request->contains('schedule') && $misc->isValidName($this->Request['schedule'])) { + $cmd[] = 'schedule="' . $this->Request['schedule'] . '"'; + } + if ($this->Request->contains('days') && $misc->isValidInteger($this->Request['days'])) { + $cmd[] = 'days="' . $this->Request['days'] . '"'; + } + if ($this->Request->contains('limit') && $misc->isValidInteger($this->Request['limit'])) { + $cmd[] = 'limit="' . $this->Request['limit'] . '"'; + } + if ($this->Request->contains('time') && $misc->isValidBDateAndTime($this->Request['time'])) { + $cmd[] = 'time="' . $this->Request['time'] . '"'; + } + + $result = $this->getModule('bconsole')->bconsoleCommand($this->director, $cmd, true); + if ($result->exitcode === 0) { + array_shift($result->output); + $this->output = $this->formatSchedules($result->output); + $this->error = PoolError::ERROR_NO_ERRORS; + } else { + $this->output = $result->output; + $this->error = $result->exitcode; + } + } + + private function formatSchedules(array $output) { + $items = $item = array(); + for ($i = 0; $i < count($output); $i++) { + if (preg_match('/^(?P\w+)=(?P[\s\S]*)$/', $output[$i], $match) === 1) { + $item[$match['key']] = $match['val']; + } elseif (empty($output[$i]) && count($item) > 0) { + $items[] = $item; + $item = array(); + } + } + return $items; + } +} +?> diff --git a/gui/baculum/protected/API/Pages/API/Volume.php b/gui/baculum/protected/API/Pages/API/Volume.php index c4ea347e1..c1b76db2d 100644 --- a/gui/baculum/protected/API/Pages/API/Volume.php +++ b/gui/baculum/protected/API/Pages/API/Volume.php @@ -47,22 +47,22 @@ class Volume extends BaculumAPIServer { $cmd[] = 'pool="' . $pool->name . '"'; } } - if(property_exists($params, 'volretention') && $misc->isValidNumber($params->volretention)) { + if(property_exists($params, 'volretention') && $misc->isValidInteger($params->volretention)) { $cmd[] = 'volretention="' . $params->volretention . '"'; } - if(property_exists($params, 'voluseduration') && $misc->isValidNumber($params->voluseduration)) { + if(property_exists($params, 'voluseduration') && $misc->isValidInteger($params->voluseduration)) { $cmd[] = 'voluseduration="' . $params->voluseduration . '"'; } - if(property_exists($params, 'maxvoljobs') && $misc->isValidNumber($params->maxvoljobs)) { + if(property_exists($params, 'maxvoljobs') && $misc->isValidInteger($params->maxvoljobs)) { $cmd[] = 'maxvoljobs="' . $params->maxvoljobs . '"'; } - if(property_exists($params, 'maxvolfiles') && $misc->isValidNumber($params->maxvolfiles)) { + if(property_exists($params, 'maxvolfiles') && $misc->isValidInteger($params->maxvolfiles)) { $cmd[] = 'maxvolfiles="' . $params->maxvolfiles . '"'; } - if(property_exists($params, 'maxvolbytes') && $misc->isValidNumber($params->maxvolbytes)) { + if(property_exists($params, 'maxvolbytes') && $misc->isValidInteger($params->maxvolbytes)) { $cmd[] = 'maxvolbytes="' . $params->maxvolbytes . '"'; } - if(property_exists($params, 'slot') && $misc->isValidNumber($params->slot)) { + if(property_exists($params, 'slot') && $misc->isValidInteger($params->slot)) { $cmd[] = 'slot="' . $params->slot . '"'; } if(property_exists($params, 'recycle') && $misc->isValidBoolean($params->recycle)) { diff --git a/gui/baculum/protected/API/endpoints.xml b/gui/baculum/protected/API/endpoints.xml index a7f1af015..4dbb0d8b3 100644 --- a/gui/baculum/protected/API/endpoints.xml +++ b/gui/baculum/protected/API/endpoints.xml @@ -79,6 +79,7 @@ + diff --git a/gui/baculum/protected/Common/Class/Miscellaneous.php b/gui/baculum/protected/Common/Class/Miscellaneous.php index 21f64439a..8a9ded632 100644 --- a/gui/baculum/protected/Common/Class/Miscellaneous.php +++ b/gui/baculum/protected/Common/Class/Miscellaneous.php @@ -199,7 +199,7 @@ class Miscellaneous extends TModule { return (preg_match('/^\w+$/', $state) === 1); } - public function isValidNumber($num) { + public function isValidInteger($num) { return (preg_match('/^\d+$/', $num) === 1); } @@ -235,6 +235,10 @@ class Miscellaneous extends TModule { return (preg_match('/^b2\d+$/', $path) === 1); } + public function isValidBDateAndTime($time) { + return (preg_match('/^\d{4}-\d{2}-\d{2} \d{1,2}:\d{2}:\d{2}$/', $time) === 1); + } + /** * Writing INI-style configuration file. *