Skip to content
Snippets Groups Projects
Commit 48ea4b71 authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

gluon-alfred: split announce.lua into several files and move parts into the appropriate packages

This also fixes the type of a few fields which were strings instead of numbers.
parent e317bdc2
No related branches found
No related tags found
No related merge requests found
Showing
with 104 additions and 112 deletions
...@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/package.mk ...@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/package.mk
define Package/gluon-alfred define Package/gluon-alfred
SECTION:=gluon SECTION:=gluon
CATEGORY:=Gluon CATEGORY:=Gluon
DEPENDS:=+gluon-core +gluon-node-info +gluon-cron +alfred +ethtool +luci-lib-json +luci-lib-core DEPENDS:=+gluon-core +gluon-cron +alfred +ethtool +luci-lib-json +luci-lib-core
TITLE:=Configure alfred TITLE:=Configure alfred
endef endef
......
return require('gluon.model').get_model()
return uci:get_first('system', 'system', 'hostname')
return require('gluon.sysconfig').primary_mac
return
{ base = 'gluon-' .. util.trim(fs.readfile('/lib/gluon/gluon-version'))
, release = util.trim(fs.readfile('/lib/gluon/release'))
}
return tonumber(util.trim(util.exec("cut -d' ' -f1 /proc/loadavg")))
return tonumber(util.trim(util.exec("cut -d' ' -f1 /proc/uptime")))
#!/usr/bin/lua #!/usr/bin/lua
local json = require "luci.json" local alfred_data_type = 158
local ltn12 = require "luci.ltn12" local announce_dir = '/lib/gluon/alfred/announce.d'
local util = require "luci.util"
require "luci.model.uci"
local uci = luci.model.uci.cursor()
local alfred_data_type = tonumber(os.getenv("ALFRED_DATA_TYPE")) or 158 fs = require 'luci.fs'
local net_if = os.getenv("NET_IF") or "br-client" uci = require('luci.model.uci').cursor()
util = require 'luci.util'
function readAll(file)
local f = io.open(file, "rb")
local content = f:read("*all")
f:close()
return content
end
function chomp(s)
return (s:gsub("^(.-)\n?$", "%1"))
end
function trim(s) local json = require 'luci.json'
return (s:gsub("^%s*(.-)%s*$", "%1")) local ltn12 = require 'luci.ltn12'
end
output = {}
output["hostname"] = uci:get_first("system", "system", "hostname")
if uci:get_first("gluon-node-info", "location", "share_location", false) then local function collect_entry(entry)
output["location"] = if fs.isdirectory(entry) then
{ latitude = tonumber(uci:get_first("gluon-node-info", "location", "latitude")) return collect_dir(entry)
, longitude = tonumber(uci:get_first("gluon-node-info", "location", "longitude")) else
} return dofile(entry)
end end
local contact = uci:get_first("gluon-node-info", "owner", "contact", "")
if contact ~= "" then
output["owner"] = { contact = contact }
end end
output["software"] = function collect_dir(dir)
{ firmware = { base = "gluon-" .. chomp(readAll("/lib/gluon/gluon-version")) local ret = {}
, release = chomp(readAll("/lib/gluon/release"))
}
}
local autoupdater = uci:get_all("autoupdater", "settings") for _, entry in ipairs(fs.dir(dir)) do
if autoupdater then if entry:sub(1, 1) ~= '.' then
output["software"]["autoupdater"] = err, val = pcall(collect_entry, dir .. '/' .. entry)
{ branch = autoupdater["branch"] if err then
, enabled = uci:get_bool("autoupdater", "settings", "enabled") ret[entry] = val
} else
io.stderr:write(val, '\n')
end end
local fastd = uci:get_all("fastd", "mesh_vpn")
if fastd then
output["software"]["fastd"] =
{ enabled = uci:get_bool("fastd", "mesh_vpn", "enabled")
, version = chomp(util.exec("fastd -v | cut -d' ' -f2"))
}
end end
output["hardware"] =
{ model = chomp(util.exec(". /lib/gluon/functions/model.sh; get_model")) }
local addresses = {}
local tmp = util.exec("ip -o -6 addr show dev \"" .. net_if .. "\" | "
.. "grep -oE 'inet6 [0-9a-fA-F:]+' | cut -d' ' -f2")
for address in tmp:gmatch("[^\n]+") do
table.insert(addresses, address)
end end
output["network"] = return ret
{ mac = chomp(util.exec(". /lib/gluon/functions/sysconfig.sh; sysconfig primary_mac"))
, addresses = addresses
}
local gateway =
chomp(util.exec("batctl -m bat0 gateways | awk '/^=>/ { print $2 }'"))
if gateway ~= "" then
output["network"]["gateway"] = gateway
end
local traffic = {}
local ethtool = util.exec("ethtool -S bat0")
for k, v in ethtool:gmatch("([%a_]+): ([0-9]+)") do
traffic[k] = v
end
for _,class in ipairs({"rx", "tx", "forward", "mgmt_rx", "mgmt_tx"}) do
traffic[class] =
{ bytes = traffic[class .. "_bytes"]
, packets = traffic[class]
}
if class == "tx" then
traffic[class]["dropped"] = traffic[class .. "_dropped"]
end
end end
output["statistics"] =
{ uptime = chomp(util.exec("cut -d' ' -f1 /proc/uptime"))
, loadavg = chomp(util.exec("cut -d' ' -f1 /proc/loadavg"))
, traffic = traffic
}
encoder = json.Encoder(output) encoder = json.Encoder(collect_dir(announce_dir))
alfred = io.popen("alfred -s " .. tostring(alfred_data_type), "w") alfred = io.popen('alfred -s ' .. tostring(alfred_data_type), 'w')
ltn12.pump.all(encoder:source(), ltn12.sink.file(alfred)) ltn12.pump.all(encoder:source(), ltn12.sink.file(alfred))
#!/bin/sh #!/usr/bin/lua
. /lib/functions.sh local uci = require 'luci.model.uci'
local c = uci.cursor()
uci_remove alfred alfred
uci_add alfred alfred alfred c:delete('alfred', 'alfred')
uci_set alfred alfred interface 'br-client' c:section('alfred', 'alfred', 'alfred',
uci_set alfred alfred mode 'slave' {
uci_set alfred alfred batmanif 'bat0' interface = 'br-client',
uci_set alfred alfred start_vis '1' mode = 'slave',
uci_set alfred alfred run_facters '0' batmanif = 'bat0',
start_vis = '1',
run_facters = '0',
}
)
uci_commit alfred c:save('alfred')
c:commit('alfred')
local autoupdater = uci:get_all('autoupdater', 'settings')
if autoupdater then
return
{ branch = autoupdater['branch']
, enabled = uci:get_bool('autoupdater', 'settings', 'enabled')
}
end
local ip = util.exec('ip -o -6 addr show dev br-client')
local addresses = {}
for _, line in ipairs(util.split(ip)) do
table.insert(addresses, line:match('inet6 ([%x:]+)/'))
end
return addresses
local gateway = util.trim(util.exec("batctl -m bat0 gateways | awk '/^=>/ { print $2 }'"))
if gateway ~= '' then
return gateway
end
local ethtool = util.exec('ethtool -S bat0')
local fields = {}
for k, v in ethtool:gmatch('([%a_]+): ([0-9]+)') do
fields[k] = tonumber(v)
end
local traffic = {}
for _, class in ipairs({'rx', 'tx', 'forward', 'mgmt_rx', 'mgmt_tx'}) do
traffic[class] =
{ bytes = fields[class .. '_bytes']
, packets = fields[class]
}
end
traffic['tx']['dropped'] = fields['tx_dropped']
return traffic
return
{ enabled = uci:get_bool('fastd', 'mesh_vpn', 'enabled')
, version = util.trim(util.exec("fastd -v | cut -d' ' -f2"))
}
if uci:get_first('gluon-node-info', 'location', 'share_location', false) then
return
{ latitude = tonumber(uci:get_first('gluon-node-info', 'location', 'latitude'))
, longitude = tonumber(uci:get_first('gluon-node-info', 'location', 'longitude'))
}
end
local contact = uci:get_first('gluon-node-info', 'owner', 'contact', '')
if contact ~= '' then
return { contact = contact }
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment