summaryrefslogtreecommitdiffstats
path: root/mirrorstatus.php
diff options
context:
space:
mode:
authorSlávek Banko <[email protected]>2019-10-27 20:40:05 +0100
committerSlávek Banko <[email protected]>2019-10-27 20:40:05 +0100
commit1890f10c40472c3600b10a4d8c86edb3c9ae3bf3 (patch)
tree5220f65da403eab8fd1ed33fafb25a0dba5b3789 /mirrorstatus.php
parenta4e890eac03cfeb782ce2133e9cec7fe90271873 (diff)
downloadwebsite-core-1890f10c40472c3600b10a4d8c86edb3c9ae3bf3.tar.gz
website-core-1890f10c40472c3600b10a4d8c86edb3c9ae3bf3.zip
Add a page to check and list active mirrors.
Signed-off-by: Slávek Banko <[email protected]>
Diffstat (limited to 'mirrorstatus.php')
-rw-r--r--mirrorstatus.php120
1 files changed, 120 insertions, 0 deletions
diff --git a/mirrorstatus.php b/mirrorstatus.php
new file mode 100644
index 0000000..b248140
--- /dev/null
+++ b/mirrorstatus.php
@@ -0,0 +1,120 @@
+<?php
+ if(!isset($_GET['mr']))
+ {
+ include("tde-head-and-foot.php");
+ doHeader("Active TDE Mirrors", "Developlment", "TDE Team");
+?>
+
+<p>Please note that this list may change from time to time as mirrors are added and removed.</p>
+
+<table cellpadding="4">
+<?php
+ }
+ else
+ {
+ header('Content-Type: text/plain');
+ }
+
+ $mirrorsJson = file_get_contents("mirrors.json");
+ $mirrors = json_decode($mirrorsJson, true);
+
+ $statusType = array(
+ "active" => "green",
+ "inaccessible" => "red",
+ "outdated" => "orange",
+ "unknown" => "gray",
+ );
+
+ $redis = new Redis();
+ $redis->connect('127.0.0.1', 6379, 2);
+ foreach( $mirrors as $mirrorName => $mirrorInfo )
+ {
+ $savedResult = $redis->isConnected() ? $redis->get('mirrorStatus-'.$mirrorName) : false;
+ if($savedResult)
+ {
+ $mirrors[$mirrorName]['synctime'] = $savedResult;
+ }
+ else
+ {
+ $cs = curl_init();
+ curl_setopt( $cs, CURLOPT_URL, $mirrorInfo['url'].'-synctime' );
+ curl_setopt( $cs, CURLOPT_TIMEOUT, 3 );
+ curl_setopt( $cs, CURLOPT_HEADER, true );
+ curl_setopt( $cs, CURLOPT_FOLLOWLOCATION, true );
+ curl_setopt( $cs, CURLOPT_RETURNTRANSFER, true );
+ $ret = curl_exec( $cs );
+ curl_close( $cs );
+ if(!empty( $ret ))
+ {
+ if(!preg_match('#(^|\n)HTTP/1.1 200 OK#', $ret))
+ {
+ $mirrors[$mirrorName]['synctime'] = '0';
+ }
+ else
+ {
+ $mirrors[$mirrorName]['synctime'] = strtotime(preg_replace( "#.*\r\n#", '', $ret));
+ }
+ }
+ else
+ {
+ $mirrors[$mirrorName]['synctime'] = '-1';
+ }
+ if($redis->isConnected())
+ {
+ $redis->setEx( 'mirrorStatus-'.$mirrorName,
+ $mirrors[$mirrorName]['synctime'] > 0 ? 1800 : 300,
+ $mirrors[$mirrorName]['synctime'] );
+ }
+ }
+ }
+
+ foreach( $mirrors as $mirrorName => $mirrorInfo )
+ {
+ if( $mirrorInfo['synctime'] < 0 )
+ {
+ $mirrorStatus = 'inaccessible';
+ }
+ if( $mirrorInfo['synctime'] == 0 ||
+ $mirrors['master']['synctime'] == 0 )
+ {
+ $mirrorStatus = 'unknown';
+ }
+ if( $mirrorInfo['synctime'] > 0 )
+ {
+ $mirrorStatus = ( abs($mirrorInfo['synctime'] -
+ $mirrors['master']['synctime'])
+ > (60*60*30) /* 30 hours */
+ ? 'outdated' : 'active' );
+ }
+ if(!isset($_GET['mr']))
+ {
+ if(isset($statusType[$mirrorStatus]))
+ {
+ $mirrorStatus = ("<font color=\"".$statusType[$mirrorStatus]."\">".
+ $mirrorStatus."</font>");
+ }
+ echo( "<tr valign=\"top\">\n".
+ "<td><b>".$mirrorInfo['descr'].": </b>\n".
+ "<br/><a href=\"".$mirrorInfo['url']."\">".$mirrorInfo['url']."</a></td>\n".
+ "<td><b>".$mirrorStatus."</b></td>\n".
+ "</tr>\n");
+ }
+ else
+ {
+ if($mirrorStatus == 'active')
+ {
+ echo( $mirrorInfo['url']."\n" );
+ }
+ }
+ }
+ $redis->close();
+
+ if(!isset($_GET['mr']))
+ {
+?>
+</table>
+
+<?php
+ doFooter();
+ }
+?>