X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/1d5e6f2516b5b3fd8a50d7dfe9dc7cb3ddb9ff40..912bd26ede8901c98fd8d7a35f8493ee448109ad:/widgets/net.lua diff --git a/widgets/net.lua b/widgets/net.lua index 2b06622..983da41 100644 --- a/widgets/net.lua +++ b/widgets/net.lua @@ -13,8 +13,6 @@ local notify_fg = require("beautiful").fg_focus local naughty = require("naughty") local wibox = require("wibox") -local io = { popen = io.popen } -local tostring = tostring local string = { format = string.format, gsub = string.gsub, match = string.match } @@ -23,15 +21,10 @@ local setmetatable = setmetatable -- Network infos -- lain.widgets.net -local net = { - last_t = 0, - last_r = 0 -} +local net = {} function net.get_device() - f = io.popen("ip link show | cut -d' ' -f2,9") - ws = f:read("*a") - f:close() + local ws = helpers.read_pipe("ip link show | cut -d' ' -f2,9") ws = ws:match("%w+: UP") or ws:match("ppp%w+: UNKNOWN") if ws ~= nil then return ws:match("(%w+):") @@ -42,7 +35,7 @@ end local function worker(args) local args = args or {} - local timeout = args.timeout or 2 + local timeout = args.timeout or 1 local units = args.units or 1024 --kb local notify = args.notify or "on" local screen = args.screen or 1 @@ -53,35 +46,44 @@ local function worker(args) net.widget = wibox.widget.textbox('') helpers.set_map(iface, true) + helpers.set_map("net_t", 0) + helpers.set_map("net_r", 0) function update() - net_now = {} + net_now = { + sent = "0.0", + received = "0.0" + } if iface == "" or string.match(iface, "network off") then iface = net.get_device() end - net_now.carrier = helpers.first_line('/sys/class/net/' .. iface .. - '/carrier') or "0" - net_now.state = helpers.first_line('/sys/class/net/' .. iface .. - '/operstate') or "down" local now_t = helpers.first_line('/sys/class/net/' .. iface .. '/statistics/tx_bytes') or 0 local now_r = helpers.first_line('/sys/class/net/' .. iface .. '/statistics/rx_bytes') or 0 - net_now.sent = tostring((now_t - net.last_t) / timeout / units) - net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".") + if now_t ~= helpers.get_map("net_t") + or now_r ~= helpers.get_map("net_r") then + net_now.carrier = helpers.first_line('/sys/class/net/' .. iface .. + '/carrier') or "0" + net_now.state = helpers.first_line('/sys/class/net/' .. iface .. + '/operstate') or "down" - net_now.received = tostring((now_r - net.last_r) / timeout / units) - net_now.received = string.gsub(string.format('%.1f', net_now.received), ",", ".") + net_now.sent = (now_t - net.last_t) / timeout / units + net_now.sent = string.gsub(string.format('%.1f', net_now.sent), ",", ".") - widget = net.widget - settings() + net_now.received = (now_r - net.last_r) / timeout / units + net_now.received = string.gsub(string.format('%.1f', net_now.received), ",", ".") - net.last_t = now_t - net.last_r = now_r + widget = net.widget + settings() + + helpers.set_map("net_t", now_t) + helpers.set_map("net_r", now_r) + end if net_now.carrier ~= "1" and notify == "on" then @@ -103,7 +105,8 @@ local function worker(args) end end - helpers.newtimer(iface, timeout, update) + helpers.newtimer(iface, timeout, update, false) + return net.widget end