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
define Package/gluon-alfred
SECTION:=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
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
local json = require "luci.json"
local ltn12 = require "luci.ltn12"
local util = require "luci.util"
local alfred_data_type = 158
local announce_dir = '/lib/gluon/alfred/announce.d'
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"
fs = require 'luci.fs'
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)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
output = {}
output["hostname"] = uci:get_first("system", "system", "hostname")
local json = require 'luci.json'
local ltn12 = require 'luci.ltn12'
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 }
local function collect_entry(entry)
if fs.isdirectory(entry) then
return collect_dir(entry)
else
return dofile(entry)
end
end
output["software"] =
{ firmware = { base = "gluon-" .. chomp(readAll("/lib/gluon/gluon-version"))
, release = chomp(readAll("/lib/gluon/release"))
}
}
function collect_dir(dir)
local ret = {}
local autoupdater = uci:get_all("autoupdater", "settings")
if autoupdater then
output["software"]["autoupdater"] =
{ branch = autoupdater["branch"]
, enabled = uci:get_bool("autoupdater", "settings", "enabled")
}
end
for _, entry in ipairs(fs.dir(dir)) do
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
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"))
}
return ret
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
output["network"] =
{ 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
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)
alfred = io.popen("alfred -s " .. tostring(alfred_data_type), "w")
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))
#!/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
uci_set alfred alfred interface 'br-client'
uci_set alfred alfred mode 'slave'
uci_set alfred alfred batmanif 'bat0'
uci_set alfred alfred start_vis '1'
uci_set alfred alfred run_facters '0'
c:delete('alfred', 'alfred')
c:section('alfred', 'alfred', 'alfred',
{
interface = 'br-client',
mode = 'slave',
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.
Finish editing this message first!
Please register or to comment