# pylint: disable=C0111,R0903 """Display HTTP status code Parameters: * http_status.label: Prefix label (optional) * http_status.target: Target to retrieve the HTTP status from * http_status.expect: Expected HTTP status """ from requests import head import psutil import bumblebee.input import bumblebee.output import bumblebee.engine class Module(bumblebee.engine.Module): UNK = 'UNK' def __init__(self, engine, config): widget = bumblebee.output.Widget(full_text=self.output) super(Module, self).__init__(engine, config, widget) self._label = self.parameter('label') self._target = self.parameter('target') self._expect = self.parameter('expect', '200') self._status = self.getStatus() self._output = self.getOutput() def labelize(self, s): if self._label is None: return s return '{}: {}'.format(self._label, s) def getStatus(self): try: res = head(self._target) except Exception: return self.UNK else: status = str(res.status_code) self._status = status return status def getOutput(self): if self._status == self._expect: return self.labelize(self._status) else: reason = ' != {}'.format(self._expect) return self.labelize('{}{}'.format(self._status, reason)) def output(self, widget): return self._output def update(self, widgets): self.getStatus() self._output = self.getOutput() def state(self, widget): if self._status == self.UNK: return 'warning' if self._status != self._expect: return 'critical' return self._output # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4