Better output handling

This commit is contained in:
Paolo
2026-06-22 15:47:39 +02:00
parent 967f53d73c
commit 1136d9dca1
5 changed files with 145 additions and 28 deletions
+35 -8
View File
@@ -64,14 +64,29 @@ class JobsQueueLib
*/
public function getOldestJobs($type, $maxAmount = null)
{
$this->_ci->JobsQueueModel->resetQuery();
$this->_ci->JobsQueueModel->addOrder('creationtime', 'ASC');
$types = $type; // default is array
$limit = 0; // default query limit
// If the maximum amount of jobs to retrieve have been specified
if (is_numeric($maxAmount)) $this->_ci->JobsQueueModel->addLimit($maxAmount);
if (is_numeric($maxAmount)) $limit = $maxAmount;
return $this->_ci->JobsQueueModel->loadWhere(array('status' => self::STATUS_NEW, 'type' => $type));
// If it is a string then include it into an array
if (!isEmptyString($type) && is_string($type)) $types = array($type);
// Return the result of the query
return $this->_ci->JobsQueueModel->execReadOnlyQuery('
SELECT jq.*
FROM system.tbl_jobsqueue jq
WHERE jq.type IN ?
AND jq.status = ?
ORDER BY jq.creationtime DESC
LIMIT ?',
array(
$types,
self::STATUS_NEW,
$limit
)
);
}
/**
@@ -79,11 +94,23 @@ class JobsQueueLib
*/
public function getJobsByTypeStatus($type, $status)
{
$this->_ci->JobsQueueModel->resetQuery();
$types = $type; // default is array
$this->_ci->JobsQueueModel->addOrder('creationtime', 'DESC');
// If it is a string then include it into an array
if (!isEmptyString($type) && is_string($type)) $types = array($type);
return $this->_ci->JobsQueueModel->loadWhere(array('status' => $status, 'type' => $type));
// Return the result of the query
return $this->_ci->JobsQueueModel->execReadOnlyQuery('
SELECT jq.*
FROM system.tbl_jobsqueue jq
WHERE jq.type IN ?
AND jq.status = ?
ORDER BY jq.creationtime DESC',
array(
$types,
$status
)
);
}
/**
+24 -3
View File
@@ -50,12 +50,18 @@ class LongRunTaskLib extends JobsQueueLib
}
/**
*
* Execute a LRT in background
* - Checks if the wanted LRT exists in the applcation/controllers/lrts directory
* - Then executes it in background via CI CLI
* - Stores the LRT pid into the database
*/
public function executeLrt($lrt)
{
$output = array();
$return_var = -1;
// If does _not_ exist a LRT implementation for this LRT type, then return an error
if ((include_once 'application/controllers/lrts/'.$lrt->{self::PROPERTY_TYPE}.'.php') !== true)
if (!file_exists(APPPATH.'controllers/lrts/'.$lrt->{self::PROPERTY_TYPE}.'.php'))
{
return error('The required LRT implementation has not been found');
}
@@ -63,10 +69,17 @@ class LongRunTaskLib extends JobsQueueLib
// Execute the LRT implementation (a CI controller from CLI) providing as parameter the jobid
exec(
// Command
'/usr/bin/php '.APPPATH.'../index.ci.php lrts/'.$lrt->{self::PROPERTY_TYPE}.'/run '.$lrt->{self::PROPERTY_JOBID}.' &',
'/usr/bin/php '.APPPATH.'../index.ci.php lrts/'.$lrt->{self::PROPERTY_TYPE}.'/run '.$lrt->{self::PROPERTY_JOBID}.' > /dev/null 2>&1 & echo $!',
$output, // Here goes the output from the standard output and error
$return_var // Status of the command once executed (== 0 success, !=0 error)
);
// If a pid has not been returned
if (isEmptyArray($output) || !is_numeric($output[0])) return error('Not a valid pid has been returned');
// Set the pid of this LRT into the database
$pidResult = $this->_ci->JobsQueueModel->update($lrt->{self::PROPERTY_JOBID}, array('pid' => $output[0]));
if (isError($pidResult)) return $pidResult;
}
//------------------------------------------------------------------------------------------------------------------
@@ -142,5 +155,13 @@ class LongRunTaskLib extends JobsQueueLib
{
return $this->_ci->JobsQueueModel->update($jobid, array('output' => json_encode($output)));
}
/**
*
*/
public function setStatus($jobid, $status)
{
return $this->_ci->JobsQueueModel->update($jobid, array('status' => $status));
}
}