public function enqueue()
{
$queue = new ArrayObject([]);
$db = \Scalr::getDb();
$this->log('INFO', "Fetching farms...");
$farms = [];
$rs = $db->Execute("\n SELECT env_id, value FROM governance\n WHERE enabled = 1 AND name = ?\n ", [Scalr_Governance::GENERAL_LEASE]);
while ($env = $rs->FetchRow()) {
$env['value'] = json_decode($env['value'], true);
$period = 0;
if (is_array($env['value']['notifications'])) {
foreach ($env['value']['notifications'] as $notif) {
if ($notif['period'] > $period) {
$period = $notif['period'];
}
}
$dt = new DateTime();
$dt->add(new DateInterval('P' . $period . 'D'));
$fs = $db->GetAll("\n SELECT fs.farmid, f.status\n FROM farm_settings fs\n JOIN farms f ON f.id = fs.farmid\n WHERE fs.name = ? AND f.status = ? AND f.env_id = ? AND fs.value < ? AND fs.value != ''\n ", [Entity\FarmSetting::LEASE_TERMINATE_DATE, FARM_STATUS::RUNNING, $env['env_id'], $dt->format('Y-m-d H:i:s')]);
foreach ($fs as $f) {
if (!isset($farms[$f['farmid']])) {
$farms[$f['farmid']] = true;
$obj = new stdClass();
$obj->farmId = $f['farmid'];
$queue->append($obj);
}
}
}
}
$cnt = count($farms);
$this->log('INFO', "%d lease task%s %s found", $cnt, $cnt != 1 ? 's' : '', $cnt != 1 ? 'were' : 'was');
return $queue;
}