[modules] add speed test module
This commit is contained in:
parent
e9b917c214
commit
72deb7eaf8
4 changed files with 59 additions and 4 deletions
|
@ -228,16 +228,17 @@ class i3(object):
|
||||||
if affected_modules and not module.id in affected_modules:
|
if affected_modules and not module.id in affected_modules:
|
||||||
continue
|
continue
|
||||||
if not affected_modules and module.next_update:
|
if not affected_modules and module.next_update:
|
||||||
if module.parameter("interval", "") == "never":
|
|
||||||
continue
|
|
||||||
if now < module.next_update:
|
if now < module.next_update:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not redraw_only:
|
if not redraw_only:
|
||||||
module.update_wrapper()
|
module.update_wrapper()
|
||||||
if module.parameter("interval", "") != "never":
|
if module.parameter("interval", "") != "never":
|
||||||
module.next_update = now + util.format.seconds(
|
module.next_update = now + util.format.seconds(
|
||||||
module.parameter("interval", self.__config.interval())
|
module.parameter("interval", self.__config.interval())
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
module.next_update = sys.maxsize
|
||||||
for widget in module.widgets():
|
for widget in module.widgets():
|
||||||
if not widget.id in self.__content:
|
if not widget.id in self.__content:
|
||||||
self.__content[widget.id] = { "minimized": False }
|
self.__content[widget.id] = { "minimized": False }
|
||||||
|
|
|
@ -24,8 +24,6 @@ import core.decorators
|
||||||
import util.cli
|
import util.cli
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Module(core.module.Module):
|
class Module(core.module.Module):
|
||||||
@core.decorators.every(seconds=60)
|
@core.decorators.every(seconds=60)
|
||||||
def __init__(self, config, theme):
|
def __init__(self, config, theme):
|
||||||
|
|
52
bumblebee_status/modules/core/speedtest.py
Normal file
52
bumblebee_status/modules/core/speedtest.py
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# pylint: disable=C0111,R0903
|
||||||
|
|
||||||
|
"""Performs a speedtest - only updates when the "play" button is clicked
|
||||||
|
|
||||||
|
Requires the following python module:
|
||||||
|
* speedtest-cli
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import core.module
|
||||||
|
import core.widget
|
||||||
|
import core.decorators
|
||||||
|
|
||||||
|
import speedtest
|
||||||
|
|
||||||
|
|
||||||
|
class Module(core.module.Module):
|
||||||
|
@core.decorators.never
|
||||||
|
def __init__(self, config, theme):
|
||||||
|
super().__init__(config, theme, [])
|
||||||
|
|
||||||
|
self.background = True
|
||||||
|
self.__result = "waiting"
|
||||||
|
self.__running = False
|
||||||
|
|
||||||
|
start = self.add_widget(name="start")
|
||||||
|
main = self.add_widget(name="main", full_text=self.result)
|
||||||
|
|
||||||
|
def result(self, _):
|
||||||
|
return self.__result
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
self.__running = True
|
||||||
|
s = speedtest.Speedtest()
|
||||||
|
s.get_best_server()
|
||||||
|
s.download(threads=None)
|
||||||
|
s.upload(threads=None)
|
||||||
|
|
||||||
|
self.__result = "ping: {:.2f}ms down: {:.2f}Mbps up: {:.2f}Mbps".format(
|
||||||
|
s.results.ping,
|
||||||
|
s.results.download / 1024 / 1024,
|
||||||
|
s.results.upload / 1024 / 1024,
|
||||||
|
)
|
||||||
|
self.__running = False
|
||||||
|
|
||||||
|
def state(self, widget):
|
||||||
|
if widget.name == "start":
|
||||||
|
return "running" if self.__running else "not-running"
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
|
@ -281,5 +281,9 @@
|
||||||
},
|
},
|
||||||
"arandr": {
|
"arandr": {
|
||||||
"prefix": ""
|
"prefix": ""
|
||||||
|
},
|
||||||
|
"speedtest": {
|
||||||
|
"running": { "prefix": "\uf110" },
|
||||||
|
"not-running": { "prefix": "\uf144" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue