|
|
|
#!/usr/bin/env luajit
|
|
|
|
|
|
|
|
local APT = require 'apt-panopticommon'
|
|
|
|
local D = APT.D
|
|
|
|
local I = APT.I
|
|
|
|
local T = APT.T
|
|
|
|
local W = APT.W
|
|
|
|
local E = APT.E
|
|
|
|
local C = APT.C
|
|
|
|
local arg, sendArgs = APT.parseArgs({...})
|
|
|
|
|
|
|
|
local oldest = 0
|
|
|
|
|
|
|
|
local fixResults = function(f)
|
|
|
|
if APT.checkFile(f) then
|
|
|
|
local results = loadfile(f)()
|
|
|
|
results = APT.padResults(results)
|
|
|
|
for i, w in pairs(APT.protocols) do
|
|
|
|
tests = results[w]
|
|
|
|
if nil ~= tests.Redirects then
|
|
|
|
tests.redirects = tests.Redirects
|
|
|
|
tests.Redirects = nil
|
|
|
|
elseif nil == tests.redirects then
|
|
|
|
tests.redirects = {}
|
|
|
|
end
|
|
|
|
results[w] = tests
|
|
|
|
end
|
|
|
|
if nil ~= results.Redirects then
|
|
|
|
for i, w in pairs(APT.protocols) do
|
|
|
|
results[w].redirects = results.Redirects
|
|
|
|
end
|
|
|
|
results.Redirects = nil
|
|
|
|
end
|
|
|
|
local rfile, e = io.open(f, "w+")
|
|
|
|
if nil == rfile then C("opening results file - " .. e) else
|
|
|
|
rfile:write(APT.dumpTable(results, "results") .. "\nreturn results\n")
|
|
|
|
rfile:close()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
local lock = 'apt-panopticon.lock'
|
|
|
|
while APT.checkFile(lock) do os.execute('sleep 10') end
|
|
|
|
os.execute('touch ' .. lock)
|
|
|
|
|
|
|
|
|
|
|
|
if -1 < APT.verbosity then print('\nUpacking tarballs and cleaning them.') end
|
|
|
|
local files = io.popen('ls -1 results_*.tar.xz 2>/dev/null; ls -1 results_*/results_*.tar.xz 2>/dev/null')
|
|
|
|
for l in files:lines() do
|
|
|
|
local lsub = l:sub(1, -8)
|
|
|
|
if 0 == oldest then
|
|
|
|
local status, whn = APT.execute('TZ="GMT" ls -d1 --time-style="+%s" ' .. l .. ' | cut -d " " -f 6-6')
|
|
|
|
whn = whn:sub(2, -2)
|
|
|
|
local status, new = APT.execute('TZ="GMT" date -d "' .. whn:sub(9, 18) .. ' ' .. whn:sub(20, 21) .. ':' .. whn:sub(23, 24) .. '" "+%s"')
|
|
|
|
oldest = tonumber("0" .. new:sub(2, -2)) - (60 * 60)
|
|
|
|
if -1 < APT.verbosity then print('\nOldest time is ' .. oldest) end
|
|
|
|
end
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. 'tar -xf ' .. l); io.stdout:flush() end
|
|
|
|
os.execute('tar -xf ' .. l)
|
|
|
|
|
|
|
|
os.execute('rm -f ' .. lsub .. '/*.curl')
|
|
|
|
os.execute('rm -f ' .. lsub .. '/STATUS_*')
|
|
|
|
|
|
|
|
if APT.checkFile(lsub .. '/mirrors.lua') then
|
|
|
|
APT.mirrors = loadfile(lsub .. "/mirrors.lua")()
|
|
|
|
for k, v in pairs(APT.mirrors) do
|
|
|
|
if APT.options.referenceSite.value ~= k then
|
|
|
|
if APT.checkFile(lsub .. '/' .. k) then
|
|
|
|
os.execute('rm -fr ' .. lsub .. '/' .. k)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
for i, n in pairs(APT.releases) do
|
|
|
|
os.execute( 'rm -f ' .. lsub .. '/' .. k .. '/merged/dists/' .. n .. '/Release;' ..
|
|
|
|
'rm -f ' .. lsub .. '/' .. k .. '/merged/dists/' .. n .. '/Release.gpg;' ..
|
|
|
|
'rm -fr ' .. lsub .. '/' .. k .. '/merged/dists/' .. n .. '/contrib 2>/dev/null;' ..
|
|
|
|
'rm -fr ' .. lsub .. '/' .. k .. '/merged/dists/' .. n .. '/main 2>/dev/null;' ..
|
|
|
|
'rm -fr ' .. lsub .. '/' .. k .. '/merged/dists/' .. n .. '/non-free 2>/dev/null')
|
|
|
|
end
|
|
|
|
os.execute('rm -fr ' .. lsub .. '/' .. k .. '/merged/pool')
|
|
|
|
end
|
|
|
|
local results = {}
|
|
|
|
local f = l:sub(1, -8) .. "/" .. k .. ".lua"
|
|
|
|
if APT.checkFile(f) then
|
|
|
|
results = loadfile(f)()
|
|
|
|
results['IPs'] = v.IPs
|
|
|
|
local rfile, e = io.open(f, "w+")
|
|
|
|
if nil == rfile then C("opening results file - " .. e) else
|
|
|
|
rfile:write(APT.dumpTable(results, "results") .. "\nreturn results\n")
|
|
|
|
rfile:close()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
local fls = io.popen('ls -1 ' .. lsub .. '/*.lua 2>/dev/null')
|
|
|
|
for k in fls:lines() do
|
|
|
|
fixResults(k)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if -1 < APT.verbosity then print('\nDeleting old RRD data.') end
|
|
|
|
os.execute('rm -fr rrd')
|
|
|
|
if -1 < APT.verbosity then print('\nRecreating RRD data.') end
|
|
|
|
local files = io.popen('ls -d1 results_*')
|
|
|
|
for l in files:lines() do
|
|
|
|
if ('results_old' ~= l) and ('.tar.xz' ~= l:sub(25, -1)) then
|
|
|
|
if APT.checkFile(l .. '/stamp') then
|
|
|
|
local status, whn = APT.execute('TZ="GMT" ls -d1 --time-style="+%s" ' .. l .. ' | cut -d " " -f 6-6')
|
|
|
|
whn = whn:sub(2, -2)
|
|
|
|
local status, new = APT.execute('TZ="GMT" date -d "' .. whn:sub(9, 18) .. ' ' .. whn:sub(20, 21) .. ':' .. whn:sub(23, 24) .. '" "+%s"')
|
|
|
|
APT.now = tonumber("0" .. new:sub(2, -2))
|
|
|
|
if 0 ~= APT.now then
|
|
|
|
if APT.checkFile(l .. '/mirrors.lua') then
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. l .. ' -> ' .. APT.now); io.stdout:flush() end
|
|
|
|
APT.mirrors = loadfile(l .. "/mirrors.lua")()
|
|
|
|
for k, v in pairs(APT.mirrors) do
|
|
|
|
APT.doRRD(l, k, v, oldest)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. l); io.stdout:flush() end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. l); io.stdout:flush() end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. l); io.stdout:flush() end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
os.execute('rm ' .. lock)
|
|
|
|
|
|
|
|
|
|
|
|
if -1 < APT.verbosity then print('\nRecreating tarballs.') end
|
|
|
|
|
|
|
|
local files = io.popen('ls -1 results_*/results_*.tar.xz 2>/dev/null')
|
|
|
|
for l in files:lines() do
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. 'tar -c --xz ' .. l:sub(20, 43) .. ' -f ' .. l); io.stdout:flush() end
|
|
|
|
os.execute('mkdir -p ' .. l:sub(1, 18) .. '; tar -c --xz ' .. l:sub(20, 43) .. ' -f ' .. l .. '; rm -fr ' .. l:sub(20, 43))
|
|
|
|
end
|
|
|
|
local files = io.popen('ls -1 results_*.tar.xz 2>/dev/null')
|
|
|
|
for l in files:lines() do
|
|
|
|
if -1 < APT.verbosity then io.stdout:write('\r' .. 'tar -c --xz ' .. l:sub(1, 24) .. ' -f ' .. l:sub(1, 18) .. '/' .. l); io.stdout:flush() end
|
|
|
|
os.execute('mkdir -p ' .. l:sub(1, 18) .. '; tar -c --xz ' .. l:sub(1, 24) .. ' -f ' .. l:sub(1, 18) .. '/' .. l .. '; rm -fr ' .. l:sub(1, 24) .. '; rm -f ' .. l)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
if -1 < APT.verbosity then print('\nFinished updating data.') end
|