/** * Parses a cron line into a Cron instance * * @static * @param $cron string The cron line * @return Cron */ public static function parse($cron) { if (substr($cron, 0, 12) == '#suspended: ') { $cron = substr($cron, 12); $isSuspended = true; } $parts = explode(' ', $cron); $command = implode(' ', array_slice($parts, 5)); // extract comment if (strpos($command, '#')) { list($command, $comment) = explode('#', $command); $comment = trim($comment); } // extract error file if (strpos($command, '2>')) { list($command, $errorFile) = explode('2>', $command); $errorFile = trim($errorFile); } // extract log file if (strpos($command, '>')) { list($command, $logFile) = explode('>', $command); $logFile = trim($logFile); } // compute last run time, and file size $lastRunTime = null; $logSize = null; $errorSize = null; if (isset($logFile) && file_exists($logFile)) { $lastRunTime = filemtime($logFile); $logSize = filesize($logFile); } if (isset($errorFile) && file_exists($errorFile)) { $lastRunTime = max($lastRunTime ?: 0, filemtime($errorFile)); $errorSize = filesize($errorFile); } // compute status $status = 'error'; if (!$logSize && !$errorSize) { $status = 'unknown'; } else { if (!$errorSize || $errorSize == 0) { $status = 'success'; } } // create cron instance $cron = new self(); $cron->setMinute($parts[0])->setHour($parts[1])->setDayOfMonth($parts[2])->setMonth($parts[3])->setDayOfWeek($parts[4])->setCommand(\trim($command))->setLastRunTime($lastRunTime)->setLogSize($logSize)->setErrorSize($errorSize)->setStatus($status); if (isset($isSuspended)) { $cron->setSuspended($isSuspended); } if (isset($comment)) { $cron->setComment($comment); } if (isset($logFile)) { $cron->setLogFile($logFile); } if (isset($errorFile)) { $cron->setErrorFile($errorFile); } return $cron; }
/** * Creates a CronJobDefinition from a Array $job * provided by the parser $parser * * @param Array $xml * @param CronJobParser $parser * * @return CronJobDefinition */ public static function fromArray(array $job, CronJobParser $parser) { // create and return object $obj = new self(); $obj->setParser($parser); $obj->setName($job["name"]); $obj->setForkable((bool) $job["forkable"]); $obj->setInterval($job["interval"]); $obj->setPath($job["path"]); $obj->setClass($job["class"]); $obj->setStartTime($job["starttime"]); $obj->setEndTime($job["endtime"]); $obj->setArguments($job["args"]); $obj->setWeekDays($job["weekdays"]); $obj->setSuspended((bool) $job["suspended"]); if (isset($job["lastrun"])) { $obj->setLastExec($job["lastrun"]); } else { $obj->setLastExec(0); } return $obj; }