Source code for

import gc
import os
import signal
from datetime import datetime

from errbot import BotPlugin, arg_botcmd, botcmd
from errbot.utils import format_timedelta, global_restart

[docs]class Health(BotPlugin):
[docs] @botcmd(template="status") def status(self, msg, args): """If I am alive I should be able to respond to this one""" plugins_statuses = self.status_plugins(msg, args) loads = self.status_load(msg, args) gc = self.status_gc(msg, args) return { "plugins_statuses": plugins_statuses["plugins_statuses"], "loads": loads["loads"], "gc": gc["gc"], }
[docs] @botcmd(template="status_load") def status_load(self, _, args): """shows the load status""" try: from posix import getloadavg loads = getloadavg() except Exception: loads = None return {"loads": loads}
[docs] @botcmd(template="status_gc") def status_gc(self, _, args): """shows the garbage collection details""" return {"gc": gc.get_count()}
[docs] @botcmd(template="status_plugins") def status_plugins(self, _, args): """shows the plugin status""" pm = self._bot.plugin_manager all_blacklisted = pm.get_blacklisted_plugin() all_loaded = pm.get_all_active_plugin_names() all_attempted = sorted(pm.plugin_infos.keys()) plugins_statuses = [] for name in all_attempted: if name in all_blacklisted: if name in all_loaded: plugins_statuses.append(("BA", name)) else: plugins_statuses.append(("BD", name)) elif name in all_loaded: plugins_statuses.append(("A", name)) elif ( pm.get_plugin_obj_by_name(name) is not None and pm.get_plugin_obj_by_name(name).get_configuration_template() is not None and pm.get_plugin_configuration(name) is None ): plugins_statuses.append(("C", name)) else: plugins_statuses.append(("D", name)) return {"plugins_statuses": plugins_statuses}
[docs] @botcmd def uptime(self, _, args): """Return the uptime of the bot""" u = format_timedelta( - self._bot.startup_time) since = self._bot.startup_time.strftime("%A, %b %d at %H:%M") return f"I've been up for {u} (since {since})."
# noinspection PyUnusedLocal
[docs] @botcmd(admin_only=True) def restart(self, msg, args): """Restart the bot.""" self.send(msg.frm, "Deactivating all the plugins...") self._bot.plugin_manager.deactivate_all_plugins() self.send(msg.frm, "Restarting") self._bot.shutdown() global_restart() return "I'm restarting..."
# noinspection PyUnusedLocal
[docs] @arg_botcmd( "--confirm", dest="confirmed", action="store_true", help="confirm you want to shut down", admin_only=True, ) @arg_botcmd( "--kill", dest="kill", action="store_true", help="kill the bot instantly, don't shut down gracefully", admin_only=True, ) def shutdown(self, msg, confirmed, kill): """ Shutdown the bot. Useful when the things are going crazy and you don't have access to the machine. """ if not confirmed: yield "Please provide `--confirm` to confirm you really want me to shut down." return if kill: yield "Killing myself right now!" os.kill(os.getpid(), signal.SIGKILL) else: yield "Roger that. I am shutting down." os.kill(os.getpid(), signal.SIGINT)