Example #1
0
 public function index()
 {
     // Get all active scheduled items
     foreach (ORM::factory('scheduler')->where('scheduler_active', '1')->find_all() as $scheduler) {
         $scheduler_id = $scheduler->id;
         $scheduler_last = $scheduler->scheduler_last;
         // Next run time
         $scheduler_weekday = $scheduler->scheduler_weekday;
         // Day of the week
         $scheduler_day = $scheduler->scheduler_day;
         // Day of the month
         $scheduler_hour = $scheduler->scheduler_hour;
         // Hour
         $scheduler_minute = $scheduler->scheduler_minute;
         // Minute
         // Controller that performs action
         $scheduler_controller = $scheduler->scheduler_controller;
         if ($scheduler_day <= -1) {
             // Ran every day?
             $scheduler_day = "*";
         }
         if ($scheduler_weekday <= -1) {
             // Ran every day?
             $scheduler_weekday = "*";
         }
         if ($scheduler_hour <= -1) {
             // Ran every hour?
             $scheduler_hour = "*";
         }
         if ($scheduler_minute <= -1) {
             // Ran every minute?
             $scheduler_minute = "*";
         }
         $scheduler_cron = $scheduler_minute . " " . $scheduler_hour . " " . $scheduler_day . " * " . $scheduler_weekday;
         //Start new cron parser instance
         $cron = new CronParser($scheduler_cron);
         $lastRan = $cron->getLastRan();
         //Array (0=minute, 1=hour, 2=dayOfMonth, 3=month, 4=week, 5=year)
         $cronRan = mktime($lastRan[1], $lastRan[0], 0, $lastRan[3], $lastRan[2], $lastRan[5]);
         if (!($scheduler_last > $cronRan - 45) || $scheduler_last == 0) {
             // within 45 secs of cronRan time, so Execute control
             $site_url = "http://" . $_SERVER['SERVER_NAME'] . "/";
             $scheduler_status = remote::status($site_url . "scheduler/" . $scheduler_controller);
             // Set last time of last execution
             $schedule_time = time();
             $scheduler->scheduler_last = $schedule_time;
             $scheduler->save();
             // Record Action to Log
             $scheduler_log = new Scheduler_Log_Model();
             $scheduler_log->scheduler_id = $scheduler_id;
             $scheduler_log->scheduler_name = $scheduler->scheduler_name;
             $scheduler_log->scheduler_status = $scheduler_status;
             $scheduler_log->scheduler_date = $schedule_time;
             $scheduler_log->save();
         }
     }
     Header("Content-Type: image/gif");
     // Transparent GIF
     echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==");
 }
