Merge remote-tracking branch 'origin/announce.d'
This commit is contained in:
commit
3725f7bca3
@ -10,24 +10,42 @@ local function collect_entry(entry)
|
||||
if fs.stat(entry, 'type') == 'dir' then
|
||||
return collect_dir(entry)
|
||||
else
|
||||
return setfenv(loadfile(entry), _M)()
|
||||
return loadfile(entry)
|
||||
end
|
||||
end
|
||||
|
||||
function collect_dir(dir)
|
||||
local ret = { [{}] = true }
|
||||
local fns = {}
|
||||
|
||||
for entry in fs.dir(dir) do
|
||||
if entry:sub(1, 1) ~= '.' then
|
||||
local ok, val = pcall(collect_entry, dir .. '/' .. entry)
|
||||
if ok then
|
||||
ret[entry] = val
|
||||
collectgarbage()
|
||||
local fn, err = collect_entry(dir .. '/' .. entry)
|
||||
|
||||
if fn then
|
||||
fns[entry] = fn
|
||||
else
|
||||
io.stderr:write(val, '\n')
|
||||
io.stderr:write(err, '\n')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return ret
|
||||
end
|
||||
return function ()
|
||||
local ret = { [{}] = true }
|
||||
|
||||
for k, v in pairs(fns) do
|
||||
collectgarbage()
|
||||
local ok, val = pcall(setfenv(v, _M))
|
||||
|
||||
if ok then
|
||||
ret[k] = val
|
||||
else
|
||||
io.stderr:write(val, '\n')
|
||||
end
|
||||
end
|
||||
|
||||
collectgarbage()
|
||||
|
||||
return ret
|
||||
end
|
||||
end
|
||||
|
@ -1,21 +1,29 @@
|
||||
local announce = require 'gluon.announce'
|
||||
local deflate = require 'deflate'
|
||||
local json = require 'luci.jsonc'
|
||||
local nixio = require 'nixio'
|
||||
local fs = require 'nixio.fs'
|
||||
|
||||
local memoize = {}
|
||||
|
||||
local function collect(type)
|
||||
return announce.collect_dir('/lib/gluon/announce/' .. type .. '.d')
|
||||
nixio.chdir('/lib/gluon/announce/')
|
||||
|
||||
for dir in fs.glob('*.d') do
|
||||
local name = dir:sub(1, -3)
|
||||
memoize[name] = announce.collect_dir(dir)
|
||||
end
|
||||
|
||||
local function collect(type)
|
||||
return memoize[type] and memoize[type]()
|
||||
end
|
||||
|
||||
module('gluon.announced', package.seeall)
|
||||
|
||||
function handle_request(query)
|
||||
if query:match('^nodeinfo$') then
|
||||
return json.stringify(collect('nodeinfo'))
|
||||
end
|
||||
collectgarbage()
|
||||
|
||||
local m = query:match('^GET ([a-z ]+)$')
|
||||
local ret
|
||||
if m then
|
||||
local data = {}
|
||||
|
||||
@ -27,7 +35,16 @@ function handle_request(query)
|
||||
end
|
||||
|
||||
if next(data) then
|
||||
return deflate.compress(json.stringify(data))
|
||||
ret = deflate.compress(json.stringify(data))
|
||||
end
|
||||
elseif query:match('^[a-z]+$') then
|
||||
local ok, data = pcall(collect, query)
|
||||
if ok then
|
||||
ret = json.stringify(data)
|
||||
end
|
||||
end
|
||||
|
||||
collectgarbage()
|
||||
|
||||
return ret
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user