1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
queue.php
См. документацию.
1<?php
3
5{
6 public static function Add($group_id, $command, $param1, $param2, $param3)
7 {
8 global $DB;
9
10 $sql_group_id = "'" . intval($group_id) . "'";
11 $sql_command = "'" . $DB->ForSql($command, 50) . "'";
12 $sql_param1 = CClusterQueue::QuoteParam($param1);
13 $sql_param2 = CClusterQueue::QuoteParam($param2);
14 $sql_param3 = CClusterQueue::QuoteParam($param3);
15 $DB->StartUsingMasterOnly();
16 $DB->Query('
17 INSERT INTO b_cluster_queue (
18 TIMESTAMP_X, GROUP_ID, COMMAND, PARAM1, PARAM2, PARAM3
19 ) values (
20 ' . $DB->CurrentTimeFunction() . ', ' . $sql_group_id . ', ' . $sql_command . ', ' . $sql_param1 . ', ' . $sql_param2 . ', ' . $sql_param3 . '
21 )
22 ');
23 $DB->StopUsingMasterOnly();
24 }
25
26 public static function QuoteParam($str)
27 {
28 global $DB;
29
30 if (is_bool($str))
31 {
32 return "'b:" . ($str === true ? 't' : 'f') . "'";
33 }
34 elseif (is_string($str))
35 {
36 return "'s:" . $DB->ForSql($str, 250) . "'";
37 }
38 else
39 {
40 return 'null';
41 }
42 }
43
44 public static function UnQuoteParam($str)
45 {
46 if ($str <> '')
47 {
48 $prefix = mb_substr($str, 0, 2);
49 if ($prefix === 's:')
50 {
51 return mb_substr($str, 2);
52 }
53 if ($prefix === 'b:')
54 {
55 return mb_substr($str, 2) === 't';
56 }
57 }
58 return null;
59 }
60
61 public static function Run()
62 {
63 $pool = \Bitrix\Main\Application::getInstance()->getConnectionPool();
64 /* @var \Bitrix\Main\DB\Connection $connection */
65 $connection = $pool->getConnection();
66 $pool->useMasterOnly(true);
67 do
68 {
69 //read data
70 $ids = [];
71 $queue = [];
72 $rs = $connection->query('
73 SELECT *
74 FROM b_cluster_queue
75 WHERE GROUP_ID = ' . constant('BX_CLUSTER_GROUP') . '
76 ORDER BY ID
77 ', 100);
78 while ($ar = $rs->fetch())
79 {
80 $queueKey = $ar['COMMAND'] . '|' . $ar['PARAM1'] . '|' . $ar['PARAM2'] . '|' . $ar['PARAM3'];
81 $queue[$queueKey] = $ar;
82 $ids[] = intval($ar['ID']);
83 }
84
85 $uid = $connection->getDatabase() . '_cluster_queue_' . constant('BX_CLUSTER_GROUP');
86
87 if ($ids)
88 {
89 if (!$connection->lock($uid))
90 {
91 $pool->useMasterOnly(false);
92 return false;
93 }
94 }
95
96 //clean cache
97 foreach ($queue as $ar)
98 {
99 $class_name = $ar['COMMAND'];
100 if (class_exists($class_name))
101 {
103 $object = new $class_name;
104 $object->QueueRun(
108 );
109 }
110 }
111
112 //mark as done
113 if ($ids)
114 {
115 $connection->query('DELETE FROM b_cluster_queue WHERE ID in (' . implode(',', $ids) . ')');
116 $connection->unlock($uid);
117 }
118 }
119 while ($queue);
120 $pool->useMasterOnly(false);
121 }
122}
$connection
Определения actionsdefinitions.php:38
static getInstance()
Определения application.php:98
Определения queue.php:5
static UnQuoteParam($str)
Определения queue.php:44
static Add($group_id, $command, $param1, $param2, $param3)
Определения queue.php:6
static QuoteParam($str)
Определения queue.php:26
$str
Определения commerceml2.php:63
$uid
Определения hot_keys_act.php:8
global $DB
Определения cron_frame.php:29
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
$rs
Определения action.php:82