14 use Cron\CronExpression;
32 public static function load()
37 $sth =
$dbh->query(
"SELECT * FROM `crontabs` WHERE `run_at` BETWEEN NOW() - INTERVAL 1 YEAR AND NOW() AND `act` = 1");
39 while ($row =
$sth->fetch()) {
57 if ((!$row->request && $row->method !=
'CLI') || (!$row->cli && $row->method ==
'CLI'))
return;
59 if (intval(shell_exec(
"echo $(nproc) $(cat /proc/loadavg | awk '{print $1}') | awk '$2>$1/100*" .
$threads[
'load'] .
" {print 1}'")))
exit;
61 if ($row->method ==
'CLI' && $row->cli &&
Env::$e->CRON_CLI) {
67 if (!$row->request)
exit;
68 $x_auth_token =
false;
69 if ($row->user_id && !($x_auth_token = self::get_token($row->user_id)))
return;
70 $headers = json_decode($row->headers,
true);
73 $headers[] =
'X-Auth-Token: ' . $x_auth_token;
76 if (!in_array(
'Content-Type: application/json; charset=utf-8',
$headers)) {
77 $data = json_decode($row->data,
true);
98 $user =
$dbh->query(
"SELECT * FROM `users` WHERE `id` = $user_id")->fetch();
100 return $user->x_auth_token;
111 $sth =
$dbh->query(
"SELECT * FROM `crontabs`");
112 while ($row =
$sth->fetch()) {
113 $cron = CronExpression::factory($row->shedule);
114 $run_at = $cron->getNextRunDate(
null, 0)->format(
'Y-m-d H:i:s');
115 $dbh->query(
"UPDATE `crontabs` SET `run_at` = '$run_at' WHERE `id` = $row->id");
127 return intval(shell_exec(
"ps aux | grep '" . addcslashes(
'php -f ' . dirname(__DIR__, 3) .
'/public_html/cron.php ' . $id,
'.') .
"' | wc -l"));
139 if (intval(shell_exec(
"echo $(nproc) $(cat /proc/loadavg | awk '{print $1}') | awk '$2>$1/100*" .
$threads[
'load'] .
" {print 1}'")))
return 0;
157 for (
$i = 0;
$i < $n;
$i++) {
165 exec(
'(sleep 0.4 && php -f ' . dirname(__DIR__, 3) .
'/public_html/cron.php fork ' . $id .
' &) > /dev/null 2>&1');
178 exec(
'(php -f ' . dirname(__DIR__, 3) .
'/public_html/cron.php ' . $id .
' &) > /dev/null 2>&1');
186 public static function fork($row)
188 if (!$row->act || !
Env::$e->CRON_ACT) {
if(!($row=Wrong\Models\Crontabs::find($_POST['id']))) if(! $user->access() ->write($row)) $sth
if(!($row=Wrong\Models\Crontabs::find($_POST['id']))) if(! $user->access() ->write($row)) if($_POST['min']< 1|| $_POST['min'] > 100000|| $_POST['max']< 1|| $_POST['max'] > 100000|| $_POST['load']< 1|| $_POST['load'] > 1000) $threads
if(empty($_POST['name'])) if(empty($_POST['type'])||!in_array($_POST['type'], ['page', 'modal', 'incode', 'select', 'action'])) $i
API отвечает за http запросы к серверу
static req($request, $method='GET', $data='', $headers=[], $timeout=0)
Connect создает подключение к базе данных
static getInstance($ignore_error=false)
Locker блокировщик файлов
static unlock($id, $forse=false)
static lock($id, $max_time=self::CLEAN_TIME)
Env класс управляющий, добавляющий или записывающий переменные среды
Cron класс управляющий выполнением крон задач
static available_threads($id, $threads)
static get_curr_therads($id)
static get_token($user_id)
const DEFAULT_THERADS_SET
static run_stack($id, $n, $threads)
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit