aboutsummaryrefslogtreecommitdiffstats
path: root/modules/mga-mirrors/templates
diff options
context:
space:
mode:
authorOlivier Blin <dev@blino.org>2017-04-08 17:53:40 +0200
committerOlivier Blin <dev@blino.org>2017-04-08 17:53:40 +0200
commit4f9d0b3cd9cb0dd4ce7fe9816415a57631019c8b (patch)
tree43c9a3172296d1e4f7f76be04521d1ff00ce6642 /modules/mga-mirrors/templates
parent1b7ff1fc5804532ccfe815a27c71feca68b7bf6b (diff)
downloadpuppet-4f9d0b3cd9cb0dd4ce7fe9816415a57631019c8b.tar
puppet-4f9d0b3cd9cb0dd4ce7fe9816415a57631019c8b.tar.gz
puppet-4f9d0b3cd9cb0dd4ce7fe9816415a57631019c8b.tar.bz2
puppet-4f9d0b3cd9cb0dd4ce7fe9816415a57631019c8b.tar.xz
puppet-4f9d0b3cd9cb0dd4ce7fe9816415a57631019c8b.zip
mga-mirrors: check_mirrors_status should be in files/
Diffstat (limited to 'modules/mga-mirrors/templates')
-rwxr-xr-xmodules/mga-mirrors/templates/check_mirrors_status223
1 files changed, 0 insertions, 223 deletions
diff --git a/modules/mga-mirrors/templates/check_mirrors_status b/modules/mga-mirrors/templates/check_mirrors_status
deleted file mode 100755
index 06a17c2a..00000000
--- a/modules/mga-mirrors/templates/check_mirrors_status
+++ /dev/null
@@ -1,223 +0,0 @@
-#!/usr/bin/ruby
-
-require 'date'
-require 'net/http'
-require 'optparse'
-require 'thread'
-require 'uri'
-
-def get_dates(base, distros, archs, optional=true)
- r = {}
- distros.each{|d|
- r[d] = {}
- archs.each{|a|
- next if d == '5' and a == 'armv5tl'
- begin
- r[d][a] = get_date(base, d, a)
- rescue Timeout::Error, ArgumentError, NoMethodError, Errno::EHOSTUNREACH => e
- if !optional then
- raise
- end
- end
- }
- }
- r
-end
-
-def get_mirrors
- # TODO Get it from the DB
- mirrors = []
- fetch_url("http://mirrors.mageia.org/").each_line{|l|
- next unless l =~ /http:.*>http/
- mirrors << l.sub(/<a href="(http[^"]*)".*\n/, '\1')
- }
- mirrors
-end
-
-def fetch_url(url, redirect_limit = 3)
- return if redirect_limit < 0
- if url =~ /^\// then
- open(url){|f|
- return f.read
- }
- else
- uri = URI.parse(url)
- http = Net::HTTP.new(uri.host, uri.port)
- http.open_timeout = 2
- http.read_timeout = 2
- # Ruby 1.8.7 doesn't set a default User-Agent which causes at
- # least one mirror to return 403
- response = http.get(uri.path, {'User-Agent' => 'check_mirrors'})
- case response
- when Net::HTTPSuccess then
- return response.body
- when Net::HTTPRedirection then
- location = response['location']
- # Make location absolute if it was not
- if location =~ /:\/\// then
- fetch_url(location, redirect_limit - 1)
- else
- uri.path = location
- fetch_url(uri.to_s, redirect_limit - 1)
- end
- end
- end
-end
-
-def parse_version(version)
- date = version.sub(/.* (........ ..:..)$/, '\1').rstrip
- DateTime.strptime(date, '%Y%m%d %H:%M')
-end
-
-def get_date(url, distrib, arch)
- return parse_version(fetch_url("#{url}/distrib/#{distrib}/#{arch}/VERSION"))
-end
-
-def print_output(distros, archs, mirrors, ref_times, times)
- puts "<html>
-<style>
-td.broken {background-color:#FF0033;}
-td.bad {background-color:#FF9933;}
-td.almost {background-color:#CCFF66;}
-td.ok {background-color:#00FF66;}
-
-td {text-align:center;}
-td.name {text-align:left;}
-
-td.sep {width:12px;}
-
-th {background-color:#EEEEEE;}
-</style>
-<body>"
- puts "Last checked on #{Time.now.strftime("%F %R")}<br/>"
- puts "<table cellpadding='4px'><tr><td class='ok'>Up to date</td><td class='almost'>Less than 12h old</td><td class='bad'>Less than 2 days old</td><td class='broken'>Old or broken</td></tr></table>"
- puts "<table><thead>"
- puts "<tr><td/>"
- distros.each{|d|
- nb_arches = archs.size
- nb_arches -= 1 if d == '5' # 'armv5tl'
- puts " <td/><th colspan='#{nb_arches}'>#{d}</th>"}
- puts "</tr>"
- puts "<tr><td/>"
- distros.each{|d|
- puts " <td class='sep' />"
- archs.each{|a|
- next if d == '5' and a == 'armv5tl'
- puts " <th>#{a}</th>"
- }
- }
- puts "</tr></thead>"
- puts "<tbody>"
- puts "<tr><td class='name'>Reference</td>"
- distros.each{|d|
- puts " <td class='sep' />"
- archs.each{|a|
- next if d == '5' and a == 'armv5tl'
- puts " <td>#{ref_times[d][a].strftime("%F %R")}</td>"
- }
- }
- puts "</tr>"
-
- mirrors.each{|u|
- puts "<tr><td class='name'><a href='#{u}'>#{u}</a></td>"
- distros.each{|d|
- puts " <td class='sep' />"
- archs.each{|a|
- next if d == '5' and a == 'armv5tl'
- if times[u][d][a] != nil then
- cls = 'broken'
- diff = ref_times[d][a] - times[u][d][a]
- if diff == 0 then
- cls = 'ok'
- elsif diff < 0.5 then
- cls = 'almost'
- elsif diff < 2 then
- cls = 'bad'
- end
- if cls == 'ok' then
- puts " <td class='#{cls}'>&nbsp;</td>"
- else
- puts " <td class='#{cls}'>#{times[u][d][a].strftime("%F %R")}</td>"
- end
- else
- puts " <td class='broken'>X</td>"
- end
- }
- }
- puts "</tr>"
- }
- puts "</tbody></table>"
- puts "</body></html>"
-end
-
-
-
-# Defaults
-ref = 'http://repository.mageia.org/'
-distros = ['5', 'cauldron']
-archs = ['i586', 'x86_64', 'armv5tl']
-parallel = 8
-
-OptionParser.new {|opts|
- opts.banner = "Usage: #{$0} [options]"
- opts.on("--repository URL",
- "Reference repository. Default: #{ref}") {
- |url| ref = url
- }
- opts.on("--distros x,y,z", Array,
- "List of distributions to check. Default: #{distros}") {
- |list| distros = list
- }
- opts.on("--archs x,y,z", Array,
- "List of architectures to check. Default: #{archs}") {
- |list| archs = list
- }
- opts.on("--parallel n", Integer,
- "Max number of parallel connections. Default: #{parallel}") {
- |n| $parallel = n
- }
- opts.on("--output file",
- "Write output into given file. Default to STDOUT") {
- |f| $stdout.reopen(f, "w")
- }
-}.parse!
-
-# Get dates from the reference repository, and fail if some requested distros
-# or archs are missing
-ref_times = get_dates(ref, distros, archs, false)
-
-# Get the list of mirror URLs to check
-mirrors = get_mirrors
-
-workqueue = Queue.new
-times = {}
-
-# Create all the thread and have them loop on the work queue
-threads = (1..parallel).map{|n|
- Thread.new {
- loop do
- u = workqueue.pop
- break if u == :exit
- times[u] = get_dates(u, distros, archs)
- end
- }
-}
-
-# Push all mirrors into the queue
-mirrors.each{|u|
- workqueue << u
-}
-
-# Get all the threads to exit after all the work is done
-parallel.times{|i|
- workqueue << :exit
-}
-
-# Wait for the threads to exit
-threads.each{|t|
- t.join
-}
-
-# Generate output
-print_output(distros, archs, mirrors, ref_times, times)
-