]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add jobstatus filter to objects overview endpoint
authorMarcin Haba <marcin.haba@bacula.pl>
Mon, 29 Jan 2024 14:42:52 +0000 (15:42 +0100)
committerMarcin Haba <marcin.haba@bacula.pl>
Wed, 7 Feb 2024 16:00:06 +0000 (17:00 +0100)
gui/baculum/protected/API/Pages/API/ObjectsOverview.php
gui/baculum/protected/API/openapi_baculum.json

index c1759b096af12bc7fb3e70b6117ddd0fe43c1c41..202efe1056dd0d1973fe14799db94dc14d811652 100644 (file)
@@ -46,7 +46,7 @@ class ObjectsOverview extends BaculumAPIServer {
                $objectstatus = $this->Request->contains('objectstatus') && $misc->isValidState($this->Request['objectstatus']) ? $this->Request['objectstatus'] : null;
                $jobname = $this->Request->contains('jobname') && $misc->isValidName($this->Request['jobname']) ? $this->Request['jobname'] : null;
                $jobids = $this->Request->contains('jobids') && $misc->isValidIdsList($this->Request['jobids']) ? explode(',', $this->Request['jobids']) : [];
-               $jobstatus = $this->Request->contains('jobstatus') && $misc->isValidState($this->Request['jobstatus']) ? $this->Request['jobstatus'] : null;
+               $jobstatus = $this->Request->contains('jobstatus') && $this->Request['jobstatus'] ? $this->Request['jobstatus'] : null;
                $client = $this->Request->contains('client') && $misc->isValidName($this->Request['client']) ? $this->Request['client'] : '';
                $fileset = $this->Request->contains('fileset') && $misc->isValidName($this->Request['fileset']) ? $this->Request['fileset'] : '';
                $joberrors = null;
@@ -175,11 +175,22 @@ class ObjectsOverview extends BaculumAPIServer {
                                ];
                        }
                }
+
                if (!empty($jobstatus)) {
-                       $general_params['Job.JobStatus'] = [];
-                       $general_params['Job.JobStatus'][] = [
-                               'vals' => $jobstatus
-                       ];
+                       $jobstatuses = array_keys($misc->getJobState());
+                       $sts = str_split($jobstatus);
+                       $js_counter = 0;
+                       for ($i = 0; $i < count($sts); $i++) {
+                               if (in_array($sts[$i], $jobstatuses)) {
+                                       if (!key_exists('Job.JobStatus', $general_params)) {
+                                               $general_params['Job.JobStatus'] = [];
+                                               $general_params['Job.JobStatus'][$js_counter] = [
+                                                       'operator' => 'IN'
+                                               ];
+                                       }
+                                       $general_params['Job.JobStatus'][$js_counter]['vals'][] = $sts[$i];
+                               }
+                       }
                }
 
                // Scheduled time range
index 3b58d33f5be540955fbc294ce90a810fc15ceeb0..65b3bebab8b1f5c6be0219fb61c8badb9f997633 100644 (file)
                                                        "type": "string"
                                                }
                                        },
+                                       {
+                                               "name": "jobstatus",
+                                               "in": "query",
+                                               "required": false,
+                                               "description": "Job status ex: 'T', 'e'. Possible providing multiple values like 'Te' or 'Efe'. Non-existing job status letters are ignored.",
+                                               "schema": {
+                                                       "type": "string"
+                                               }
+                                       },
                                        {
                                                "name": "fileset",
                                                "in": "query",