aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/apt-panopticon-update-data.lua
blob: 82a6ba53d2f8ea966e645048a10adfe3d3f4cfb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/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 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')
for l in files:lines() do
    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 ' .. l:sub(1, -8) .. '/*.curl')
    os.execute('rm -f ' .. l:sub(1, -8) .. '/STATUS_*')
    if APT.checkFile(l:sub(1, -8) .. '/mirrors.lua') then
	APT.mirrors = loadfile(l:sub(1, -8) .. "/mirrors.lua")()
	for k, v in pairs(APT.mirrors) do
	    if APT.options.referenceSite.value ~= k then
		if APT.checkFile(l:sub(1, -8) .. '/' .. k) then
		    os.execute('rm -fr ' .. l:sub(1, -8) .. '/' .. k)
		end
	    else
		for i, n in pairs(APT.releases) do
		    os.execute( 'rm -f  ' .. l:sub(1, -8) .. '/' .. k .. '/merged/dists/' .. n .. '/Release;' ..
				'rm -f  ' .. l:sub(1, -8) .. '/' .. k .. '/merged/dists/' .. n .. '/Release.gpg;' ..
				'rm -fr ' .. l:sub(1, -8) .. '/' .. k .. '/merged/dists/' .. n .. '/contrib 2>/dev/null;' ..
				'rm -fr ' .. l:sub(1, -8) .. '/' .. k .. '/merged/dists/' .. n .. '/main 2>/dev/null;' ..
				'rm -fr ' .. l:sub(1, -8) .. '/' .. k .. '/merged/dists/' .. n .. '/non-free 2>/dev/null')
		end
		os.execute('rm -fr ' .. l:sub(1, -8) .. '/' .. k .. '/merged/pool')
	    end
	    local results = {}
	    local f = l:sub(1, -8) .. "/" .. k .. ".lua"
	    if APT.checkFile(f) then
		results = loadfile(f)()
		results = APT.padResults(results)
		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
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_*.tar.xz')
for l in files:lines() do
    if -1 < APT.verbosity then io.stdout:write('\r' .. 'tar -c --xz  ' .. l:sub(1, 24) .. ' -f ' .. l .. '; rm -fr ' .. l:sub(1, 24));  io.stdout:flush() end
    os.execute('tar -c --xz  ' .. l:sub(1, 24) .. ' -f ' .. l .. '; rm -fr ' .. l:sub(1, 24))
end


if -1 < APT.verbosity then print('\nFinished updating data.') end