function getLastScheduledRunTime($job)
{
    global $debug;
    $cron_string = $job[PC_MINUTE] . ' ' . $job[PC_HOUR] . ' ' . $job[PC_DOM] . ' ' . $job[PC_MONTH] . ' ' . $job[PC_DOW];
    $cronPars = new CronParser();
    $cronPars->calcLastRan($cron_string);
    if ($debug) {
        print_r($cronPars->getLastRan());
    }
    return $cronPars->getLastRanUnix();
}
Example #3
0
 public function index()
 {
     // Debug
     $debug = "";
     // @todo abstract most of this into a library, especially locking
     // Ensure settings entry for `scheduler_lock` exists
     Database::instance()->query("INSERT IGNORE INTO `" . Kohana::config('database.default.table_prefix') . "settings`\n\t\t\t(`key`, `value`) VALUES ('scheduler_lock', 0)");
     // Now try and update the scheduler_lock
     $result = Database::instance()->query("UPDATE `" . Kohana::config('database.default.table_prefix') . "settings`\n\t\t\tSET `value` = UNIX_TIMESTAMP() + 180\n\t\t\tWHERE `value` < UNIX_TIMESTAMP() AND `key` = 'scheduler_lock';");
     // If no entries were changed, scheduler is already running
     if ($result->count() <= 0) {
         Kohana::log('info', 'Could not acquire scheduler lock');
         if (isset($_GET['debug']) and $_GET['debug'] == 1) {
             echo 'Could not acquire scheduler lock';
         }
         return;
     }
     // Get all active scheduled items
     foreach (ORM::factory('scheduler')->where('scheduler_active', '1')->find_all() as $scheduler) {
         $scheduler_id = $scheduler->id;
         $scheduler_last = $scheduler->scheduler_last;
         // Next run time
         $scheduler_weekday = $scheduler->scheduler_weekday;
         // Day of the week
         $scheduler_day = $scheduler->scheduler_day;
         // Day of the month
         $scheduler_hour = $scheduler->scheduler_hour;
         // Hour
         $scheduler_minute = $scheduler->scheduler_minute;
         // Minute
         // Controller that performs action
         $scheduler_controller = $scheduler->scheduler_controller;
         if ($scheduler_day <= -1) {
             // Ran every day?
             $scheduler_day = "*";
         }
         if ($scheduler_weekday <= -1) {
             // Ran every day?
             $scheduler_weekday = "*";
         }
         if ($scheduler_hour <= -1) {
             // Ran every hour?
             $scheduler_hour = "*";
         }
         if ($scheduler_minute <= -1) {
             // Ran every minute?
             $scheduler_minute = "*";
         }
         $scheduler_cron = $scheduler_minute . " " . $scheduler_hour . " " . $scheduler_day . " * " . $scheduler_weekday;
         //Start new cron parser instance
         $cron = new CronParser();
         if (!$cron->calcLastRan($scheduler_cron)) {
             echo "Error parsing CRON";
         }
         $lastRan = $cron->getLastRan();
         //Array (0=minute, 1=hour, 2=dayOfMonth, 3=month, 4=week, 5=year)
         $cronRan = mktime($lastRan[1], $lastRan[0], 0, $lastRan[3], $lastRan[2], $lastRan[5]);
         if (isset($_GET['debug']) and $_GET['debug'] == 1) {
             $debug .= "~~~~~~~~~~~~~~~~~~~~~~~~~~~" . "<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~" . "<BR />RUNNING: " . $scheduler->scheduler_name . "<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~" . "<BR /> LAST RUN: " . date("r", $scheduler_last) . "<BR /> LAST DUE AT: " . date('r', $cron->getLastRanUnix()) . "<BR /> SCHEDULE: <a href=\"http://en.wikipedia.org/wiki/Cron\" target=\"_blank\">" . $scheduler_cron . "</a>";
         }
         if ($scheduler_controller and (!($scheduler_last > $cronRan) or $scheduler_last == 0)) {
             $run = FALSE;
             // Catch errors from missing scheduler or other bugs
             try {
                 $dispatch = Dispatch::controller($scheduler_controller, "scheduler/");
                 if ($dispatch instanceof Dispatch && method_exists($dispatch, 'method')) {
                     $run = $dispatch->method('index', '');
                 }
             } catch (Exception $e) {
                 // Nada.
             }
             // @todo allow tasks to save state between runs.
             if ($run !== FALSE) {
                 // Set last time of last execution
                 $schedule_time = time();
                 $scheduler->scheduler_last = $schedule_time;
                 $scheduler->save();
                 // Record Action to Log
                 $scheduler_log = new Scheduler_Log_Model();
                 $scheduler_log->scheduler_id = $scheduler_id;
                 $scheduler_log->scheduler_status = "200";
                 $scheduler_log->scheduler_date = $schedule_time;
                 $scheduler_log->save();
                 if (isset($_GET['debug']) and $_GET['debug'] == 1) {
                     $debug .= "<BR /> STATUS: {{ EXECUTED }}";
                 }
             } else {
                 if (isset($_GET['debug']) and $_GET['debug'] == 1) {
                     $debug .= "<BR /> STATUS: {{ SCHEDULER NOT FOUND! }}";
                 }
             }
         } else {
             if (isset($_GET['debug']) and $_GET['debug'] == 1) {
                 $debug .= "<BR /> STATUS: {{ NOT RUN }}";
             }
         }
         if (isset($_GET['debug']) and $_GET['debug'] == 1) {
             //$debug .= "<BR /><BR />CRON DEBUG:<BR />".nl2br($cron->getDebug());
             $debug .= "<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR /><BR /><BR />";
         }
     }
     if (Kohana::config('cdn.cdn_gradual_upgrade') != FALSE) {
         cdn::gradual_upgrade();
     }
     // If DEBUG is TRUE echo DEBUG info instead of transparent GIF
     if (isset($_GET['debug']) and $_GET['debug'] == 1) {
         echo $debug;
         if (isset($this->profiler)) {
             echo $this->profiler->render(TRUE);
         }
     } else {
         // Transparent GIF
         Header("Content-type: image/gif");
         Header("Expires: Wed, 11 Nov 1998 11:11:11 GMT");
         Header("Cache-Control: no-cache");
         Header("Cache-Control: must-revalidate");
         Header("Content-Length: 49");
         echo pack('H*', '47494638396101000100910000000000ffffffff' . 'ffff00000021f90405140002002c000000000100' . '01000002025401003b');
     }
     // Release lock
     $result = Database::instance()->query("UPDATE `" . Kohana::config('database.default.table_prefix') . "settings`\n\t\t\tSET `value` = 0\n\t\t\tWHERE `key` = 'scheduler_lock';");
 }
