diff --git a/modules/contrib/docker_ps.py b/modules/contrib/docker_ps.py new file mode 100644 index 0000000..073c140 --- /dev/null +++ b/modules/contrib/docker_ps.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +"""Displays the number of docker containers running + +Requires the following python packages: + * docker + +""" + +try: + import docker +except ImportError: + pass + +from requests.exceptions import ConnectionError + +import bumblebee.input +import bumblebee.output +import bumblebee.engine + + +class Module(bumblebee.engine.Module): + def __init__(self, engine, config): + widgets = bumblebee.output.Widget(full_text=self.status) + super(Module, self).__init__(engine, config, widgets) + self._status = self.status + self._state = self.state + + def update(self, widgets): + self._status = self.status + self._state = self.state + + def state(self, widget): + state = [] + status = self.status(widget) + if status == "OK - 0": + state.append("warning") + elif status in ["n/a", "Daemon off"]: + state.append("critical") + return state + + def status(self, widget): + try: + cli = docker.DockerClient(base_url='unix://var/run/docker.sock') + cli.ping() + except ConnectionError: + return "Daemon off" + except Exception: + return "n/a" + return "OK - {}".format(len(cli.containers.list(filters={'status': "running"})))