/** * Launcher to request Mediboard * * @param string $rootURL Host to request (ie, https://localhost/mediboard) * @param string $username Username requesting * @param string $password Password of the user * @param string $params Parameters to send (ie, "m=dPpatients&tab=vw_medecins") * @param int $times How many repeats * @param int $delay Delay (in seconds) between repeats * @param string $file Output file * * @return void */ function request($rootURL, $username, $password, $params, $times, $delay, $file) { announce_script("Mediboard request launcher"); if ($times === "") { $times = 1; } if ($delay === "") { $delay = 1; } $times = intval($times); $delay = intval($delay); $login = "******"; $username = "******" . $username; $password = "******" . $password; $url = $rootURL . "/index.php?" . $login . "&" . $username . "&" . $password . "&" . $params; // Make mediboard path $MEDIBOARDPATH = "/var/log/mediboard"; force_dir($MEDIBOARDPATH); $log = $MEDIBOARDPATH . "/jobs.log"; force_file($log); if ($times > 1) { while ($times > 0) { $times--; mediboard_request($url, $log, $file); sleep($delay); } } else { mediboard_request($url, $log, $file); } }
/** * Update Mediboard * * @param string $action action to perform: info|real|noup * @param string $revision revision number you want to update to * * @return void */ function update($action, $revision) { $currentDir = dirname(__FILE__); announce_script("Mediboard SVN updater"); $MB_PATH = $currentDir . "/.."; $log = $MB_PATH . "/tmp/svnlog.txt"; $tmp = $MB_PATH . "/tmp/svnlog.tmp"; $dif = $MB_PATH . "/tmp/svnlog.dif"; $status = $MB_PATH . "/tmp/svnstatus.txt"; $event = $MB_PATH . "/tmp/monitevent.txt"; $prefixes = array("erg", "fnc", "fct", "bug", "war", "edi", "sys", "svn"); if ($revision === "") { $revision = "HEAD"; } // Choose the target revision switch ($action) { case "info": $out = array(); exec("svn info {$MB_PATH}", $out, $ret); if (check_errs($ret, null, "SVN info error", "SVN info successful!")) { echo $out[5] . "\n"; } $out = array(); exec("svn log {$MB_PATH} -r BASE:{$revision}", $out, $ret); if (check_errs($ret, null, "SVN log error", "SVN log successful!")) { $out = filter_commit_messages($out); echo implode("\n", $out) . "\n"; } $out = array(); exec("svn info {$MB_PATH} -r {$revision}", $out, $ret); if (check_errs($ret, null, "SVN info error", "SVN info successful!")) { echo $out[5] . "\n"; } break; case "real": // Concat the source (BASE) revision number : 5th line of SVN info (!) $out = array(); exec("svn info {$MB_PATH}", $out, $ret); if (check_errs($ret, null, "Failed to get source revision info", "SVN Revision source info written!")) { $fic = fopen($tmp, "w"); if (check_errs($fic, false, "Failed to open tmp file", "Tmp file opened!")) { fwrite($fic, $out[5] . "\n"); fclose($fic); } } // Concat SVN Log from BASE to target revision $out = array(); exec("svn log {$MB_PATH} -r BASE:{$revision}", $out, $ret); if (check_errs($ret, null, "Failed to retrieve SVN log", "SVN log retrieved!")) { $fic = fopen($dif, "w"); if (check_errs($fic, false, "Failed to open dif file", "Dif file opened!")) { fwrite($fic, implode("\n", $out) . "\n"); fclose($fic); $fic = fopen($dif, "r"); $fic2 = fopen($tmp, "a+"); // TODO: use filter_commit_messages() while (!feof($fic)) { $buffer = fgets($fic); if (preg_match("/(erg:|fnc:|fct:|bug:|war:|edi:|sys:|svn:)/i", $buffer)) { fwrite($fic2, $buffer); } } fclose($fic); fclose($fic2); echo "SVN log parsed!\n"; unlink($dif); } } // Perform actual update $out = array(); exec("svn update {$MB_PATH} --revision {$revision}", $out, $ret); echo implode("\n", $out) . "\n"; check_errs($ret, null, "Failed to perform SVN update", "SVN update performed!"); // Concat the target revision number $fic = fopen($tmp, "a+"); $out = array(); exec("svn info {$MB_PATH}", $out, $ret); if (check_errs($ret, null, "Failed to get target revision info", "SVN Revision target info written!")) { fwrite($fic, "\n" . implode("\n", $out)); fclose($fic); } // Contact dating info $fic = fopen($tmp, "a+"); fwrite($fic, "--- Updated Mediboard on " . strftime("%Y-%m-%d %H:%M:%S") . " ---\n"); fclose($fic); // Concat tmp file to log file // // Ensure log file exists force_file($log); // Log file is reversed, make it straight shell_exec("tac " . $log . " > " . $log . ".straight"); // Concat tmp file shell_exec("cat " . $tmp . " >> " . $log . ".straight"); // Reverse the log file for user convenience shell_exec("tac " . $log . ".straight > " . $log); // Clean files unlink($log . ".straight"); unlink($tmp); // Write status file $svn = shell_exec("svn info " . $MB_PATH . " | awk 'NR==5'"); if (check_errs($svn, null, "Failed to write status file", "Status file written!")) { $fic = fopen($status, "w"); fwrite($fic, $svn . "Date: " . strftime("%Y-%m-%d %H:%M:%S") . "\n"); fclose($fic); if (file_exists($event)) { $fic = fopen($event, "a"); } else { $fic = fopen($event, "w"); } fwrite($fic, "\n#" . date('Y-m-d H:i:s')); fwrite($fic, "\nMise a jour. " . $svn); fclose($fic); } break; } }