Please note that this list may change from time to time as mirrors are added and removed.
"green",
"inaccessible" => "red",
"outdated" => "orange",
"unknown" => "gray",
);
$redis = new Redis();
$redis->connect('127.0.0.1', 6379, 2);
$ch = array();
$cmh = curl_multi_init();
foreach( $mirrors as $mirrorName => $mirrorInfo )
{
$savedResult = $redis->isConnected() ? $redis->get('mirrorStatus-'.$mirrorName) : false;
if($savedResult)
{
$mirrors[$mirrorName]['synctime'] = $savedResult;
}
else
{
$ch[$mirrorName] = curl_init();
curl_setopt( $ch[$mirrorName], CURLOPT_URL, $mirrorInfo['url'].'-synctime' );
curl_setopt( $ch[$mirrorName], CURLOPT_TIMEOUT, 10 );
curl_setopt( $ch[$mirrorName], CURLOPT_HEADER, true );
curl_setopt( $ch[$mirrorName], CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch[$mirrorName], CURLOPT_RETURNTRANSFER, true );
curl_multi_add_handle( $cmh, $ch[$mirrorName] );
}
}
if(!empty($ch))
{
$running = null;
do
{
curl_multi_exec($cmh, $running);
}
while($running);
foreach( $ch as $mirrorName => $cs )
{
$ret = curl_multi_getcontent( $cs );
curl_multi_remove_handle( $cmh, $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'] );
}
}
}
curl_multi_close($cmh);
$redis->close();
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 = ("".
$mirrorStatus."");
}
echo( "\n".
"".$mirrorInfo['descr'].": \n".
" ".$mirrorInfo['url']." | \n".
"".$mirrorStatus." | \n".
"
\n");
}
else
{
if($mirrorStatus == 'active')
{
echo( $mirrorInfo['url']."\n" );
}
}
}
if(!isset($_GET['mr']))
{
?>