66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
# 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 core.module
|
|
import core.widget
|
|
import core.decorators
|
|
|
|
class Module(core.module.Module):
|
|
UNK = 'UNK'
|
|
|
|
@core.decorators.every(seconds=30)
|
|
def __init__(self, config, theme):
|
|
super().__init__(config, theme, core.widget.Widget(self.output))
|
|
|
|
self.__label = self.parameter('label')
|
|
self.__target = self.parameter('target')
|
|
self.__expect = self.parameter('expect', '200')
|
|
|
|
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 as e:
|
|
print(e)
|
|
return self.UNK
|
|
else:
|
|
status = str(res.status_code)
|
|
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):
|
|
self.__status = 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
|