diff options
author | onefang | 2019-12-31 16:20:14 +1000 |
---|---|---|
committer | onefang | 2019-12-31 16:20:14 +1000 |
commit | 91b6eba0f7c4fd44dd79f0e868bb9e7a92bccce7 (patch) | |
tree | cdbbf301d0f20228de66cad65e218386c67317a0 | |
parent | Check if reference packages are still current. (diff) | |
download | apt-panopticon-91b6eba0f7c4fd44dd79f0e868bb9e7a92bccce7.zip apt-panopticon-91b6eba0f7c4fd44dd79f0e868bb9e7a92bccce7.tar.gz apt-panopticon-91b6eba0f7c4fd44dd79f0e868bb9e7a92bccce7.tar.bz2 apt-panopticon-91b6eba0f7c4fd44dd79f0e868bb9e7a92bccce7.tar.xz |
Add Redirects tests fully.
-rw-r--r-- | apt-panopticommon.lua | 14 | ||||
-rwxr-xr-x | apt-panopticon-report-email-web.lua | 7 | ||||
-rwxr-xr-x | apt-panopticon.lua | 4 | ||||
-rw-r--r-- | explanations.html | 6 |
4 files changed, 23 insertions, 8 deletions
diff --git a/apt-panopticommon.lua b/apt-panopticommon.lua index ca952d3..c03f817 100644 --- a/apt-panopticommon.lua +++ b/apt-panopticommon.lua | |||
@@ -4,7 +4,7 @@ local APT = {} | |||
4 | APT.rrd = require 'rrd' | 4 | APT.rrd = require 'rrd' |
5 | 5 | ||
6 | APT.protocols = {"ftp", "http", "https", "rsync"} | 6 | APT.protocols = {"ftp", "http", "https", "rsync"} |
7 | APT.tests = {'raw', 'Integrity', 'Protocol', 'Updated', 'URLSanity', 'Speed'} | 7 | APT.tests = {'raw', 'Integrity', 'Protocol', 'Redirects', 'Updated', 'URLSanity', 'Speed'} |
8 | APT.releases = {"jessie", "ascii", "beowulf", "ceres"} | 8 | APT.releases = {"jessie", "ascii", "beowulf", "ceres"} |
9 | APT.subRels = {'backports', 'proposed-updates', 'security', 'updates'} | 9 | APT.subRels = {'backports', 'proposed-updates', 'security', 'updates'} |
10 | APT.notExist = | 10 | APT.notExist = |
@@ -65,6 +65,7 @@ APT.options = | |||
65 | -- "rsync", | 65 | -- "rsync", |
66 | "DNSRR", | 66 | "DNSRR", |
67 | "Protocol", | 67 | "Protocol", |
68 | "Redirects", | ||
68 | "URLSanity", | 69 | "URLSanity", |
69 | "Integrity", | 70 | "Integrity", |
70 | "Updated", | 71 | "Updated", |
@@ -697,6 +698,9 @@ local DSIt = 'DS:IntegrityTimeouts:GAUGE:' .. hb .. ':0:U' | |||
697 | local DSPe = 'DS:ProtocolErrors:GAUGE:' .. hb .. ':0:U' | 698 | local DSPe = 'DS:ProtocolErrors:GAUGE:' .. hb .. ':0:U' |
698 | local DSPw = 'DS:ProtocolWarnings:GAUGE:' .. hb .. ':0:U' | 699 | local DSPw = 'DS:ProtocolWarnings:GAUGE:' .. hb .. ':0:U' |
699 | local DSPt = 'DS:ProtocolTimeouts:GAUGE:' .. hb .. ':0:U' | 700 | local DSPt = 'DS:ProtocolTimeouts:GAUGE:' .. hb .. ':0:U' |
701 | local DSRe = 'DS:RedirectsErrors:GAUGE:' .. hb .. ':0:U' | ||
702 | local DSRw = 'DS:RedirectsWarnings:GAUGE:' .. hb .. ':0:U' | ||
703 | local DSRt = 'DS:RedirectsTimeouts:GAUGE:' .. hb .. ':0:U' | ||
700 | local DSUe = 'DS:UpdatedErrors:GAUGE:' .. hb .. ':0:U' | 704 | local DSUe = 'DS:UpdatedErrors:GAUGE:' .. hb .. ':0:U' |
701 | local DSUw = 'DS:UpdatedWarnings:GAUGE:' .. hb .. ':0:U' | 705 | local DSUw = 'DS:UpdatedWarnings:GAUGE:' .. hb .. ':0:U' |
702 | local DSUt = 'DS:UpdatedTimeouts:GAUGE:' .. hb .. ':0:U' | 706 | local DSUt = 'DS:UpdatedTimeouts:GAUGE:' .. hb .. ':0:U' |
@@ -735,10 +739,11 @@ APT.createRRD = function(host, ip, o) | |||
735 | os.execute( 'mkdir -p rrd/' .. host .. '/' .. p:upper()) | 739 | os.execute( 'mkdir -p rrd/' .. host .. '/' .. p:upper()) |
736 | if not APT.checkFile('rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd') then | 740 | if not APT.checkFile('rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd') then |
737 | D('Creating ' .. 'rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd') | 741 | D('Creating ' .. 'rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd') |
738 | APT.rrd.create( 'rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', '--start', start, '--step', step, DSIe, DSIw, DSIt, DSPe, DSPw, DSPt, DSUe, DSUw, DSUt, DSSe, DSSw, DSSt, | 742 | APT.rrd.create( 'rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', '--start', start, '--step', step, |
743 | DSIe, DSIw, DSIt, DSPe, DSPw, DSPt, DSRe, DSRw, DSRt, DSUe, DSUw, DSUt, DSSe, DSSw, DSSt, | ||
739 | RRAc0, RRAc1, RRAc2, RRAl0, RRAc3, RRAc4, RRAc5, RRAl1, RRAc6, RRAc7, RRAc8, RRAl2, RRAc9, RRAc10, RRAc11, RRAl3, RRAc12, RRAc13, RRAc14, RRAl4) | 744 | RRAc0, RRAc1, RRAc2, RRAl0, RRAc3, RRAc4, RRAc5, RRAl1, RRAc6, RRAc7, RRAc8, RRAl2, RRAc9, RRAc10, RRAc11, RRAl3, RRAc12, RRAc13, RRAc14, RRAl4) |
740 | -- Start them at 0 so the average has something to work on. | 745 | -- Start them at 0 so the average has something to work on. |
741 | APT.rrd.update( 'rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', (APT.now - 600) .. ':0:0:0:0:0:0:0:0:0:0:0:0') | 746 | APT.rrd.update( 'rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', (APT.now - 600) .. ':0:0:0:0:0:0:0:0:0:0:0:0:0:0:0') |
742 | end | 747 | end |
743 | end | 748 | end |
744 | os.execute( 'mkdir -p rrd/' .. host .. '/Speed') | 749 | os.execute( 'mkdir -p rrd/' .. host .. '/Speed') |
@@ -757,10 +762,11 @@ APT.updateRRD = function(results, host, ip) | |||
757 | APT.rrd.update('rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', APT.now .. ':' .. | 762 | APT.rrd.update('rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', APT.now .. ':' .. |
758 | results[p]['Integrity'].errors .. ':' .. results[p]['Integrity'].warnings .. ':' .. results[p]['Integrity'].timeouts .. ':' .. | 763 | results[p]['Integrity'].errors .. ':' .. results[p]['Integrity'].warnings .. ':' .. results[p]['Integrity'].timeouts .. ':' .. |
759 | results[p]['Protocol'].errors .. ':' .. results[p]['Protocol'].warnings .. ':' .. results[p]['Protocol'].timeouts .. ':' .. | 764 | results[p]['Protocol'].errors .. ':' .. results[p]['Protocol'].warnings .. ':' .. results[p]['Protocol'].timeouts .. ':' .. |
765 | results[p]['Redirects'].errors .. ':' .. results[p]['Redirects'].warnings .. ':' .. results[p]['Redirects'].timeouts .. ':' .. | ||
760 | results[p]['Updated'].errors .. ':' .. results[p]['Updated'].warnings .. ':' .. results[p]['Updated'].timeouts .. ':' .. | 766 | results[p]['Updated'].errors .. ':' .. results[p]['Updated'].warnings .. ':' .. results[p]['Updated'].timeouts .. ':' .. |
761 | results[p]['URLSanity'].errors .. ':' .. results[p]['URLSanity'].warnings .. ':' .. results[p]['URLSanity'].timeouts) | 767 | results[p]['URLSanity'].errors .. ':' .. results[p]['URLSanity'].warnings .. ':' .. results[p]['URLSanity'].timeouts) |
762 | else | 768 | else |
763 | APT.rrd.update('rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', APT.now .. ':U:U:U:U:U:U:U:U:U:U:U:U') | 769 | APT.rrd.update('rrd/' .. host .. '/' .. p:upper() .. '/Tests.rrd', APT.now .. ':U:U:U:U:U:U:U:U:U:U:U:U:U:U:U') |
764 | end | 770 | end |
765 | end | 771 | end |
766 | if nil ~= results.speed then | 772 | if nil ~= results.speed then |
diff --git a/apt-panopticon-report-email-web.lua b/apt-panopticon-report-email-web.lua index 05699ee..3365d78 100755 --- a/apt-panopticon-report-email-web.lua +++ b/apt-panopticon-report-email-web.lua | |||
@@ -212,7 +212,8 @@ end | |||
212 | 212 | ||
213 | local makeTable = function(web, hosts) | 213 | local makeTable = function(web, hosts) |
214 | web:write("<table>\n<tr><th></th><th>" .. lnk('FTP') .. "</th><th>" .. lnk('HTTP') .. "</th><th>" .. lnk('HTTPS') .. "</th><th>" .. lnk('RSYNC') .. "</th>" .. | 214 | web:write("<table>\n<tr><th></th><th>" .. lnk('FTP') .. "</th><th>" .. lnk('HTTP') .. "</th><th>" .. lnk('HTTPS') .. "</th><th>" .. lnk('RSYNC') .. "</th>" .. |
215 | "<th>" .. lnk('DNS round robin', 'DNS-RR') .. "</th><th>" .. lnk('Protocol') .. "</th><th>" .. lnk('URL sanity', 'URL-Sanity') .. "</th><th>" .. lnk('Integrity') .. "</th>" .. | 215 | "<th>" .. lnk('DNS round robin', 'DNS-RR') .. "</th><th>" .. lnk('Protocol') .. "</th><th>" .. lnk('Redirects') .. |
216 | "</th><th>" .. lnk('URL sanity', 'URL-Sanity') .. "</th><th>" .. lnk('Integrity') .. "</th>" .. | ||
216 | "<th colspan='2'>" .. lnk('Updated') .. "</th><th colspan='2'>" .. lnk('Speed range', 'Speed') .. "</th>" .. | 217 | "<th colspan='2'>" .. lnk('Updated') .. "</th><th colspan='2'>" .. lnk('Speed range', 'Speed') .. "</th>" .. |
217 | "<th colspan='2'>" .. lnk('Weekly statistics', 'Weekly') .. "</th><th>" .. lnk('Graphs') .. "</th></tr>\n") | 218 | "<th colspan='2'>" .. lnk('Weekly statistics', 'Weekly') .. "</th><th>" .. lnk('Graphs') .. "</th></tr>\n") |
218 | local bg = '' | 219 | local bg = '' |
@@ -234,6 +235,7 @@ local makeTable = function(web, hosts) | |||
234 | local protocol = status(hosts, k, results, "Protocol") | 235 | local protocol = status(hosts, k, results, "Protocol") |
235 | local sanity = status(hosts, k, results, "URLSanity") | 236 | local sanity = status(hosts, k, results, "URLSanity") |
236 | local integrity = status(hosts, k, results, "Integrity") | 237 | local integrity = status(hosts, k, results, "Integrity") |
238 | local redirects = status(hosts, k, results, "Redirects") | ||
237 | local updated = status(hosts, k, results, "Updated") | 239 | local updated = status(hosts, k, results, "Updated") |
238 | local rate = v.Rate | 240 | local rate = v.Rate |
239 | local min = tonumber(results.speed.min) | 241 | local min = tonumber(results.speed.min) |
@@ -295,7 +297,7 @@ local makeTable = function(web, hosts) | |||
295 | end | 297 | end |
296 | 298 | ||
297 | web:write("<td>" .. ftp .. " </td><td>" .. http .. " </td><td>" .. https .. " </td><td>" .. rsync .. " </td><td>" .. dns .. | 299 | web:write("<td>" .. ftp .. " </td><td>" .. http .. " </td><td>" .. https .. " </td><td>" .. rsync .. " </td><td>" .. dns .. |
298 | " </td><td>" .. protocol .. " </td><td>" .. sanity .. " </td><td>" .. integrity .. " </td>" .. '<td>' .. rate .. | 300 | " </td><td>" .. protocol .. " </td><td>" .. redirects .. " </td><td>" .. sanity .. " </td><td>" .. integrity .. " </td>" .. '<td>' .. rate .. |
299 | '</td><td>' .. updated .. '</td> ' .. spd .. " " .. week .." <td>" .. graph .. "</td></tr>\n") | 301 | '</td><td>' .. updated .. '</td> ' .. spd .. " " .. week .." <td>" .. graph .. "</td></tr>\n") |
300 | if "" ~= active then | 302 | if "" ~= active then |
301 | web:write("<tr><td style='background-color:dimgrey'>" .. active .. "</td></tr>\n") | 303 | web:write("<tr><td style='background-color:dimgrey'>" .. active .. "</td></tr>\n") |
@@ -361,6 +363,7 @@ if nil == email then C("opening mirrors file - " .. e) else | |||
361 | local rsync = "[skip]" | 363 | local rsync = "[skip]" |
362 | local dns = DNSrrTest(APT.mirrors, k) | 364 | local dns = DNSrrTest(APT.mirrors, k) |
363 | local protocol = status(APT.mirrors, k, results, "Protocol") | 365 | local protocol = status(APT.mirrors, k, results, "Protocol") |
366 | local redirects = status(APT.mirrors, k, results, "Redirects") | ||
364 | local sanity = status(APT.mirrors, k, results, "URLSanity") | 367 | local sanity = status(APT.mirrors, k, results, "URLSanity") |
365 | local integrity = status(APT.mirrors, k, results, "Integrity") | 368 | local integrity = status(APT.mirrors, k, results, "Integrity") |
366 | local updated = status(APT.mirrors, k, results, "Updated") | 369 | local updated = status(APT.mirrors, k, results, "Updated") |
diff --git a/apt-panopticon.lua b/apt-panopticon.lua index 43eeccf..2237232 100755 --- a/apt-panopticon.lua +++ b/apt-panopticon.lua | |||
@@ -345,7 +345,7 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
345 | if nil ~= location then | 345 | if nil ~= location then |
346 | pu = url.parse(location, defaultURL) | 346 | pu = url.parse(location, defaultURL) |
347 | if (pu.host == APT.options.roundRobin.value) and (nil ~= PU.path:find('merged/pool/DEVUAN/')) then | 347 | if (pu.host == APT.options.roundRobin.value) and (nil ~= PU.path:find('merged/pool/DEVUAN/')) then |
348 | E('DEVUAN packages must not be redirected to ' .. APT.options.roundRobin.value .. ' - ' .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, sanity, host) | 348 | E('DEVUAN packages must not be redirected to ' .. APT.options.roundRobin.value .. ' - ' .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, 'Redirects', host) |
349 | end | 349 | end |
350 | if ('http' == location:sub(1, 4)) and (pu.scheme ~= PU.scheme) then -- Sometimes a location sans scheme is returned, this is not a protocol change. | 350 | if ('http' == location:sub(1, 4)) and (pu.scheme ~= PU.scheme) then -- Sometimes a location sans scheme is returned, this is not a protocol change. |
351 | if APT.testing("Protocol") then | 351 | if APT.testing("Protocol") then |
@@ -393,7 +393,7 @@ checkHEAD = function (host, URL, r, retry, sanity) | |||
393 | end | 393 | end |
394 | end | 394 | end |
395 | elseif nil ~= PU.path:find('merged/pool/DEBIAN-SECURITY/') then | 395 | elseif nil ~= PU.path:find('merged/pool/DEBIAN-SECURITY/') then |
396 | W('DEBIAN-SECURITY packages must be redirected to a Debian mirror - ' .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, sanity, host) | 396 | W('DEBIAN-SECURITY packages must be redirected to a Debian mirror - ' .. APT.lnk(URL) .. arw .. APT.lnk(location), PU.scheme, 'Redirects', host) |
397 | end | 397 | end |
398 | end | 398 | end |
399 | end | 399 | end |
diff --git a/explanations.html b/explanations.html index f4d11fa..7e2878d 100644 --- a/explanations.html +++ b/explanations.html | |||
@@ -41,6 +41,12 @@ The validity of the HTTPS certificate for each server is tested as well. | |||
41 | The IPs are linked to the log for that specific IP when used via the DNS round robin, and is followed by the number of errors, warnings, or timeouts of any. | 41 | The IPs are linked to the log for that specific IP when used via the DNS round robin, and is followed by the number of errors, warnings, or timeouts of any. |
42 | </p> | 42 | </p> |
43 | 43 | ||
44 | <hr><h1 id="Redirects">Redirect tests</h1> | ||
45 | <p>Mirrors that redirect /DEVUAN/ back out to deb.devuan.org is an ERROR. | ||
46 | /DEBIAN-SECURITY/ packages must be redirected to a Debian mirror, specifically a mirror hosting Debian security updates. | ||
47 | However, some Devuan mirrors might also be Debian mirrors, so this is just a WARNING. | ||
48 | </p> | ||
49 | |||
44 | <hr><h1 id="Protocol">Protocol tests</h1> | 50 | <hr><h1 id="Protocol">Protocol tests</h1> |
45 | <p>The Protocol test will give a warning if the protocol is changed during a redirect, HTTP -> HTTPS for example. | 51 | <p>The Protocol test will give a warning if the protocol is changed during a redirect, HTTP -> HTTPS for example. |
46 | While apt HTTPS transport is now the default in Beowulf / Buster, not everyone with an older release will have that installed, | 52 | While apt HTTPS transport is now the default in Beowulf / Buster, not everyone with an older release will have that installed, |