array(
"title" => "server",
"label" => "Server",
"mysql" => "`url`"
),
"country" => array(
"title" => "country",
"label" => "Country",
"mysql" => "`l_ms`.`country_code`"
),
"isos" => array(
"title" => "wether isos are available",
"label" => "ISOs",
"mysql" => "`l_ms`.`isos`"
),
"protocols" => array(
"title" => "available protocols",
"label" => "Protocols",
"mysql" => "`protocols`"
)
);
$query =
"SELECT " .
"GROUP_CONCAT(`l_ms`.`protocol`) AS `protocols`," .
"SUBSTRING(`l_ms`.`url`,LENGTH(`l_ms`.`protocol`)+4) AS `url`," .
"`l_ms`.`country`," .
"`l_ms`.`country_code`," .
"`l_ms`.`isos`," .
"`l_ms`.`ipv4`," .
"`l_ms`.`ipv6`" .
" FROM (" .
"SELECT " .
"`mirror_statuses`.`url`," .
"MAX(`mirror_statuses`.`start`) AS `start`" .
" FROM `mirror_statuses`" .
" WHERE `mirror_statuses`.`start` > UNIX_TIMESTAMP(NOW())-" . $cutoff .
" GROUP BY `mirror_statuses`.`url`" .
") AS `ls`" .
" JOIN `mirror_statuses` AS `l_ms`" .
" ON `ls`.`url`=`l_ms`.`url`" .
" AND `ls`.`start`=`l_ms`.`start`" .
" GROUP BY `url`" .
" ORDER BY ";
if (array_key_exists("sort", $_GET)) {
if (isset($sorts[$_GET["sort"]]["mysql"]))
$query .= $sorts[$_GET["sort"]]["mysql"] . ",";
elseif (isset($sorts[substr($_GET["sort"],1)]["mysql"]))
$query .= $sorts[substr($_GET["sort"],1)]["mysql"] . " DESC,";
}
$query .= "`url`";
$result = mysql_run_query(
$query
);
$last_check = 0;
$max_count = 0;
while($row = $result->fetch_assoc())
$rows[] = $row;
print_header("Mirror Overview");
?>
Mirror Overview
$sort) {
print " \n";
print " ".$sort["label"]."\n";
print " | \n";
}
?>
\n";
print " \n";
print " " . $row["url"] . "\n";
print " | \n";
print " \n";
print " \n";
print " \n";
print " " . $row["country"] . "\n";
print " | \n";
print " \n";
if ($row["isos"])
print " Yes\n";
else
print " No\n";
print " | \n";
print " \n";
print " " . $row["protocols"] . "\n";
print " | \n";
print " \n";
if ($oddity == "odd")
$oddity = "even";
else
$oddity = "odd";
}
?>
UNIX_TIMESTAMP(NOW()) - 3600)) AS `recently_active`," .
"AVG(IF(`a_ms`.`active`,1,0)) AS `completion_pct`," .
"COUNT(1) AS `count`" .
" FROM (" .
"SELECT " .
"`mirror_statuses`.`url`," .
"MAX(`mirror_statuses`.`start`) AS `start`" .
" FROM `mirror_statuses`" .
" WHERE `mirror_statuses`.`start` > UNIX_TIMESTAMP(NOW())-" . $cutoff .
" GROUP BY `mirror_statuses`.`url`" .
") AS `ls`" .
" JOIN `mirror_statuses` AS `l_ms`" .
" ON `ls`.`url`=`l_ms`.`url`" .
" AND `ls`.`start`=`l_ms`.`start`" .
" JOIN `mirror_statuses` AS `a_ms`" .
" ON `a_ms`.`url`=`l_ms`.`url`" .
" AND `a_ms`.`start` > UNIX_TIMESTAMP(NOW())-" . $cutoff .
" GROUP BY `l_ms`.`id`"
);
$last_check = 0;
$max_count = 0;
while($row = $result->fetch_assoc()) {
foreach (array(
"start",
"delay",
"duration_avg",
"duration_stddev",
"completion_pct",
"count",
"isos",
"ipv4",
"ipv6",
"active",
"recently_active"
) as $key)
$row[$key] = floatval($row[$key]);
$row["last_sync"] = gmdate("Y-m-d\TH:i:s\Z", $row["last_sync"]);
$row["score"] =
($row["delay"] + $row["duration_avg"] + $row["duration_stddev"]) / $row["completion_pct"];
$urls[] = $row;
$last_check = max ($row["start"], $last_check);
$max_count = max ($row["count"], $max_count);
}
$content = array(
"cutoff" => $cutoff,
"check_frequency" => $cutoff/$max_count,
"num_checks" => $max_count,
"last_check" => gmdate("Y-m-d\TH:i:s.v\Z",$last_check), //"2018-06-15T07:25:06.741Z",
// "version" => 3,
"urls" => $urls
);
if (count($uri_parts) == 1) { // human readable
// TODO
header('HTTP/1.1 303 See Other');
header('Location: /mirrors/status/json/');
die();
} // human readable
if (!export_as_requested(
array(
"json" => $content,
"tsv" => $urls
),
$uri_parts[1]
)) {
throw_http_error(
406,
'Not Acceptable',
implode(
"
\n",
array_merge(
array(
'Unknown output format.',
'Accepted:'
),
array_map(
function($type){
return '' . $type . '';
},
array('json', 'tsv')
)
)
)
);
}
die();
} // status
throw_http_error(501, "Not Implemented");