Skip to content

Commit 2a80364

Browse files
authored
Merge pull request #1027 from london89/alpha
Изменения контроля циклов
2 parents 432dcde + bb84a05 commit 2a80364

File tree

3 files changed

+40
-33
lines changed

3 files changed

+40
-33
lines changed

cycle.php

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@
9595
echo "\n";
9696

9797
// создаем табличку cyclesRun, если её нет
98-
SQLExec('CREATE TABLE IF NOT EXISTS `cyclesRun` (`KEYWORD` char(100) NOT NULL,`DATAVALUE` char(255) NOT NULL,PRIMARY KEY (`KEYWORD`)) ENGINE=MEMORY DEFAULT CHARSET=utf8;');
98+
SQLExec('CREATE TABLE IF NOT EXISTS `cached_cycles` (`TITLE` char(100) NOT NULL,`VALUE` char(255) NOT NULL,PRIMARY KEY (`TITLE`)) ENGINE=MEMORY DEFAULT CHARSET=utf8;');
99+
SQLExec('DROP TABLE IF EXISTS cyclesRun;');
100+
99101

100102
$old_mask = umask(0);
101103
if (is_dir(ROOT . 'cached')) {
@@ -260,6 +262,8 @@
260262
$qry = "1 AND (TITLE LIKE 'cycle%Run' OR TITLE LIKE 'cycle%Control' OR TITLE LIKE 'cycle%Disabled' OR TITLE LIKE 'cycle%AutoRestart')";
261263
$thisCompObject = getObject('ThisComputer');
262264
$cycles_records = SQLSelect("SELECT properties.* FROM properties WHERE $qry ORDER BY TITLE");
265+
SQLExec("DELETE FROM cached_cycles");
266+
263267
$total = count($cycles_records);
264268
for ($i = 0; $i < $total; $i++) {
265269
DebMes("Removing property ThisComputer.$property (object ".$thisCompObject->id.")",'threads');
@@ -381,21 +385,30 @@
381385
if ((time() - $last_cycles_control_check) >= 5 || !empty($result)) {
382386

383387
$last_cycles_control_check = time();
388+
$cyclesControls=$cyclesTimestamps=array();
389+
$tmpcyclesTimestamps=SQLSelect("SELECT * FROM cached_cycles;");
390+
391+
$total = count($tmpcyclesTimestamps);
392+
foreach ($tmpcyclesTimestamps as $k => $v) {
393+
if (strpos($v['TITLE'],'Run') !== FALSE) {
394+
$cyclesTimestamps[$v['TITLE']] = $v['VALUE'];
395+
} else if (strpos($v['TITLE'],'Control') !== FALSE) {
396+
$cyclesControls[$v['TITLE']] = $v['VALUE'];
397+
}
398+
}
384399

385-
$qry = "OBJECT_ID=" . $thisComputerObject->id . " AND (TITLE LIKE 'cycle%Run' OR TITLE LIKE 'cycle%Control')";
386-
$cycles = SQLSelect("SELECT properties.* FROM properties WHERE $qry ORDER BY TITLE");
387-
388-
$total = count($cycles);
389400
$seen = array();
390401
for ($i = 0; $i < $total; $i++) {
391-
$title = $cycles[$i]['TITLE'];
402+
$title = $tmpcyclesTimestamps[$i]['TITLE'];
392403
$title = preg_replace('/Run$/', '', $title);
393404
$title = preg_replace('/Control$/', '', $title);
394405
if (isset($seen[$title])) {
395406
continue;
396407
}
397408
$seen[$title] = 1;
398-
$control = getGlobal($title . 'Control');
409+
$control='';
410+
411+
if (isset($cyclesControls[$title . 'Control'])) $control = $cyclesControls[$title . 'Control'];
399412
if ($control != '') {
400413
DebMes("Got control command '$control' for " . $title, 'threads');
401414
if ($control == 'stop') {
@@ -410,9 +423,7 @@
410423
}
411424

412425
$is_running = array();
413-
$tmpcyclesTimestamps=SQLSelect("SELECT * FROM cyclesRun;");
414-
foreach ($tmpcyclesTimestamps as $k => $v) $cyclesTimestamps[$v['KEYWORD']] = $v['DATAVALUE'];
415-
426+
416427
foreach ($threads->commandLines as $id => $cmd) {
417428
if (preg_match('/(cycle_.+?)\.php/is', $cmd, $m)) {
418429
$title = $m[1];
@@ -422,14 +433,9 @@
422433
DebMes("Adding $title to auto-recovery list", 'threads');
423434
$auto_restarts[] = $title;
424435
}
436+
$cycle_updated_timestamp=$cyclesTimestamps[$title.'Run'];
425437

426-
//$cycle_updated_timestamp = getGlobal($title . 'Run');
427-
$cycle_updated_timestamp=$cyclesTimestamps[strtolower('MJD:ThisComputer.'.$title.'Run')];
428-
if (!isset($to_start[$title]) &&
429-
$cycle_updated_timestamp &&
430-
in_array($title, $auto_restarts) &&
431-
((time() - $cycle_updated_timestamp) > 30 * 60)
432-
) { //
438+
if (!$to_start[$title] && $cycle_updated_timestamp && in_array($title, $auto_restarts) && ((time() - $cycle_updated_timestamp) > 30 * 60)) { //
433439
DebMes("Looks like $title is dead (updated: ".date('Y-m-d H:i:s',$cycle_updated_timestamp)."). Need to recovery", 'threads');
434440
registerError('cycle_hang', $title);
435441
setGlobal($title . 'Control', 'restart');
@@ -438,6 +444,7 @@
438444
}
439445
}
440446

447+
441448
if (isRebootRequired()) {
442449
if (!$reboot_timer) {
443450
$reboot_timer = time();

lib/caching.class.php

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,40 @@
22

33
function saveCycleToCache($key, $value)
44
{
5-
$key = strtolower($key);
6-
75
if (is_array($value) || strlen($value) > 255) {
8-
SQLExec("DELETE FROM cyclesRun WHERE KEYWORD='".$key."'");
6+
SQLExec("DELETE FROM cached_cycles WHERE TITLE='".$key."'");
97
return;
108
}
119

12-
1310
if (isset($_SERVER['REQUEST_METHOD'])) {
1411
global $memory_cycle_cache;
1512
$memory_cycle_cache[$key] = $value;
1613
}
17-
$rec = array('KEYWORD' => $key, 'DATAVALUE' => $value);
18-
$sqlQuery = "REPLACE INTO cyclesRun (KEYWORD, DATAVALUE) " .
19-
" VALUES ('" . DbSafe1($rec['KEYWORD']) . "', " .
20-
"'" . DbSafe1($rec['DATAVALUE']) . "')";
14+
$rec = array('TITLE' => $key, 'VALUE' => $value);
15+
$sqlQuery = "REPLACE INTO cached_cycles (TITLE, VALUE) " .
16+
" VALUES ('" . DbSafe1($rec['TITLE']) . "', " .
17+
"'" . DbSafe1($rec['VALUE']) . "')";
2118
SQLExec($sqlQuery);
2219
}
2320

2421
function checkCycleFromCache($key)
2522
{
26-
$key = strtolower($key);
2723
if (isset($_SERVER['REQUEST_METHOD'])) {
2824
global $memory_cycle_cache;
2925
if (is_array($memory_cycle_cache) && isset($memory_cycle_cache[$key])) {
3026
return $memory_cycle_cache[$key];
3127
}
3228
}
33-
$rec = SQLSelectOne("SELECT * FROM cyclesRun WHERE KEYWORD = '" . DBSafe($key) . "'");
34-
if ($rec['KEYWORD']) {
35-
return $rec['DATAVALUE'];
29+
$rec = SQLSelectOne("SELECT * FROM cached_cycles WHERE TITLE = '" . DBSafe($key) . "'");
30+
if ($rec['TITLE']) {
31+
return $rec['VALUE'];
3632
} else {
3733
return false;
3834
}
3935
}
4036

4137

38+
4239
/**
4340
* Summary of clearCacheData
4441
* @param mixed $prefix prefix

lib/objects.class.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -603,8 +603,9 @@ function getGlobal($varname)
603603
$object_name = 'ThisComputer';
604604
}
605605
$cached_name = 'MJD:' . $object_name . '.' . $varname;
606-
if (strpos($varname,'cycle_') == 0 && strpos($varname,'Run') !== FALSE) {
607-
$cached_value = checkCycleFromCache($cached_name);
606+
607+
if (strpos($varname,'cycle_') === 0) {
608+
$cached_value = checkCycleFromCache($varname);
608609
} else {
609610
$cached_value = checkFromCache($cached_name);
610611
}
@@ -622,6 +623,7 @@ function getGlobal($varname)
622623
}
623624
}
624625

626+
625627
/**
626628
* getHistoryValueId
627629
*
@@ -917,8 +919,8 @@ function getHistoryValue($varname, $time, $nerest = false)
917919
*/
918920
function setGlobal($varname, $value, $no_linked = 0, $source = '')
919921
{
920-
if (strpos($varname,'cycle_') == 0 && strpos($varname,'Run') !== FALSE) {
921-
saveCycleToCache('MJD:ThisComputer.'.$varname,$value);
922+
if (strpos($varname,'cycle_') === 0) {
923+
saveCycleToCache($varname,$value);
922924
return;
923925
}
924926

@@ -943,6 +945,7 @@ function setGlobal($varname, $value, $no_linked = 0, $source = '')
943945
}
944946
}
945947

948+
946949
/**
947950
* Summary of callMethod
948951
* @param mixed $method_name Method name

0 commit comments

Comments
 (0)