From 151c94c5f3d0a786ce1058481f1c4c5c908bc305 Mon Sep 17 00:00:00 2001 From: Von Random Date: Thu, 28 Mar 2019 13:21:15 +0300 Subject: vdstatus, plugins: some refactoring and better usage of dict() methods; rename fga to fortune and make uri configurable --- plugins/__init__.py | 18 +++++++----------- plugins/batt.py | 12 ++++++------ plugins/date.py | 8 +++++--- plugins/disk.py | 6 ++++-- plugins/fga.py | 35 ----------------------------------- plugins/fortune.py | 37 +++++++++++++++++++++++++++++++++++++ plugins/load.py | 6 ++++-- plugins/mem.py | 6 ++++-- plugins/pacman.py | 14 +++++++------- plugins/ping.py | 12 ++++++++---- vdstatus | 7 +++---- 11 files changed, 85 insertions(+), 76 deletions(-) delete mode 100644 plugins/fga.py create mode 100644 plugins/fortune.py diff --git a/plugins/__init__.py b/plugins/__init__.py index 68df0c9..1a46771 100644 --- a/plugins/__init__.py +++ b/plugins/__init__.py @@ -2,21 +2,17 @@ import threading import time -def parse_config(config, defaults): - result = dict() - for key in defaults: - result[key] = config[key] if key in config else defaults[key] - return result +PLUGIN_DEFAULTS = {'freq': 1, 'hide_ok': True} class PluginThreadCommon: - def __init__(self, config, defaults=dict()): - if 'freq' not in defaults: - defaults['freq'] = 1 - if 'hide_ok' not in defaults: - defaults['hide_ok'] = True - self.conf = parse_config(config, defaults) + def __init__(self, config, defaults=None): self.status = dict() + self.conf = dict() + self.conf.update(PLUGIN_DEFAULTS) + if defaults: + self.conf.update(defaults) + self.conf.update(config) self.hide = False self.thread = threading.Thread(target=self.run) self.thread.daemon = True diff --git a/plugins/batt.py b/plugins/batt.py index 90c52ea..b89d00d 100644 --- a/plugins/batt.py +++ b/plugins/batt.py @@ -2,16 +2,16 @@ import plugins BATTERY_DIR = '/sys/class/power_supply/BAT0/' +BATT_DEFAULTS = { + 'problem': 15, + 'symbol_charging': '\u2191', + 'symbol_discharging': '\u2193' +} class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = { - 'problem': 15, - 'symbol_charging': '\u2191', - 'symbol_discharging': '\u2193' - } - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, BATT_DEFAULTS) def main(self): with \ diff --git a/plugins/date.py b/plugins/date.py index ee6009a..8afe76e 100644 --- a/plugins/date.py +++ b/plugins/date.py @@ -2,12 +2,14 @@ import datetime import plugins +DATE_DEFAULTS = {'format': '%c'} + + class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = {'format': '%c', 'tz': None} - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, DATE_DEFAULTS) self.timezone = None - if self.conf['tz']: + if 'tz' in self.conf: import pytz self.timezone = pytz.timezone(self.conf['tz']) diff --git a/plugins/disk.py b/plugins/disk.py index 6ab9c2b..e705f4e 100644 --- a/plugins/disk.py +++ b/plugins/disk.py @@ -2,10 +2,12 @@ import plugins import psutil +DISK_DEFAULTS = {'partition': '/', 'problem': 80, 'freq': 15} + + class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = {'partition': '/', 'problem': 80, 'freq': 15} - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, DISK_DEFAULTS) def main(self): du_stat = psutil.disk_usage(self.conf['partition']) diff --git a/plugins/fga.py b/plugins/fga.py deleted file mode 100644 index ecc5857..0000000 --- a/plugins/fga.py +++ /dev/null @@ -1,35 +0,0 @@ -import plugins -import requests -import time - - -URI = 'http://fucking-great-advice.ru/api/random' -class PluginThread(plugins.PluginThreadCommon): - def __init__(self, config): - defaults = {'freq': 120, 'retry': 3} - super(PluginThread, self).__init__(config, defaults) - self.retry = False - - - def main(self): - try: - req = requests.get(URI, timeout=2) - advice = req.json()['text'] if req.status_code == 200 else 'N/A' - self.retry = False - except requests.exceptions.Timeout: - advice = 'N/A (timeout)' - self.retry = True - except requests.exceptions.ConnectionError: - advice = 'N/A (offline)' - self.retry = True - self.status['full_text'] = advice - - - def run(self): - while True: - self.main() - if self.retry: - sleep_time = self.conf['retry'] - else: - sleep_time = self.conf['freq'] - time.sleep(sleep_time) diff --git a/plugins/fortune.py b/plugins/fortune.py new file mode 100644 index 0000000..562d653 --- /dev/null +++ b/plugins/fortune.py @@ -0,0 +1,37 @@ +import plugins +import requests +import time + + +FGA_DEFAULTS = { + 'uri': 'http://fucking-great-advice.ru/api/random', + 'freq': 120, 'retry': 3 +} + + +class PluginThread(plugins.PluginThreadCommon): + def __init__(self, config): + super(PluginThread, self).__init__(config, FGA_DEFAULTS) + self.retry = False + + def main(self): + try: + req = requests.get(self.conf['uri'], timeout=2) + advice = req.json()['text'] if req.status_code == 200 else 'N/A' + self.retry = False + except requests.exceptions.Timeout: + advice = 'N/A (timeout)' + self.retry = True + except requests.exceptions.ConnectionError: + advice = 'N/A (offline)' + self.retry = True + self.status['full_text'] = advice + + def run(self): + while True: + self.main() + if self.retry: + sleep_time = self.conf['retry'] + else: + sleep_time = self.conf['freq'] + time.sleep(sleep_time) diff --git a/plugins/load.py b/plugins/load.py index 8567fdd..75dd4a0 100644 --- a/plugins/load.py +++ b/plugins/load.py @@ -2,10 +2,12 @@ import os import plugins +LOAD_DEFAULTS = {'freq': 20, 'problem': 1} + + class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = {'freq': 20, 'problem': 1} - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, LOAD_DEFAULTS) def main(self): loads = os.getloadavg() diff --git a/plugins/mem.py b/plugins/mem.py index 14c1b16..1abc7eb 100644 --- a/plugins/mem.py +++ b/plugins/mem.py @@ -2,10 +2,12 @@ import psutil import plugins +MEM_DEFAULTS = {'problem': 85} + + class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = {'problem': 85} - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, MEM_DEFAULTS) def main(self): mem_stat = psutil.virtual_memory() diff --git a/plugins/pacman.py b/plugins/pacman.py index b5e595b..edf36e9 100644 --- a/plugins/pacman.py +++ b/plugins/pacman.py @@ -2,15 +2,15 @@ import plugins import subprocess +PACMAN_DEFAULTS = { + 'cmd': ('/usr/bin/pacman', '-Qu'), + 'title': 'UPD', 'freq': 15, 'problem': 10 +} + + class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = { - 'cmd': ('/usr/bin/pacman', '-Qu'), - 'title': 'UPD', - 'freq': 15, - 'problem': 10 - } - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, PACMAN_DEFAULTS) self.format_status(0) def format_status(self, count): diff --git a/plugins/ping.py b/plugins/ping.py index 2f0bb42..8e6a391 100644 --- a/plugins/ping.py +++ b/plugins/ping.py @@ -3,15 +3,19 @@ import random import plugins +PING_DEFAULTS = { + 'hosts': list(), 'title': 'PING', 'timeout': 150 +} + + class PluginThread(plugins.PluginThreadCommon): def __init__(self, config): - defaults = {'hosts': list(), 'title': 'PING', 'timeout': 150} - super(PluginThread, self).__init__(config, defaults) + super(PluginThread, self).__init__(config, PING_DEFAULTS) self.format_status('n/a') def format_status(self, state): self.status['full_text'] = self.conf['title'] + ': ' + state - if state == 'on': + if state == 'up': self.status['urgent'] = False self.hide = True else: @@ -26,4 +30,4 @@ class PluginThread(plugins.PluginThreadCommon): if response == 0: self.format_status('on') break - self.format_status('off') + self.format_status('down') diff --git a/vdstatus b/vdstatus index d3f5425..8dd1ec9 100755 --- a/vdstatus +++ b/vdstatus @@ -6,7 +6,6 @@ import os import sys import time import yaml -import plugins DEFAULT_CONFIG = os.path.join(os.environ['HOME'], '.config/vdstatus/conf.yaml') @@ -28,10 +27,10 @@ def parse_arguments(): class PluginRunner: def __init__(self, config_file=DEFAULT_CONFIG): - config = dict() + self.conf = dict() + self.conf.update(DEFAULTS) with open(config_file) as config_data: - config = yaml.load(config_data) - self.conf = plugins.parse_config(config, DEFAULTS) + self.conf.update(yaml.load(config_data)) self.plugins_loaded = list() self.format_output = self.format_term for plugin in self.conf['plugins']: -- cgit v1.2.3