8 isset(
$user) or require
$_SERVER[
'DOCUMENT_ROOT'] .
'/page/404.php';
11 <div
class=
"table-responsive p-2">
12 <table
id=
"table-crontabs" class=
"table table-hover table-striped table-bordered table-sm text-nowrap small" style=
"width:100%">
13 <thead
class=
"bg-info text-center">
17 <th style=
"max-width:240px;">CLI команда</th>
18 <th style=
"max-width:240px;">Запрос</th>
19 <th>ID исполнителя</th>
24 <th>Группа владелец</th>
25 <th>Будет выполнено</th>
26 <th style=
"max-width:200px;">Комментарий</th>
27 <th data-name=
"Вкл / выкл" style=
"width:60px;"><i
class=
"fa fa-power-off"></i></th>
28 <th data-name=
"Выполнить" style=
"width:25px;"><i
class=
"fa fa-play"></i></th>
29 <th data-name=
"Копия" style=
"width:25px;"><i
class=
"fa fa-copy"></i></th>
30 <th data-name=
"Экспорт" style=
"width:25px;"><i
class=
"fa fa-download"></i></th>
31 <th data-name=
"Удалить" style=
"width:25px;"><i
class=
"fa fa-trash"></i></th>
36 <?php
if (!Wrong\Start\Env::$e->CRON_ACT) : ?>
37 <div
id=
"crontabs-alert" class=
"alert alert-danger small p-1 px-2 my-2" role=
"alert">
38 <i
class=
"fa fa-exclamation-triangle text-danger mr-2"></i>Для выполнения задач они должны быть активированы в общих настройках системы, в данный момент выполнение отключено.
41 <div
class=
"alert alert-secondary small p-1 px-2 my-2" role=
"alert">
42 <i
class=
"fa fa-exclamation-triangle text-danger mr-2"></i>Для выполнения http задач от имени пользователей, пользователь должен быть активен(включен) и для пользователя должно быть включено API по заголовкам X-Auth-Token. Также API должно быть включено на уровне глобальных настроек системы.
44 <div
class=
"alert alert-secondary alert-dismissible fade show small p-1 px-2" role=
"alert">
45 <button type=
"button" class=
"close" data-dismiss=
"alert" aria-label=
"Close">
46 <span aria-hidden=
"true">×</span>
48 <i
class=
"fa fa-info-circle text-black-50 mr-2"></i> Потоки: в процессе / минимум / максимум / держать потоки / предел нагрузки
50 <li>В процессе - текущее количество исполняемых потоков задачи</li>
51 <li>Минимум - минимальное количество запускаемых по расписанию задачей потоков её выполнения</li>
52 <li>Максимум - масксимальное количество выполняемых потоков задачи при котором остальным запускам(потокам) этой задачи будет отказано</li>
53 <li>Держать потоки - если установлено
"да", то всегда будет поддерживаться минимальное установленное количество потоков, вне зависимости от периодичности запуска задачи. Каждый поток при запуске будет создавать необходимое количество дополнительных независимых форков.</li>
54 <li>Предел нагрузки - устанавливается и рассчитывается в процентах от 1% до 1000% по формуле: текущий load average / кол-во логических ядер сервера * 100. Например 4/12*100 = 33% нагрузка. Где 4 это текущий la на 12 логических процессорах. 12 la из 12 ядер = 100% нагрузка сервера. 1000% - если сервер ещё работает, значит он крепыш. Если значение превышает установленное - в запуске очередного потока будет отказано. Вы устанавливаете лишь процент допустимой нагрузки при котором выполению данной задачи(любого её потока) будет отказано.</li>
55 <li>Если вы не понимате зачем это вам, не настраивайте потоки, оставьте их по умолчанию и пользуйтесь cron задачами в их классическом варианте.</li>
56 <li>Настройки задач кешируются во избежании множественных подключений к бд, но если ваши выполняемые задачи и скрипты используют бд выполняясь в большом количестве потоков, то позаботьтесь о бд настройках сервера max_connections и max_user_connections.</li>
64 window.dataTablesConfigs[0].ajax =
'<?= Wrong\Models\Selects::find(9)->request ?>';
65 window.dataTablesConfigs[0].columnDefs = [{
67 targets: [12, 13, 14, 15, 16]
69 window.dataTablesConfigs[0].initComplete =
function() {
70 $(
'#table-crontabs_length label').append(
'<button class="btn btn-outline-primary btn-sm" data-toggle="modal" data-target="#add-crontab" style="font-size:12px;margin-left:7px;"><i class="fa fa-plus-circle"></i> Добавить</button><button class="btn btn-outline-primary btn-sm" data-toggle="modal" data-target="#hide-table-cols" title="Видимость колонок таблицы <b>' + $(
'title').text() +
'</b>" style="font-size:12px;margin-left:5px;"><i class="fa fa-table"></i></button><button class="btn btn-outline-primary btn-sm" data-toggle="modal" data-target="#view-page" data-uri="//wrong-mvc.com/docs/cron.html" title="Документация" style="font-size:12px;margin-left:5px;"><i class="fa fa-question-circle"></i></button>');
72 $(
'#table-crontabs_filter label').append(
'<button title="Фильтр" data-target="#filter" data-table="crontabs" data-toggle="modal" class="btn btn-outline-primary btn-sm text-nowrap" style="font-size:12px;margin-left:5px;"><i class="fa fa-filter"></i></button><button id="reset-filter" data-action="filter" data-reset="true" data-table="crontabs" data-callback="afterResetFilter" title="Сбросить фильтр" class="btn btn-warning btn-sm text-nowrap" style="font-size:12px;margin-left:5px;display:<?= isset($_SESSION['filter
']['crontabs
']) ? 'inline-block
' : 'none
' ?>;"><i class="fa fa-close"></i></button>');
74 $(
'#table-crontabs').DataTable(window.dataTablesConfigs[0]);
76 !$(
".modal:visible").length && $(
'.dataTable').DataTable().ajax.reload(
null,
false);
80 function initSheduleNextPopover() {
81 $(
'#shedule-next').popover(
'dispose');
82 $(
'#shedule-next')[0].focus();
83 $(
'#shedule-next').popover({
85 title:
'<div class="d-flex align-items-center"><i class="fa fa-clock-o mr-2"></i><div>Ближайшее расписание:</div></div>',
86 content:
'<div class="text-center mb-2 shedule-next-list"><i class="fa fa-circle-o-notch fa-spin text-gray-500 display-4"></i></div>',
91 $(
'#shedule-next').popover(
'show');
94 function showNextCrontabs(response) {
95 if (response.id != $(
'[data-action="show-next-crontabs"]').data(
'id')) {
99 errorToast(response.error);
100 $(
'#shedule-next').popover(
'dispose');
103 $(
'.shedule-next-list').empty();
104 response.shedules.forEach(el => {
105 $(
'.shedule-next-list').append(
'<div class="text-left">' + el +
'</div>');
107 $(
'#shedule-next').popover(
'update');
110 function precallbackShedule() {
112 $.getScript(
'/api/action/stackjs');
116 $(window).blur(
function() {
117 $(
'#shedule-next').popover(
'dispose');
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' $_SERVER['HTTP_HOST']
if(!Wrong\Start\Env::$e->CRON_ACT) в данный момент выполнение отключено</div > endif