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.
This commit is contained in:
parent
e317bdc230
commit
48ea4b711f
@ -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
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
return require('gluon.model').get_model()
|
@ -0,0 +1 @@
|
|||||||
|
return uci:get_first('system', 'system', 'hostname')
|
@ -0,0 +1 @@
|
|||||||
|
return require('gluon.sysconfig').primary_mac
|
@ -0,0 +1,4 @@
|
|||||||
|
return
|
||||||
|
{ base = 'gluon-' .. util.trim(fs.readfile('/lib/gluon/gluon-version'))
|
||||||
|
, release = util.trim(fs.readfile('/lib/gluon/release'))
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
return tonumber(util.trim(util.exec("cut -d' ' -f1 /proc/loadavg")))
|
@ -0,0 +1 @@
|
|||||||
|
return tonumber(util.trim(util.exec("cut -d' ' -f1 /proc/uptime")))
|
@ -1,117 +1,44 @@
|
|||||||
#!/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
|
|
||||||
local net_if = os.getenv("NET_IF") or "br-client"
|
|
||||||
|
|
||||||
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)
|
|
||||||
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
|
||||||
end
|
|
||||||
|
|
||||||
output = {}
|
|
||||||
|
|
||||||
output["hostname"] = uci:get_first("system", "system", "hostname")
|
|
||||||
|
|
||||||
if uci:get_first("gluon-node-info", "location", "share_location", false) then
|
|
||||||
output["location"] =
|
|
||||||
{ 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
|
|
||||||
output["owner"] = { contact = contact }
|
|
||||||
end
|
|
||||||
|
|
||||||
output["software"] =
|
|
||||||
{ firmware = { base = "gluon-" .. chomp(readAll("/lib/gluon/gluon-version"))
|
|
||||||
, release = chomp(readAll("/lib/gluon/release"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
local autoupdater = uci:get_all("autoupdater", "settings")
|
|
||||||
if autoupdater then
|
|
||||||
output["software"]["autoupdater"] =
|
|
||||||
{ branch = autoupdater["branch"]
|
|
||||||
, enabled = uci:get_bool("autoupdater", "settings", "enabled")
|
|
||||||
}
|
|
||||||
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
|
|
||||||
|
|
||||||
output["hardware"] =
|
|
||||||
{ model = chomp(util.exec(". /lib/gluon/functions/model.sh; get_model")) }
|
|
||||||
|
|
||||||
|
|
||||||
local addresses = {}
|
fs = require 'luci.fs'
|
||||||
local tmp = util.exec("ip -o -6 addr show dev \"" .. net_if .. "\" | "
|
uci = require('luci.model.uci').cursor()
|
||||||
.. "grep -oE 'inet6 [0-9a-fA-F:]+' | cut -d' ' -f2")
|
util = require 'luci.util'
|
||||||
|
|
||||||
for address in tmp:gmatch("[^\n]+") do
|
|
||||||
table.insert(addresses, address)
|
|
||||||
end
|
|
||||||
|
|
||||||
output["network"] =
|
local json = require 'luci.json'
|
||||||
{ mac = chomp(util.exec(". /lib/gluon/functions/sysconfig.sh; sysconfig primary_mac"))
|
local ltn12 = require 'luci.ltn12'
|
||||||
, addresses = addresses
|
|
||||||
}
|
|
||||||
|
|
||||||
local gateway =
|
|
||||||
chomp(util.exec("batctl -m bat0 gateways | awk '/^=>/ { print $2 }'"))
|
|
||||||
|
|
||||||
if gateway ~= "" then
|
local function collect_entry(entry)
|
||||||
output["network"]["gateway"] = gateway
|
if fs.isdirectory(entry) then
|
||||||
end
|
return collect_dir(entry)
|
||||||
|
else
|
||||||
local traffic = {}
|
return dofile(entry)
|
||||||
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
|
end
|
||||||
|
|
||||||
output["statistics"] =
|
function collect_dir(dir)
|
||||||
{ uptime = chomp(util.exec("cut -d' ' -f1 /proc/uptime"))
|
local ret = {}
|
||||||
, loadavg = chomp(util.exec("cut -d' ' -f1 /proc/loadavg"))
|
|
||||||
, traffic = traffic
|
|
||||||
}
|
|
||||||
|
|
||||||
encoder = json.Encoder(output)
|
for _, entry in ipairs(fs.dir(dir)) do
|
||||||
alfred = io.popen("alfred -s " .. tostring(alfred_data_type), "w")
|
if entry:sub(1, 1) ~= '.' then
|
||||||
|
err, val = pcall(collect_entry, dir .. '/' .. entry)
|
||||||
|
if err then
|
||||||
|
ret[entry] = val
|
||||||
|
else
|
||||||
|
io.stderr:write(val, '\n')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
encoder = json.Encoder(collect_dir(announce_dir))
|
||||||
|
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))
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,14 +1,19 @@
|
|||||||
#!/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')
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
local autoupdater = uci:get_all('autoupdater', 'settings')
|
||||||
|
if autoupdater then
|
||||||
|
return
|
||||||
|
{ branch = autoupdater['branch']
|
||||||
|
, enabled = uci:get_bool('autoupdater', 'settings', 'enabled')
|
||||||
|
}
|
||||||
|
end
|
@ -0,0 +1,8 @@
|
|||||||
|
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
|
@ -0,0 +1,5 @@
|
|||||||
|
local gateway = util.trim(util.exec("batctl -m bat0 gateways | awk '/^=>/ { print $2 }'"))
|
||||||
|
|
||||||
|
if gateway ~= '' then
|
||||||
|
return gateway
|
||||||
|
end
|
@ -0,0 +1,17 @@
|
|||||||
|
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
|
@ -0,0 +1,4 @@
|
|||||||
|
return
|
||||||
|
{ enabled = uci:get_bool('fastd', 'mesh_vpn', 'enabled')
|
||||||
|
, version = util.trim(util.exec("fastd -v | cut -d' ' -f2"))
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
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
|
@ -0,0 +1,4 @@
|
|||||||
|
local contact = uci:get_first('gluon-node-info', 'owner', 'contact', '')
|
||||||
|
if contact ~= '' then
|
||||||
|
return { contact = contact }
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user