#!/usr/bin/php . */ define('N',"\n"); define('SNAME',basename(__FILE__)); define('CONFIGFP',__DIR__.'/../../conf/mustard.ini'); $help='SYNOPSYS '.SNAME.' [options] DESCRIPTION This is a script to set the «LastOkCheckTS» field of «Instances» according to the «InstChecks» table. OPTIONS -h, --help Show this help text and exit.'.N; for ($i=1; $i<$argc; $i++) { if ($argv[$i]=='-h' || $argv[$i]=='--help') { mexit($help,0); } else { mexit('Don’t know how to interpret «'.$argv[$i].'», please read the help text using «-h» or «--help» option.'.N,1); } } use function mysqli_real_escape_string as myesc; $iniarr=@parse_ini_file(CONFIGFP) or mexit('Could not open config file «'.CONFIGFP.'».'.N,1); try { $link=@mysqli_connect($iniarr['db_host'],$iniarr['db_admin_name'],$iniarr['db_admin_password'],$iniarr['db_name'],$iniarr['db_port'],$iniarr['db_socket']); } catch (Exception $error) { mexit('could not connect to MySQL server: '.mysqli_connect_error().'.'.N,1,true); } // for php versions < 8 if ($link===false) mexit('could not connect to MySQL server: '.mysqli_connect_error().'.'.N,1,true); try { $res=mysqli_set_charset($link,'utf8mb4'); } catch (Exception $error) { mexit('could not set «utf8mb4» charset for MySQL: '.mysqli_error($link).'.'.N,1,true); } // for php versions < 8 if ($res===false) mexit('could not set MySQL charset: '.mysqli_errno($link).': '.mysqli_error($link).'.'.N,1,true); $insts=[]; $res=myq($link,'SELECT * FROM Instances'); while ($row=mysqli_fetch_assoc($res)) $insts[]=$row; $cinsts=count($insts); $i=0; $now=time(); foreach ($insts as $inst) { $i++; echo('Working on instance '.$i.'/'.$cinsts.' ('.round(100/$cinsts*$i,2).'%) with ID = '.$inst['ID'].' and URI = «'.$inst['URI'].'».'.N); $instchecks=[]; $res=myq($link,'SELECT * FROM InstChecks WHERE InstID='.$inst['ID'].' ORDER BY Time DESC'); while ($row=mysqli_fetch_assoc($res)) $instchecks[]=$row; //print_r($instchecks); $lastokcheckts=null; foreach ($instchecks as $check) if ($check['Status']==1) { $lastokcheckts=$check['Time']; break; } $cc=count($instchecks); if (is_null($lastokcheckts) && $cc>0) $lastokcheckts=$instchecks[$cc-1]['Time']; if (is_null($lastokcheckts) && !is_null($inst['FirstSeen'])) $lastokcheckts=$inst['FirstSeen']; if (is_null($lastokcheckts) && !is_null($inst['InsertTS'])) $lastokcheckts=$inst['InsertTS']; if (is_null($lastokcheckts)) $lastokcheckts='NULL'; echo('$lastokcheckts: '.$lastokcheckts.N); myq($link,'UPDATE Instances SET LastOkCheckTS='.$lastokcheckts.' WHERE ID='.$inst['ID']); echo('Updated LastOkCheckTS :-)'.N.'---'.N); } mysqli_close($link); echo('Done updating '.$cinsts.' «Instances» records :-).'.N); exit(0); // functions function myq(&$l,$q) { try { $res=mysqli_query($l,$q); } catch (Exception $e) { echo('query «'.$q.'» failed: '.$e->getMessage().' (error code: '.$e->getCode().').'.N); exit(3); } if ($res===false) { echo('query «'.$q.'» failed: '.mysqli_errno($l).': '.mysqli_error($l).'.'.N); exit(3); } return($res); } function mexit($msg,$code) { global $link; if (isset($link) && $link!==false) mysqli_close($link); if ($code>0) fwrite(STDERR,$msg); else echo($msg); exit($code); } function utstd($val) { if (is_null($val)) return(null); $val=round($val); return(date('Y-m-d H:i:s',$val)); } function pr($val) { if (is_null($val)) return('NULL'); return($val); } function eecho($msg) { echo($msg); } ?>