forked from streetturtle/awesome-wm-widgets
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3e18904
commit caf0879
Showing
4 changed files
with
151 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Net Speed Widget | ||
|
||
The widget and readme is in progress |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
------------------------------------------------- | ||
-- Net Speed Widget for Awesome Window Manager | ||
-- Shows current upload/download speed | ||
-- More details could be found here: | ||
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/net-speed-widget | ||
|
||
-- @author Pavel Makhov | ||
-- @copyright 2020 Pavel Makhov | ||
------------------------------------------------- | ||
|
||
local naughty = require("naughty") | ||
local watch = require("awful.widget.watch") | ||
local wibox = require("wibox") | ||
|
||
local HOME_DIR = os.getenv("HOME") | ||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/net-speed-widget/' | ||
local ICONS_DIR = WIDGET_DIR .. 'icons/' | ||
|
||
local function show_warning(message) | ||
naughty.notify { | ||
preset = naughty.config.presets.critical, | ||
title = 'Net Speed Widget', | ||
text = message | ||
} | ||
end | ||
|
||
local net_speed_widget = wibox.widget { | ||
{ | ||
id = 'rx_speed', | ||
forced_width = 55, | ||
align = 'right', | ||
widget = wibox.widget.textbox | ||
}, | ||
{ | ||
image = ICONS_DIR .. 'down.svg', | ||
widget = wibox.widget.imagebox | ||
}, | ||
{ | ||
image = ICONS_DIR .. 'up.svg', | ||
widget = wibox.widget.imagebox | ||
}, | ||
{ | ||
id = 'tx_speed', | ||
forced_width = 55, | ||
align = 'left', | ||
widget = wibox.widget.textbox | ||
}, | ||
layout = wibox.layout.fixed.horizontal, | ||
set_rx_text = function(self, new_rx_speed) | ||
self:get_children_by_id('rx_speed')[1]:set_text(tostring(new_rx_speed)) | ||
end, | ||
set_tx_text = function(self, new_tx_speed) | ||
self:get_children_by_id('tx_speed')[1]:set_text(tostring(new_tx_speed)) | ||
end | ||
} | ||
|
||
local prev_rx = 0 | ||
local prev_tx = 0 | ||
|
||
local function convert_to_h(bytes) | ||
local speed | ||
local dim | ||
local bits = bytes * 8 | ||
if bits < 1000 then | ||
speed = bits | ||
dim = 'b/s' | ||
elseif bits < 1000000 then | ||
speed = bits/1000 | ||
dim = 'kb/s' | ||
elseif bits < 1000000000 then | ||
speed = bits/1000000 | ||
dim = 'mb/s' | ||
elseif bits < 1000000000000 then | ||
speed = bits/1000000000 | ||
dim = 'gb/s' | ||
else | ||
speed = tonumber(bits) | ||
dim = 'b/s' | ||
end | ||
return math.floor(speed + 0.5) .. dim | ||
end | ||
|
||
local function split(string_to_split, separator) | ||
if separator == nil then separator = "%s" end | ||
local t = {} | ||
|
||
for str in string.gmatch(string_to_split, "([^".. separator .."]+)") do | ||
table.insert(t, str) | ||
end | ||
|
||
return t | ||
end | ||
|
||
local function worker(args) | ||
|
||
local args = args or {} | ||
|
||
if args.interface == nil then | ||
show_warning("Interface name is not specified") | ||
return | ||
end | ||
|
||
local interface = args.interface | ||
|
||
local update_widget = function(widget, stdout, stderr) | ||
|
||
local cur_vals = split(stdout, '\r\n') | ||
|
||
local cur_rx = cur_vals[1] | ||
local cur_tx = cur_vals[2] | ||
|
||
local speed_rx = cur_rx - prev_rx | ||
local speed_tx = cur_tx - prev_tx | ||
|
||
net_speed_widget:set_rx_text(convert_to_h(speed_rx)) | ||
net_speed_widget:set_tx_text(convert_to_h(speed_tx)) | ||
|
||
prev_rx = cur_rx | ||
prev_tx = cur_tx | ||
end | ||
|
||
watch(string.format([[bash -c "cat /sys/class/net/%s/statistics/*_bytes"]], interface), 1, update_widget, net_speed_widget) | ||
|
||
return net_speed_widget | ||
|
||
end | ||
|
||
return setmetatable(net_speed_widget, { __call = function(_, ...) return worker(...) end }) |