crontabs.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief страница админки с моделями типа "cron задачи"
6  */
7 
8 isset($user) or require $_SERVER['DOCUMENT_ROOT'] . '/page/404.php';
9 
10 ?>
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">
14  <tr>
15  <th>ID</th>
16  <th>Потоки</th>
17  <th style="max-width:240px;">CLI команда</th>
18  <th style="max-width:240px;">Запрос</th>
19  <th>ID исполнителя</th>
20  <th>Расписание</th>
21  <th>Метод</th>
22  <th>Заголовки</th>
23  <th>Данные</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>
32  </tr>
33  </thead>
34  </table>
35 </div>
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>Для выполнения задач они должны быть активированы в общих настройках системы, в данный момент выполнение отключено.
39  </div>
40 <?php endif; ?>
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 должно быть включено на уровне глобальных настроек системы.
43 </div>
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">&times;</span>
47  </button>
48  <i class="fa fa-info-circle text-black-50 mr-2"></i> Потоки: в процессе / минимум / максимум / держать потоки / предел нагрузки
49  <ul>
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>
57  </ul>
58 
59 </div>
60 
61 
62 <script>
63  $(function() {
64  window.dataTablesConfigs[0].ajax = '<?= Wrong\Models\Selects::find(9)->request ?>';
65  window.dataTablesConfigs[0].columnDefs = [{
66  orderable: false,
67  targets: [12, 13, 14, 15, 16]
68  }];
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>');
71 
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>');
73  }
74  $('#table-crontabs').DataTable(window.dataTablesConfigs[0]);
75  setInterval(() => {
76  !$(".modal:visible").length && $('.dataTable').DataTable().ajax.reload(null, false);
77  }, 20000);
78  });
79 
80  function initSheduleNextPopover() {
81  $('#shedule-next').popover('dispose');
82  $('#shedule-next')[0].focus();
83  $('#shedule-next').popover({
84  trigger: 'focus',
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>',
87  html: true,
88  placement: 'right'
89 
90  });
91  $('#shedule-next').popover('show');
92  }
93 
94  function showNextCrontabs(response) {
95  if (response.id != $('[data-action="show-next-crontabs"]').data('id')) {
96  return;
97  }
98  if (response.error) {
99  errorToast(response.error);
100  $('#shedule-next').popover('dispose');
101  return;
102  }
103  $('.shedule-next-list').empty();
104  response.shedules.forEach(el => {
105  $('.shedule-next-list').append('<div class="text-left">' + el + '</div>');
106  });
107  $('#shedule-next').popover('update');
108  }
109 
110  function precallbackShedule() {
111  setTimeout(() => {
112  $.getScript('/api/action/stackjs');
113  }, 100);
114  }
115 
116  $(window).blur(function() {
117  $('#shedule-next').popover('dispose');
118  });
119 </script>
$user
Definition: from-user.php:38
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']
Definition: from-user.php:36
if(!Wrong\Start\Env::$e->CRON_ACT) в данный момент выполнение отключено</div > endif
Definition: crontabs.php:36