Example #4
0
 public function index()
 {
     // Debug
     $debug = "";
     // Get all active scheduled items
     foreach (ORM::factory('scheduler')->where('scheduler_active', '1')->find_all() as $scheduler) {
         $scheduler_id = $scheduler->id;
         $scheduler_last = $scheduler->scheduler_last;
         // Next run time
         $scheduler_weekday = $scheduler->scheduler_weekday;
         // Day of the week
         $scheduler_day = $scheduler->scheduler_day;
         // Day of the month
         $scheduler_hour = $scheduler->scheduler_hour;
         // Hour
         $scheduler_minute = $scheduler->scheduler_minute;
         // Minute
         // Controller that performs action
         $scheduler_controller = $scheduler->scheduler_controller;
         if ($scheduler_day <= -1) {
             // Ran every day?
             $scheduler_day = "*";
         }
         if ($scheduler_weekday <= -1) {
             // Ran every day?
             $scheduler_weekday = "*";
         }
         if ($scheduler_hour <= -1) {
             // Ran every hour?
             $scheduler_hour = "*";
         }
         if ($scheduler_minute <= -1) {
             // Ran every minute?
             $scheduler_minute = "*";
         }
         $scheduler_cron = $scheduler_minute . " " . $scheduler_hour . " " . $scheduler_day . " * " . $scheduler_weekday;
         //Start new cron parser instance
         $cron = new CronParser();
         if (!$cron->calcLastRan($scheduler_cron)) {
             echo "Error parsing CRON";
         }
         $lastRan = $cron->getLastRan();
         //Array (0=minute, 1=hour, 2=dayOfMonth, 3=month, 4=week, 5=year)
         $cronRan = mktime($lastRan[1], $lastRan[0], 0, $lastRan[3], $lastRan[2], $lastRan[5]);
         if (isset($_GET['debug']) and $_GET['debug'] == 1) {
             $debug .= "~~~~~~~~~~~~~~~~~~~~~~~~~~~" . "<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~" . "<BR />RUNNING: " . $scheduler->scheduler_name . "<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~" . "<BR /> LAST RUN: " . date("r", $scheduler_last) . "<BR /> LAST DUE AT: " . date('r', $cron->getLastRanUnix()) . "<BR /> SCHEDULE: <a href=\"http://en.wikipedia.org/wiki/Cron\" target=\"_blank\">" . $scheduler_cron . "</a>";
         }
         if (!($scheduler_last > $cronRan) || $scheduler_last == 0) {
             $run = Dispatch::controller("{$scheduler_controller}", "scheduler/")->method('index', '');
             if ($run !== FALSE) {
                 // Set last time of last execution
                 $schedule_time = time();
                 $scheduler->scheduler_last = $schedule_time;
                 $scheduler->save();
                 // Record Action to Log
                 $scheduler_log = new Scheduler_Log_Model();
                 $scheduler_log->scheduler_id = $scheduler_id;
                 $scheduler_log->scheduler_name = $scheduler->scheduler_name;
                 $scheduler_log->scheduler_status = "200";
                 $scheduler_log->scheduler_date = $schedule_time;
                 $scheduler_log->save();
                 if (isset($_GET['debug']) and $_GET['debug'] == 1) {
                     $debug .= "<BR /> STATUS: {{ EXECUTED }}";
                 }
             } else {
                 if (isset($_GET['debug']) and $_GET['debug'] == 1) {
                     $debug .= "<BR /> STATUS: {{ SCHEDULER NOT FOUND! }}";
                 }
             }
         } else {
             if (isset($_GET['debug']) and $_GET['debug'] == 1) {
                 $debug .= "<BR /> STATUS: {{ NOT RUN }}";
             }
         }
         if (isset($_GET['debug']) and $_GET['debug'] == 1) {
             //$debug .= "<BR /><BR />CRON DEBUG:<BR \>".nl2br($cron->getDebug());
             $debug .= "<BR \\>~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR />~~~~~~~~~~~~~~~~~~~~~~~~~~~<BR /><BR /><BR />";
         }
     }
     // If DEBUG is TRUE echo DEBUG info instead of transparent GIF
     if (isset($_GET['debug']) and $_GET['debug'] == 1) {
         echo $debug;
     } else {
         // Transparent GIF
         Header("Content-type: image/gif");
         Header("Expires: Wed, 11 Nov 1998 11:11:11 GMT");
         Header("Cache-Control: no-cache");
         Header("Cache-Control: must-revalidate");
         Header("Content-Length: 49");
         echo pack('H*', '47494638396101000100910000000000ffffffff' . 'ffff00000021f90405140002002c000000000100' . '01000002025401003b');
     }
 }
