diff options
Diffstat (limited to '')
-rwxr-xr-x | mirror-checker.lua | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/mirror-checker.lua b/mirror-checker.lua index 71c9c34..ae1b9b9 100755 --- a/mirror-checker.lua +++ b/mirror-checker.lua | |||
@@ -123,9 +123,14 @@ dumpTableSub = function (table, space) | |||
123 | end | 123 | end |
124 | return r | 124 | return r |
125 | end | 125 | end |
126 | 126 | local log = function(v, t, s, test, host) | |
127 | 127 | local x = "" | |
128 | local log = function(v, t, s) | 128 | if nil ~= test then x = x .. test end |
129 | if nil ~= host then | ||
130 | if #x > 0 then x = x .. " " end | ||
131 | x = x .. host | ||
132 | end | ||
133 | if #x > 0 then t = t .. "(" .. x .. ")" end | ||
129 | if v <= verbosity then | 134 | if v <= verbosity then |
130 | if 3 <= verbosity then t = os.date() .. " " .. t end | 135 | if 3 <= verbosity then t = os.date() .. " " .. t end |
131 | print(t .. ": " .. s) | 136 | print(t .. ": " .. s) |
@@ -137,8 +142,8 @@ local log = function(v, t, s) | |||
137 | end | 142 | end |
138 | local D = function(s) log(3, "DEBUG ", s) end | 143 | local D = function(s) log(3, "DEBUG ", s) end |
139 | local I = function(s) log(2, "INFO ", s) end | 144 | local I = function(s) log(2, "INFO ", s) end |
140 | local W = function(s) log(1, "WARNING ", s) end | 145 | local W = function(s, t, h) log(1, "WARNING ", s, t, h) end |
141 | local E = function(s) log(0, "ERROR ", s) end | 146 | local E = function(s, t, h) log(0, "ERROR ", s, t, h) end |
142 | local C = function(s) log(-1, "CRITICAL", s) end | 147 | local C = function(s) log(-1, "CRITICAL", s) end |
143 | 148 | ||
144 | local mirrors = {} | 149 | local mirrors = {} |
@@ -201,6 +206,8 @@ checkHEAD = function (host, URL, r, retry) | |||
201 | if nil == r then r = 0 end | 206 | if nil == r then r = 0 end |
202 | if nil == retry then retry = 0 end | 207 | if nil == retry then retry = 0 end |
203 | local check = "Checking file" | 208 | local check = "Checking file" |
209 | local PU = url.parse(URL, defaultURL) | ||
210 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) | ||
204 | if 0 < r then | 211 | if 0 < r then |
205 | check = "Redirecting to" | 212 | check = "Redirecting to" |
206 | end | 213 | end |
@@ -209,15 +216,13 @@ checkHEAD = function (host, URL, r, retry) | |||
209 | check = "Retry " .. retry .. " " .. check | 216 | check = "Retry " .. retry .. " " .. check |
210 | end | 217 | end |
211 | if 20 < r then | 218 | if 20 < r then |
212 | E("too many redirects! " .. check .. " " .. host .. " -> " .. URL) | 219 | E("too many redirects! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, host) |
213 | return | 220 | return |
214 | end | 221 | end |
215 | if 10 < retry then | 222 | if 10 < retry then |
216 | E("too many retries! " .. check .. " " .. host .. " -> " .. URL) | 223 | E("too many retries! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, host) |
217 | return | 224 | return |
218 | end | 225 | end |
219 | local PU = url.parse(URL, defaultURL) | ||
220 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) | ||
221 | D(PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL) | 226 | D(PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL) |
222 | if not testing(PU.scheme, host) then D("Not testing " .. PU.scheme .. " " .. host .. " -> " .. URL); return end | 227 | if not testing(PU.scheme, host) then D("Not testing " .. PU.scheme .. " " .. host .. " -> " .. URL); return end |
223 | -- TODO - Perhaps we should try it anyway, and mark it as a warning if it DOES work? | 228 | -- TODO - Perhaps we should try it anyway, and mark it as a warning if it DOES work? |
@@ -232,13 +237,13 @@ checkHEAD = function (host, URL, r, retry) | |||
232 | local p, c, h, s = htp.request{method = "HEAD", redirect = false, url = URL, headers = hd, protocol = "any", options = "all"} | 237 | local p, c, h, s = htp.request{method = "HEAD", redirect = false, url = URL, headers = hd, protocol = "any", options = "all"} |
233 | if nil == s then s = "" end | 238 | if nil == s then s = "" end |
234 | if nil == p then | 239 | if nil == p then |
235 | E(" " .. c .. " " .. s .. "! " .. check .. " " .. host .. " -> " .. URL) | 240 | E(" " .. c .. " " .. s .. "! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, host) |
236 | -- So far the only errors are "timeout", "Network is unreachable", and "closed", and I suspect "closed" is due to saturating my bandwidth. | 241 | -- So far the only errors are "timeout", "Network is unreachable", and "closed", and I suspect "closed" is due to saturating my bandwidth. |
237 | -- Might be worthwhile retrying those, some number of times. | 242 | -- Might be worthwhile retrying those, some number of times. |
238 | if ("closed" == c) or ("Network is unreachable" == c) or ("timeout" == c) then checkHEAD(host, URL, r, retry + 1) end | 243 | if ("closed" == c) or ("Network is unreachable" == c) or ("timeout" == c) then checkHEAD(host, URL, r, retry + 1) end |
239 | else | 244 | else |
240 | if ("4" == tostring(c):sub(1, 1)) or ("5" == tostring(c):sub(1, 1)) then | 245 | if ("4" == tostring(c):sub(1, 1)) or ("5" == tostring(c):sub(1, 1)) then |
241 | E(" " .. c .. " " .. s .. ". " .. check .. " " .. host .. " -> " .. URL) | 246 | E(" " .. c .. " " .. s .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, host) |
242 | else | 247 | else |
243 | I(" " .. c .. " " .. s .. ". " .. check .. " " .. host .. " -> " .. URL) | 248 | I(" " .. c .. " " .. s .. ". " .. check .. " " .. host .. " -> " .. URL) |
244 | end | 249 | end |
@@ -246,12 +251,12 @@ checkHEAD = function (host, URL, r, retry) | |||
246 | if nil ~= l then | 251 | if nil ~= l then |
247 | pu = url.parse(l, defaultURL) | 252 | pu = url.parse(l, defaultURL) |
248 | if (pu.scheme ~= PU.scheme) then | 253 | if (pu.scheme ~= PU.scheme) then |
249 | if testing("Protocol") then W(" protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l) end | 254 | if testing("Protocol") then W(" protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l, PU.scheme, host) end |
250 | if (pu.host == host) and pu.path == PU.path then D("Not testing protocol change " .. URL .. " -> " .. l); return end | 255 | if (pu.host == host) and pu.path == PU.path then D("Not testing protocol change " .. URL .. " -> " .. l); return end |
251 | end | 256 | end |
252 | 257 | ||
253 | if l == URL then | 258 | if l == URL then |
254 | E(" redirect loop! " .. check .. " " .. host .. " -> " .. URL) | 259 | E(" redirect loop! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, host) |
255 | elseif nil == pu.host then | 260 | elseif nil == pu.host then |
256 | I(" relative redirect. " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l) | 261 | I(" relative redirect. " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l) |
257 | checkHEAD(host, PU.scheme .. "://" .. PU.host .. l, r + 1) | 262 | checkHEAD(host, PU.scheme .. "://" .. PU.host .. l, r + 1) |