From 29738f079a240eb5dbc24809685cb0ceed9f17f1 Mon Sep 17 00:00:00 2001 From: rylon Date: Sat, 7 Jun 2014 04:34:32 +0200 Subject: [PATCH] system cron --- api/api_system.php | 7 +++-- autoload.inc.php | 4 +-- cron/cron.php | 41 ++++++++++++++++++++++++++ cron/cronjob.php | 7 +++++ cron/cronjobtest.php | 9 ++++++ cron/cronstatus.php | 29 +++++++++++++++++++ cron/crontime.php | 56 ++++++++++++++++++++++++++++++++++++ dbd/qq/SYS_CRON_LIST.php | 11 +++++++ dbd/qq/SYS_CRON_UPD.php | 11 +++++++ dbd/tbl/system_cron.php | 18 ++++++++++++ docu/system/system.system.md | 2 ++ log/exceptions/CRON.php | 5 ++++ 12 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 cron/cron.php create mode 100644 cron/cronjob.php create mode 100644 cron/cronjobtest.php create mode 100644 cron/cronstatus.php create mode 100644 cron/crontime.php create mode 100644 dbd/qq/SYS_CRON_LIST.php create mode 100644 dbd/qq/SYS_CRON_UPD.php create mode 100644 dbd/tbl/system_cron.php create mode 100644 log/exceptions/CRON.php diff --git a/api/api_system.php b/api/api_system.php index 736e2e0..a760030 100644 --- a/api/api_system.php +++ b/api/api_system.php @@ -27,7 +27,10 @@ class api_system extends api_login{ return \SYSTEM\SECURITY\Security::check($rightid);} public static function call_account_action_create($username, $password_sha, $email, $locale){ return \SYSTEM\SECURITY\Security::create($username, $password_sha, $email, $locale);}*/ - + + public static function call_cron(){ + return \SYSTEM\CRON\cron::run();} + public static function call_locale($request,$lang){ return \SYSTEM\LOG\JsonResult::toString(\SYSTEM\locale::getStrings($request, $lang));} @@ -37,5 +40,5 @@ class api_system extends api_login{ public static function static__lang($lang){ \SYSTEM\locale::set($lang);} public static function static__result($result){ - \SYSTEM\CONFIG\config::set(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT, $result);} + \SYSTEM\CONFIG\config::set(\SYSTEM\CONFIG\config_ids::SYS_CONFIG_DEFAULT_RESULT, $result);} } \ No newline at end of file diff --git a/autoload.inc.php b/autoload.inc.php index c718e94..dc05dbd 100644 --- a/autoload.inc.php +++ b/autoload.inc.php @@ -26,14 +26,12 @@ require_once dirname(__FILE__).'/system/autoload.php'; \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/db/qq','SYSTEM\DB'); \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/security','SYSTEM\SECURITY'); - \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/config','SYSTEM\CONFIG'); - \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/cache','SYSTEM\CACHE'); - \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/sai','SYSTEM\SAI'); \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/docu','SYSTEM\DOCU'); \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/files','SYSTEM\FILES'); +\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/cron','SYSTEM\CRON'); require_once dirname(__FILE__).'/lib/autoload.inc.php'; require_once dirname(__FILE__).'/docu/register_sys_docu.php'; diff --git a/cron/cron.php b/cron/cron.php new file mode 100644 index 0000000..9a26f6b --- /dev/null +++ b/cron/cron.php @@ -0,0 +1,41 @@ +next()){ + //check module + if(!self::check($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS])){ + self::status($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS], \SYSTEM\CRON\cronstatus::CRON_STATUS_FAIL_CLASS); + continue;} + //time to execute? + if(!\SYSTEM\CRON\crontime::check_now( time($cron[\SYSTEM\DBD\system_cron::FIELD_LAST_RUN]), + $cron[\SYSTEM\DBD\system_cron::FIELD_MIN], + $cron[\SYSTEM\DBD\system_cron::FIELD_HOUR], + $cron[\SYSTEM\DBD\system_cron::FIELD_DAY], + $cron[\SYSTEM\DBD\system_cron::FIELD_DAY_WEEK], + $cron[\SYSTEM\DBD\system_cron::FIELD_MONTH])){ + continue;} + //Status is ok? + if($cron[\SYSTEM\DBD\system_cron::FIELD_STATUS] != \SYSTEM\CRON\cronstatus::CRON_STATUS_SUCCESFULLY){ + new \SYSTEM\LOG\CRON('Cron for Class '.$cron[\SYSTEM\DBD\system_cron::FIELD_CLASS].' could not execute cuz Status aint good: '. \SYSTEM\CRON\cronstatus::decode($cron[\SYSTEM\DBD\system_cron::FIELD_STATUS])); + continue;} + //set running + self::status($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS], \SYSTEM\CRON\cronstatus::CRON_STATUS_RUNNING); + self::status($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS], call_user_func(array($cron[\SYSTEM\DBD\system_cron::FIELD_CLASS],'run'))); + } + return \SYSTEM\LOG\JsonResult::ok(); + } + + private static function status($class, $status){ + new \SYSTEM\LOG\CRON('Cron Status for Class '.$class.' updated to: '. \SYSTEM\CRON\cronstatus::decode($status)); + return \SYSTEM\DBD\SYS_CRON_UPD::QI(array($status,time(),$class));} +} \ No newline at end of file diff --git a/cron/cronjob.php b/cron/cronjob.php new file mode 100644 index 0000000..b0c58f0 --- /dev/null +++ b/cron/cronjob.php @@ -0,0 +1,7 @@ + $now_month){ $last_year -= 1;} + $last_month = $month;} + if($day){ + if($day > $now_day){ $last_month -= 1;} + $last_day = $day;} + if($hour){ + if($hour > $now_hour){ $last_day -= 1;} + $last_hour = $hour;} + if($min){ + if($min > $now_min){ $last_hour -= 1;} + $last_min = $min;} + if($day_week){ + $day_week = $day_week % 6; // 7 and 0 both mean Sunday + $now_day_week = $now_day_week % 6; // 7 and 0 both mean Sunday + $last_day -= abs($day_week - $now_day_week);} + return mktime($last_hour, $last_min, 0, $last_month, $last_day, $last_year); + } + public static function check($base_time,$last_run,$min,$hour,$day,$day_week,$month){ + return crontime::next($last_run, $min, $hour, $day, $day_week, $month) < $base_time ? true : false;} + public static function next_now($min,$hour,$day,$day_week,$month){ + self::next(time(),$min,$hour,$day,$day_week,$month);} + public static function last_now($min,$hour,$day,$day_week,$month){ + return self::last(time(),$min,$hour,$day,$day_week,$month);} + public static function check_now($last_run,$min,$hour,$day,$day_week,$month){ + return self::check(time(),$last_run,$min,$hour,$day,$day_week,$month);} +} \ No newline at end of file diff --git a/dbd/qq/SYS_CRON_LIST.php b/dbd/qq/SYS_CRON_LIST.php new file mode 100644 index 0000000..9c9f1fc --- /dev/null +++ b/dbd/qq/SYS_CRON_LIST.php @@ -0,0 +1,11 @@ +