diff options
Diffstat (limited to 'check.php')
-rwxr-xr-x | check.php | 193 |
1 files changed, 148 insertions, 45 deletions
@@ -35,17 +35,18 @@ if ($cli) { <?php } $repos = [ + 'enterprise/10' => 'Enterprise Linux 10', + 'enterprise/9' => 'Enterprise Linux 9', 'enterprise/8' => 'Enterprise Linux 8', - 'enterprise/7' => 'Enterprise Linux 7', - 'enterprise/6' => 'Enterprise Linux 6', - 'fedora/31' => 'Fedora 31', - 'fedora/30' => 'Fedora 30', - 'fedora/29' => 'Fedora 29', + 'fedora/41' => 'Fedora 41', + 'fedora/40' => 'Fedora 40', + 'fedora/39' => 'Fedora 39', ]; $subs = [ + 'modular', 'remi', + 'safe', 'test', - 'php56', ]; $archs = [ 'i386', @@ -53,69 +54,85 @@ $archs = [ ]; $mirrors = [ - 'http://remi.mirrors.arminco.com/', - 'http://remi.conetix.com.au/', 'http://mirrors.neterra.net/remi/', - 'http://remi.xpg.com.br/', 'http://remi.schlundtech.de/', 'http://mirror.cedia.org.ec/remi/', - 'http://mirror.uta.edu.ec/remi/', 'http://ftp.arnes.si/mirrors/remi/', 'http://mirrors.thzhost.com/remi/', - 'http://mirrors.mediatemple.net/remi/', 'http://fr2.rpmfind.net/linux/remi/', - 'http://mirror.awanti.com/remi/', 'http://mirrors.netix.net/remi/', 'http://remi.mirrors.cu.be/', - 'http://mirror.innosol.asia/remi/', 'http://mirror.neolabs.kz/remi/', - 'http://mirror.veriteknik.net.tr/remi/', 'https://remi.mirror.ate.info/', 'https://mirrors.tuna.tsinghua.edu.cn/remi/', - 'http://mirror.23media.de/remi/', - 'http://repo1.dal.innoscale.net/remi/', - 'http://repo1.sea.innoscale.net/remi/', - 'http://repo1.ash.innoscale.net/remi/', - 'http://mirror.bebout.net/remi/', + 'https://mirror.23m.com/remi/', 'https://mirror.oxilion.nl/remi/', - 'https://remi.mirror.wearetriple.com/', - 'http://mirror.upb.edu.co/remi/', 'https://mirrors.uni-ruse.bg/remi/', 'https://remi.mirror.karneval.cz/', 'https://mirror.netsite.dk/remi/', - 'http://mirror.nsw.coloau.com.au/remi/', 'http://mirror.team-cymru.com/remi/', - 'http://mirror.reconn.ru/remi/', - 'http://mirrors.ukfast.co.uk/sites/remi/', 'https://mirror.netweaver.uk/remi/', - 'http://mirror.xeonbd.com/remi/', - 'http://mirrors.mivocloud.com/remi/', 'http://ftp.riken.jp/Linux/remi/', 'https://mir01.syntis.net/remirepo/', - 'http://mirrors.bytes.ua/remi/', - 'https://mirror.hoster.kz/remi/', - 'http://ap.stykers.moe/remi/', + 'http://mirror.hoster.kz/remi/', 'http://remirepo.reloumirrors.net/', 'https://mirror.pit.teraswitch.com/remi/', - 'https://mirror.sjc02.svwh.net/remi/', - 'https://mirror.serverion.com/remi/', 'http://remi.mirror.liteserver.nl/', 'https://mirror.marwan.ma/remi/', - 'https://remi.mivzakim.net/', 'https://remi.mirror.digitalpacific.com.au/', - 'https://remi.srv.magticom.ge/', 'http://merlin.fit.vutbr.cz/mirrors/remi/', - 'https://mirror.telkomuniversity.ac.id/remi/', 'https://mirrors.ptisp.pt/remi/', 'https://mirrors.chroot.ro/remi/', 'https://mirrors.upr.edu/remi/', 'http://mirror.digitalnova.at/remi/', - 'http://mirror.yer.az/remi/', 'https://mirror.dk.team.blue/remi/', 'https://mirror.dogado.de/remi/', 'https://mirror.docker.ru/remi/', + 'https://repo.extreme-ix.org/remi/', + 'https://mirror.mangohost.net/remi/', + 'https://cdn.fjordos.no/remi/', + 'https://mirror.fjordos.no/remi/', + 'https://muug.ca/mirror/remi/', + 'https://mirror.netzwerge.de/remi/', + 'https://pit.mirror.jurassicinnovations.com/remi/', + 'http://mirror.yer.az/remi/', + 'https://mirror.raiolanetworks.com/remi/', // 2025-01-08 + 'https://remi.mirror.wearetriple.com/', // 2025-01-10 + 'https://mirror.geo.yer.cloud/remi/', // 2025-01-07 + 'http://mirrors.bytes.ua/remi/', // 2025-01-13 + 'https://remi.mivzakim.net/', // 2025-01-13 + 'http://repo1.ash.innoscale.net/remi/', // 2025-01-13 + 'https://bd.mirror.vanehost.com/Remi/', // 2025-01-17 + 'http://mirrors.ukfast.co.uk/sites/remi/', // 2025-01-28 / 2025-01-30 +]; +$testing = [ + 'http://remi.conetix.com.au/', // 2025-01-22 + 'https://mirror.usi.edu/pub/remi/', // 2024-04-03 / 2025-01-29 +]; +$disabled = [ + 'https://repo1.vetta.net.nz/remi/', // 2025-01-17 (too slow) + 'http://mirror.xeonbd.com/remi/', + 'https://mirror.telkomuniversity.ac.id/remi/', + 'http://mirror.uta.edu.ec/remi/', + 'http://repo1.dal.innoscale.net/remi/', + 'http://repo1.sea.innoscale.net/remi/', ]; $deprecated = [ + 'http://mirror.awanti.com/remi/', // 2025-01-08 + 'https://remi.srv.magticom.ge/', + 'https://mirror.sjc02.svwh.net/remi/', + 'http://mirror.upb.edu.co/remi/', + 'http://mirror.veriteknik.net.tr/remi/', + 'http://remi.mirrors.arminco.com/', + 'http://mirror.reconn.ru/remi/', + 'https://mirror.serverion.com/remi/', + 'http://mirror.innosol.asia/remi/', + 'http://mirror.nsw.coloau.com.au/remi/', + 'http://mirror.bebout.net/remi/', + 'http://mirrors.mediatemple.net/remi/', + 'http://remi.xpg.com.br/', + 'http://ap.stykers.moe/remi/', + 'http://mirrors.mivocloud.com/remi/', 'http://nl.mirror.babylon.network/remi/', 'http://fr.mirror.babylon.network/remi/', 'http://ca.mirror.babylon.network/remi/', @@ -140,7 +157,7 @@ $deprecated = [ function getRepoTime($uri) { $ctx = stream_context_create([ 'http' => [ - 'timeout' => 4, + 'timeout' => 7, ] ]); $txt = @file_get_contents($uri . '/repodata/repomd.xml', false, $ctx); @@ -153,10 +170,35 @@ function getRepoTime($uri) { } return ERR_CONTENT; } + +function delta($ref, $loc) { + $d = ($ref > $loc ? $ref - $loc : $loc - $ref); + if ($d >= 60) { + $d /= 60; + if ($d >= 60) { + $d /= 60; + if ($d >= 24) { + $d /= 24; + $unit = 'day'; + } else { + $unit = 'hour'; + } + } else { + $unit = 'minute'; + } + } else { + $unit = 'second'; + } + if ($d > 1) { + $unit .= 's'; + } + return sprintf("%s :%3d %s ago", date('r', $loc), $d, $unit); +} + if (isset($_GET['mirror']) && isset($repos[$_GET['mirror']])) { $path = $_GET['mirror']; } else { - $path = 'enterprise/8'; + $path = 'enterprise/9'; } if (isset($_GET['repo']) && in_array($_GET['repo'], $subs)) { $repo = $_GET['repo']; @@ -168,6 +210,18 @@ if (isset($_GET['arch']) && in_array($_GET['arch'], $archs)) { } else { $arch = 'x86_64'; } +if (isset($_SERVER['argv'][1]) && isset($repos[$_SERVER['argv'][1]])) { + $path = $_SERVER['argv'][1]; + array_shift($_SERVER['argv']); +} +if (isset($_SERVER['argv'][1]) && in_array($_SERVER['argv'][1], $subs)) { + $repo = $_SERVER['argv'][1]; + array_shift($_SERVER['argv']); +} +if (isset($_SERVER['argv'][1]) && in_array($_SERVER['argv'][1], $archs)) { + $arch = $_SERVER['argv'][1]; + array_shift($_SERVER['argv']); +} $name = $repos[$path]; $full = "$path/$repo/$arch"; @@ -185,12 +239,47 @@ if (!$cli) { $pids = array(); $ref = getRepoTime($full); if ($ref) { - printf(($cli ? "Check %d mirrors of %s (%s)\n" : "<h3>%s - %s</h3>\n"), count($mirrors), $name, date('r', $ref)); if (!$cli) echo "<ul class='pkglist'>\n"; - foreach ($mirrors as $mirror) { - if ($_SERVER['argc']>1 && !strpos($mirror, $_SERVER['argv'][1])) { - continue; + if (isset($_SERVER['argv'][1])) { + switch ($_SERVER['argv'][1]) { + case 'active': + $tocheck = $mirrors; + break; + case 'testing': + $tocheck = $testing; + break; + case 'disabled': + $tocheck = $disabled; + break; + case 'deprecated': + $tocheck = $deprecated; + break; + default: + $tocheck = []; + foreach ($mirrors as $mirror) { + if (preg_match('|'.$_SERVER['argv'][1].'|', $mirror)) { + $tocheck[] = $mirror; + } + } + foreach ($mirrors as $testing) { + if (preg_match('|'.$_SERVER['argv'][1].'|', $mirror)) { + $tocheck[] = $mirror; + } + } + foreach ($mirrors as $disabled) { + if (preg_match('|'.$_SERVER['argv'][1].'|', $mirror)) { + $tocheck[] = $mirror; + } + } + if (empty($tocheck)) { + $tocheck[] = $_SERVER['argv'][1]; + } } + } else { + $tocheck = array_merge($mirrors, $testing); + } + printf(($cli ? "Check %d mirror(s) of %s (%s, %s)\n" : "<h3>%s - %s</h3>\n"), count($tocheck), $name, $full, date('r', $ref)); + foreach ($tocheck as $mirror) { if ($cli) { $pid = pcntl_fork(); if ($pid<0) { @@ -206,12 +295,14 @@ if ($ref) { printf("%50.50s : ** Corrupted **\n", $mirror); } else if ($ref == $loc) { printf("%50.50s : Ok\n", $mirror); + exit(0); } else if ($loc) { - printf("%50.50s : %s\n", $mirror, date('r', $loc)); + printf("%50.50s : %s\n", $mirror, delta($ref, $loc)); + exit(1); } else { printf("%50.50s : N/A\n", $mirror); } - break; + exit(2); } continue; } @@ -232,7 +323,8 @@ if ($ref) { } } if ($cli) { - $nb=count($pids); + $nb = count($pids); + $ok = $lack = 0; while (count($pids)) { if (posix_isatty(STDOUT)) { printf("Wait %d\r", count($pids)); @@ -242,10 +334,21 @@ if ($ref) { die("Cound not wait\n"); exit (1); } else { + switch (pcntl_wexitstatus($status)) { + case 0: + $ok++; + break; + case 1: + $lack++; + break; + } unset($pids[$pid]); } } - if ($nb) printf("%d mirrors checked.\n", $nb); + if ($nb) { + printf("%3d mirrors checked on %s,\n%3d are OK\t(%d%%)\n%3d are late\t(%d%%)\n%3d are KO.\n", + $nb, date("r"), $ok, $ok*100/$nb, $lack, $lack*100/$nb, $nb-$ok-$lack); + } } else { echo "</ul>\n"; } |