diff options
-rwxr-xr-x | apt-panopticon.lua | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/apt-panopticon.lua b/apt-panopticon.lua index 5493683..b7a35fc 100755 --- a/apt-panopticon.lua +++ b/apt-panopticon.lua | |||
@@ -591,6 +591,19 @@ local getMirrors = function () | |||
591 | active = false | 591 | active = false |
592 | m[t] = d | 592 | m[t] = d |
593 | -- TODO - Should do some input validation on BaseURL, and everything else. | 593 | -- TODO - Should do some input validation on BaseURL, and everything else. |
594 | elseif "Rate" == t then | ||
595 | local time, unit = d:match('(%d+) *(%a+)') | ||
596 | time = tonumber(time) | ||
597 | unit = unit:sub(1, 1) | ||
598 | m[t] = time .. ' ' .. unit | ||
599 | if 'm' == unit then | ||
600 | time = time * 60 | ||
601 | elseif 'h' == unit then | ||
602 | time = time * 60 * 60 | ||
603 | else | ||
604 | C('Unknown Rate for mirror ' .. host) | ||
605 | end | ||
606 | m['Updated'] = time | ||
594 | else | 607 | else |
595 | m[t] = d | 608 | m[t] = d |
596 | end | 609 | end |
@@ -600,9 +613,14 @@ local getMirrors = function () | |||
600 | end | 613 | end |
601 | end | 614 | end |
602 | if APT.testing("DNSRR") then | 615 | if APT.testing("DNSRR") then |
603 | mirrors[APT.options.roundRobin.value] = { ["Protocols"] = { ["http"] = true; ["https"] = true; }; | 616 | mirrors[APT.options.roundRobin.value] = { ["Protocols"] = { ["http"] = true; ["https"] = true; }; ['Updated'] = 300; |
604 | ["FQDN"] = APT.options.roundRobin.value; ["Active"] = 'yes'; ["BaseURL"] = APT.options.roundRobin.value; } | 617 | ["FQDN"] = APT.options.roundRobin.value; ["Active"] = 'yes'; ["BaseURL"] = APT.options.roundRobin.value; } |
605 | end | 618 | end |
619 | local file, e = io.open("results/mirrors.lua", "w+") | ||
620 | if nil == file then C("opening mirrors file - " .. e) else | ||
621 | file:write(APT.dumpTable(mirrors, "", "mirrors") .. "\nreturn mirrors\n") | ||
622 | file:close() | ||
623 | end | ||
606 | return mirrors | 624 | return mirrors |
607 | end | 625 | end |
608 | 626 | ||
@@ -754,7 +772,12 @@ end | |||
754 | 772 | ||
755 | local parseRelease = function(host) | 773 | local parseRelease = function(host) |
756 | local list = {inf = 'Release', parser = parsePackages, out = 'Packages', files = {}, nextf = 'debs'} | 774 | local list = {inf = 'Release', parser = parsePackages, out = 'Packages', files = {}, nextf = 'debs'} |
775 | local updated = false | ||
776 | local status, now = APT.execute('TZ="GMT" date "+%s"', false) | ||
777 | now = tonumber(now:sub(2, -2)) | ||
757 | for i, n in pairs(releases) do | 778 | for i, n in pairs(releases) do |
779 | local status, old = APT.execute([[TZ="GMT" date -d "$(grep '^Date:' results_old/pkgmaster.devuan.org/merged/dists/]] .. n .. [[/Release.SORTED | cut -d ' ' -f 2-)" '+%s']], false) | ||
780 | old = tonumber(old:sub(2, -2)) | ||
758 | for l, o in pairs(releaseFiles) do | 781 | for l, o in pairs(releaseFiles) do |
759 | if repoExists(i .. o) then | 782 | if repoExists(i .. o) then |
760 | postDownload(host, n, o) | 783 | postDownload(host, n, o) |
@@ -784,13 +807,28 @@ local parseRelease = function(host) | |||
784 | os.execute('rm -f results/' .. host .. '/merged/dists/' .. n .. '/Release 2>/dev/null; ') | 807 | os.execute('rm -f results/' .. host .. '/merged/dists/' .. n .. '/Release 2>/dev/null; ') |
785 | else | 808 | else |
786 | -- TODO - compare to the pkgmaster copy. | 809 | -- TODO - compare to the pkgmaster copy. |
810 | if APT.testing('Updated') then | ||
811 | local status, new = APT.execute([[TZ="GMT" date -d "$(grep '^Date:' results/]] .. host .. [[/merged/dists/]] .. n .. [[/Release.SORTED | cut -d ' ' -f 2-)" '+%s']], false) | ||
812 | new = tonumber(new:sub(2, -2)) | ||
813 | local upd = old + APT.mirrors[host].Updated | ||
814 | if old ~= new then | ||
815 | if upd >= now then | ||
816 | W('Release ' .. n .. ' not updated yet, should update @ ' .. os.date('!%F %T', upd), 'http', 'Updated', host) | ||
817 | else | ||
818 | E('Release ' .. n .. ' not updated, should have updated @ ' .. os.date('!%F %T', upd) .. ', but was last updated @ ' .. os.date('!%F %T', new), 'http', 'Updated', host) | ||
819 | end | ||
820 | updated = false | ||
821 | else | ||
822 | updated = true | ||
823 | end | ||
824 | end | ||
787 | end | 825 | end |
788 | 826 | ||
789 | -- TODO - if it's not Integrity and not reference, then just do a HEAD check and compare file times? | 827 | -- TODO - if it's not Integrity and not reference, then just do a HEAD check and compare file times? |
790 | -- TODO - like we do with debs, pick just the smallest Packages.xz that has changed. | 828 | -- TODO - like we do with debs, pick just the smallest Packages.xz that has changed. |
791 | -- Though we are sorting Release by name, so we can do the diff with the one from results_old, so we'll need to sort by size to. | 829 | -- Though we are sorting Release by name, so we can do the diff with the one from results_old, so we'll need to sort by size to. |
792 | -- pkgmaster still needs to download all the changed Packages.xz files though. | 830 | -- pkgmaster still needs to download all the changed Packages.xz files though. |
793 | if APT.testing("Integrity") or (APT.options.referenceSite.value == host) then | 831 | if updated or APT.testing("Integrity") or (APT.options.referenceSite.value == host) then |
794 | local dfile, e = io.open(outFile, "r") | 832 | local dfile, e = io.open(outFile, "r") |
795 | if nil == dfile then W("opening " .. outFile .. " file - " .. e) else | 833 | if nil == dfile then W("opening " .. outFile .. " file - " .. e) else |
796 | for l in dfile:lines() do | 834 | for l in dfile:lines() do |
@@ -931,6 +969,7 @@ if 0 < #arg then | |||
931 | I("Starting tests for " .. arg[1] .. " with these tests - " .. table.concat(APT.options.tests.value, ", ")) | 969 | I("Starting tests for " .. arg[1] .. " with these tests - " .. table.concat(APT.options.tests.value, ", ")) |
932 | if nil ~= arg[2] then I(" Using IP " .. arg[2]); ip = arg[2] end | 970 | if nil ~= arg[2] then I(" Using IP " .. arg[2]); ip = arg[2] end |
933 | if nil ~= arg[3] then I(" Using file " .. arg[3]); end | 971 | if nil ~= arg[3] then I(" Using file " .. arg[3]); end |
972 | APT.mirrors = loadfile("results/mirrors.lua")() | ||
934 | APT.results = APT.padResults(APT.results) | 973 | APT.results = APT.padResults(APT.results) |
935 | 974 | ||
936 | if APT.origin then | 975 | if APT.origin then |