function getLastScheduledRunTime($job)
{
    global $debug;
    //DL+ DEBUG - USE PHP CRON CLASS
    //COMPLETELY REPLACED IT BY THE PHP CRON CLASS BY MICK SEAR (see www.phpclasses.org)
    //---------
    /*
    $extjob = Array();
    parseElement($job[PC_MINUTE], $extjob[PC_MINUTE], 60);
    parseElement($job[PC_HOUR], $extjob[PC_HOUR], 24);
    parseElement($job[PC_DOM], $extjob[PC_DOM], 31);
    parseElement($job[PC_MONTH], $extjob[PC_MONTH], 12);
    parseElement($job[PC_DOW], $extjob[PC_DOW], 7);
    
    //DL+- ADD ARGUMENTS TO JOB CALL
    //$dateArr = getdate(getLastActualRunTime($job[PC_CMD]));
    $dateArr = getdate(getLastActualRunTime($job));
    $minutesAhead = 0;
    while (
      $minutesAhead<525600 AND 
      (!$extjob[PC_MINUTE][$dateArr["minutes"]] OR 
      !$extjob[PC_HOUR][$dateArr["hours"]] OR 
      (!$extjob[PC_DOM][$dateArr["mday"]] OR !$extjob[PC_DOW][$dateArr["wday"]]) OR
      !$extjob[PC_MONTH][$dateArr["mon"]])
    ) {
      if (!$extjob[PC_DOM][$dateArr["mday"]] OR !$extjob[PC_DOW][$dateArr["wday"]]) {
        incDate($dateArr,1,"mday");
        $minutesAhead+=1440;
        continue;
      }
      if (!$extjob[PC_HOUR][$dateArr["hours"]]) {
        incDate($dateArr,1,"hour");
        $minutesAhead+=60;
        continue;
      }
      if (!$extjob[PC_MINUTE][$dateArr["minutes"]]) {
        incDate($dateArr,1,"minute");
        $minutesAhead++;
        continue;
      }
    }
    
    return mktime($dateArr["hours"],$dateArr["minutes"],0,$dateArr["mon"],$dateArr["mday"],$dateArr["year"]);
    */
    $cron_string = $job[PC_MINUTE] . ' ' . $job[PC_HOUR] . ' ' . $job[PC_DOM] . ' ' . $job[PC_MONTH] . ' ' . $job[PC_DOW];
    $cronPars = new CronParser();
    $cronPars->calcLastRan($cron_string);
    if ($debug) {
        print_r($cronPars->getLastRan());
    }
    return $cronPars->getLastRanUnix();
    //DL- DEBUG - USE PHP CRON CLASS
}