123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- <?php
- function show_status($done, $total, $size = 30) {
- static $start_time;
- // if we go over our bound, just ignore it
- if ($done > $total) {
- return;
- }
- if (empty($start_time)) {
- $start_time = time();
- }
- $now = time();
- $perc = (float)($done / $total);
- $bar = floor($perc * $size);
- $status_bar = "\r[";
- $status_bar .= str_repeat("=", $bar);
- if ($bar < $size) {
- $status_bar .= ">";
- $status_bar .= str_repeat(" ", $size - $bar);
- }
- else {
- $status_bar .= "=";
- }
- $disp = number_format($perc * 100, 0);
- $status_bar .= "] $disp% $done/$total";
- $rate = ($now - $start_time) / $done;
- $left = $total - $done;
- $eta = round($rate * $left, 2);
- $elapsed = $now - $start_time;
- $status_bar .= " remaining: " . number_format($eta) . " sec. elapsed: " . number_format($elapsed) . " sec.";
- echo "$status_bar ";
- flush();
- // when done, send a newline
- if ($done == $total) {
- echo "\n";
- }
- }
- // include channel list
- //include "SDS_status_channels.php";
- $username = getenv("PHP_ADEI_USERNAME");
- $password = getenv("PHP_ADEI_PASSWORD");
- $context = stream_context_create(["http" => ["header" => "Authorization: Basic " . base64_encode("$username:$password") , "Connection: close\r\n", ], ]);
- // ** Katrin numbers referring to IE electrode segments ** //
- $relationKatrinNumbers = array(
- array( // 22 rows: 2x11 electrode rings (inner+outer)
- "436-EEL-0-0001-0001", // WestRing 02 outer
- "436-EEL-0-0001-0101", // WestRing 02 inner
- "436-EEL-0-0001-0201", // WestRing 03 outer
- "436-EEL-0-0001-0301", // WestRing 03 inner
- "436-EEL-0-0001-0401", // WestRing 04 outer
- "436-EEL-0-0001-0501", // WestRing 04 inner
- "436-EEL-0-0001-0601", // WestRing 05 outer
- "436-EEL-0-0001-0701", // WestRing 05 inner
- "436-EEL-0-0001-0801", // WestRing 06 outer
- "436-EEL-0-0001-0901", // WestRing 06 inner
- "436-EEL-0-0001-1001", // WestRing 07-11 outer
- "436-EEL-0-0001-1101", // WestRing 07-11 inner
- "436-EEL-0-0001-1201", // WestRing 12 outer
- "436-EEL-0-0001-1301", // WestRing 12 inner
- "436-EEL-0-0001-1401", // WestRing 13 outer
- "436-EEL-0-0001-1501", // WestRing 13 inner
- "436-EEL-0-0001-1601", // WestRing 14 outer
- "436-EEL-0-0001-1701", // WestRing 14 inner
- "436-EEL-0-0001-1801", // WestRing 15 outer
- "436-EEL-0-0001-1901", // WestRing 15 inner
- "436-EEL-0-0001-2001", // WestRing 16 outer
- "436-EEL-0-0001-2101", // WestRing 16 inner
- // ^............. means this is a HV relation number (9)
- // ^^........... means ring index (2..16)
- // ^.......... means outer (=0) or inner (=1) layer
- ) ,
- array( // 22 rows: 2x11 electrode rings (inner+outer)
- "436-EEL-0-0002-0001", // EastRing 02 outer
- "436-EEL-0-0002-0101", // EastRing 02 inner
- "436-EEL-0-0002-0201", // EastRing 03 outer
- "436-EEL-0-0002-0301", // EastRing 03 inner
- "436-EEL-0-0002-0401", // EastRing 04 outer
- "436-EEL-0-0002-0501", // EastRing 04 inner
- "436-EEL-0-0002-0601", // EastRing 05 outer
- "436-EEL-0-0002-0701", // EastRing 05 inner
- "436-EEL-0-0002-0801", // EastRing 06 outer
- "436-EEL-0-0002-0901", // EastRing 06 inner
- "436-EEL-0-0002-1001", // EastRing 07-11 outer
- "436-EEL-0-0002-1101", // EastRing 07-11 inner
- "436-EEL-0-0002-1201", // EastRing 12 outer
- "436-EEL-0-0002-1301", // EastRing 12 inner
- "436-EEL-0-0002-1401", // EastRing 13 outer
- "436-EEL-0-0002-1501", // EastRing 13 inner
- "436-EEL-0-0002-1601", // EastRing 14 outer
- "436-EEL-0-0002-1701", // EastRing 14 inner
- "436-EEL-0-0002-1801", // EastRing 15 outer
- "436-EEL-0-0002-1901", // EastRing 15 inner
- "436-EEL-0-0002-2001", // EastRing 16 outer
- "436-EEL-0-0002-2101", // EastRing 16 inner
- // ^............ means this is a HV relation number (8 = east)
- // ^........... means outer (=0) or inner (=1) layer
- // ^.......... means source (=0) or detector (=1) side
- // ^......... means ring index (0..6), counted from central segment
- ) ,
- );
- // ** Katrin numbers referring to IE power supply channels ** //
- $relationTargetNumbers = array(
- array( // IE offset channels West side
- // 22 rows: 3x7 offset channels + IE common
- "436-EHV-0-0003-0102", // WestCh 01
- "436-EHV-0-0003-0202", // WestCh 02
- "436-EHV-0-0003-0302", // WestCh 03
- "436-EHV-0-0003-0402", // WestCh 04
- "436-EHV-0-0003-0502", // WestCh 05
- "436-EHV-0-0003-0602", // WestCh 06
- "436-EHV-0-0003-0702", // WestCh 07
- "436-EHV-0-0005-0102", // WestCh 08
- "436-EHV-0-0005-0202", // WestCh 09
- "436-EHV-0-0005-0302", // WestCh 10
- "436-EHV-0-0005-0402", // WestCh 11
- "436-EHV-0-0005-0502", // WestCh 12
- "436-EHV-0-0005-0602", // WestCh 13
- "436-EHV-0-0005-0702", // WestCh 14
- "436-EHV-0-0007-0102", // WestCh 15
- "436-EHV-0-0007-0202", // WestCh 16
- "436-EHV-0-0007-0302", // WestCh 17
- "436-EHV-0-0007-0402", // WestCh 18
- "436-EHV-0-0007-0502", // WestCh 19
- "436-EHV-0-0007-0602", // WestCh 20
- "436-EHV-0-0007-0702", // WestCh 21
- "436-EHV-0-0002-0101", // IE dipole west
- "436-EHV-0-1003-0002", // IE common
- ) ,
- array( // IE offset channels East side
- // 22 rows: 3x7 offset channels + IE common
- "436-EHV-0-0004-0102", // EastCh 01
- "436-EHV-0-0004-0202", // EastCh 02
- "436-EHV-0-0004-0302", // EastCh 03
- "436-EHV-0-0004-0402", // EastCh 04
- "436-EHV-0-0004-0502", // EastCh 05
- "436-EHV-0-0004-0602", // EastCh 06
- "436-EHV-0-0004-0702", // EastCh 07
- "436-EHV-0-0006-0102", // EastCh 08
- "436-EHV-0-0006-0202", // EastCh 09
- "436-EHV-0-0006-0302", // EastCh 10
- "436-EHV-0-0006-0402", // EastCh 11
- "436-EHV-0-0006-0502", // EastCh 12
- "436-EHV-0-0006-0602", // EastCh 13
- "436-EHV-0-0006-0702", // EastCh 14
- "436-EHV-0-0008-0102", // EastCh 15
- "436-EHV-0-0008-0202", // EastCh 16
- "436-EHV-0-0008-0302", // EastCh 17
- "436-EHV-0-0008-0402", // EastCh 18
- "436-EHV-0-0008-0502", // EastCh 19
- "436-EHV-0-0008-0602", // EastCh 20
- "436-EHV-0-0008-0702", // EastCh 21
- "436-EHV-0-0002-0102", // IE dipole east
- "436-EHV-0-1003-0002", // IE common
- ) ,
- );
- function flatten(array $array) {
- $return = array();
- array_walk_recursive($array, function ($a) use (&$return) {
- $return[] = $a;
- });
- return $return;
- }
- // set time zone to local German time
- date_default_timezone_set("Europe/Berlin");
- $counter = 0;
- $calltime = time();
- do {
- $errorcount = 0;
- $errormessage = "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>";
- $starttime = time();
- /// TODO (1) get current relations for HV rings (KATRIN number mapping)
- /// TODO (2) write channel mapping to file used by monitor ("patchpanel/data/activeIEconfig.txt")
- /// => (a) the file contains one line per IE channel (44 total: 11 rings x inner/outer x west/east)
- /// => (b) each line contains the power supply index (values 0 .. 21; 22 = through IE)
- /// TODO (3) resolve ADEI channels for each relation (?)
- /// TODO (4) update ADEIchannels array (?)
- //echo "Polling database." . PHP_EOL;
- // new kdb.kaas.kit.edu added and optimized readout parameters
- $fileip = file_get_contents("https://kdb.kaas.kit.edu/kdb-api.fcgi/json?relations&kn=" . join(",", flatten($relationKatrinNumbers)) . "&only_recent=1", false, $context);
- //show_status($id+1,sizeof($adeiChannel));
- if (substr($fileip, 0, 5) == "ERROR") {
- $errorcount++;
- $errormessage = $errormessage . "Error querying database<br>";
- }
- if ($errorcount > 0) {
- echo $errormessage;
- }
- $json = json_decode($fileip, true);
- //echo "Database result (JSON):" . PHP_EOL;
- //var_dump($json);
- $patchpanelMap = array();
- if ($json && $json["result"]) {
- foreach ($json["result"]["Relation"] as $kn => $data) {
- $target = $data["AssociateNumber"];
- $patchpanelMap[$kn] = $target;
- echo "\t" . $kn . " => " . $target . PHP_EOL;
- }
- }
- // increse loop counter
- $counter++;
- $stoptime = time();
- $wait_till = $starttime + 11;
- if ($stoptime - $starttime > 10) {
- $errormessage .= "ERROR: delayed readout " . ($stoptime - $starttime) . " s ";
- $errorcount++;
- }
- //echo "Writing patchpanel database data to file." . PHP_EOL;
- $strFileContent = "";
- assert( sizeof($relationKatrinNumbers) == 2 );
- assert( sizeof($relationTargetNumbers) == 2 );
- for ($eastwest = 0; $eastwest < 2; $eastwest++) {
- // loop over each half of the array
- assert( sizeof($relationKatrinNumbers[$eastwest]) == 22 );
- assert( sizeof($relationTargetNumbers[$eastwest]) >= 22 );
- foreach ($relationKatrinNumbers[$eastwest] as $kn) {
- $index = 22; // default to IE common
- $target = "(default)";
- if (array_key_exists($kn, $patchpanelMap)) {
- $target = $patchpanelMap[$kn];
- $index = array_search($target, $relationTargetNumbers[$eastwest]);
- if ($index > 22)
- $index = 22;
- }
- echo "\t" . $kn . " => " . $target . " [" . $index . "]" . PHP_EOL;
- $strFileContent .= $index . "\n";
- }
- }
- // write ADEI data to file
- if (file_exists("patchpanel/data/activeIEconfig.txt")) {
- rename("patchpanel/data/activeIEconfig.txt", "patchpanel/data/activeIEconfig.txt.bak");
- }
- $file_w = fopen("patchpanel/data/activeIEconfig.txt", "w+");
- //sleep(5);
- fwrite($file_w, $strFileContent);
- fclose($file_w);
- // write log file
- $log_message = "";
- $log_message = date(DATE_RFC850) . ": database polled: loop " . $counter;
- $log_message .= ", poll time " . ($stoptime - $starttime) . " s";
- if ($stoptime - $starttime > 10) {
- $log_message .= ", delayed readout";
- }
- $log_message .= PHP_EOL;
- $file_log = fopen("logs/poll_database.log", "a");
- fwrite($file_log, $log_message);
- fclose($file_log);
- //echo "Loop ".$counter." done.".PHP_EOL;
- if ($wait_till <= $stoptime) {
- sleep(3);
- }
- else {
- time_sleep_until($wait_till);
- }
- } while ($counter < 10 && time() < $calltime + 51);
- //echo "All loops done.".PHP_EOL;
- ?>
|