3 * Bacula(R) - The Network Backup Solution
4 * Baculum - Bacula web interface
6 * Copyright (C) 2013-2015 Marcin Haba
8 * The main author of Baculum is Marcin Haba.
9 * The original author of Bacula is Kern Sibbald, with contributions
10 * from many others, a complete list can be found in the file AUTHORS.
12 * You may use this file and others of this release according to the
13 * license defined in the LICENSE file, which includes the Affero General
14 * Public License, v3.0 ("AGPLv3") and some additional permissions and
15 * terms pursuant to its AGPLv3 Section 7.
17 * This notice must be preserved when any source code is
18 * conveyed and/or propagated.
20 * Bacula(R) is a registered trademark of Kern Sibbald.
23 class JobManager extends TModule {
25 public function getJobs($limit, $allowedJobs = array()) {
26 $criteria = new TActiveRecordCriteria;
28 $cfg = $this->Application->getModule('configuration');
29 $appCfg = $cfg->getApplicationConfig();
30 if($cfg->isPostgreSQLType($appCfg['db']['type'])) {
31 $order = strtolower($order);
33 $criteria->OrdersBy[$order] = 'desc';
34 if(is_int($limit) && $limit > 0) {
35 $criteria->Limit = $limit;
38 if (count($allowedJobs) > 0) {
41 for ($i = 0; $i < count($allowedJobs); $i++) {
42 $where[] = "name = :name$i";
43 $names[":name$i"] = $allowedJobs[$i];
45 $criteria->Condition = implode(' OR ', $where);
46 foreach($names as $name => $jobname) {
47 $criteria->Parameters[$name] = $jobname;
50 return JobRecord::finder()->findAll($criteria);
53 public function getJobById($id) {
54 return JobRecord::finder()->findByjobid($id);
57 public function getJobByName($name) {
58 return JobRecord::finder()->findByname($name);
61 public function deleteJobById($id) {
62 return JobRecord::finder()->deleteByjobid($id);
65 public function getRecentJobids($jobname, $clientid) {
66 $sql = "name='$jobname' AND clientid='$clientid' AND jobstatus IN ('T', 'W') AND level IN ('F', 'I', 'D')";
67 $finder = JobRecord::finder();
68 $criteria = new TActiveRecordCriteria;
70 $cfg = $this->Application->getModule('configuration');
71 $appCfg = $cfg->getApplicationConfig();
72 if($cfg->isPostgreSQLType($appCfg['db']['type'])) {
73 $order = strtolower($order);
75 $criteria->OrdersBy[$order] = 'desc';
76 $criteria->Condition = $sql;
77 $jobs = $finder->findAll($criteria);
82 foreach($jobs as $job) {
83 if($job->level == 'F') {
84 $jobids[] = $job->jobid;
86 } elseif($job->level == 'D' && $waitForFull === false) {
87 $jobids[] = $job->jobid;
89 } elseif($job->level == 'I' && $waitForFull === false) {
90 $jobids[] = $job->jobid;
97 public function getJobTotals($allowedJobs = array()) {
98 $jobtotals = array('bytes' => 0, 'files' => 0);
99 $connection = JobRecord::finder()->getDbConnection();
100 $connection->setActive(true);
103 if (count($allowedJobs) > 0) {
104 $where = " WHERE name='" . implode("' OR name='", $allowedJobs) . "'";
107 $sql = "SELECT sum(JobFiles) AS files, sum(JobBytes) AS bytes FROM Job $where";
108 $pdo = $connection->getPdoInstance();
109 $result = $pdo->query($sql);
110 $ret = $result->fetch();
111 $jobtotals['bytes'] = $ret['bytes'];
112 $jobtotals['files'] = $ret['files'];