Source code for

import gc
import os
import signal

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

[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([ for p in pm.all_candidates]) 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 """ return "I've been up for %s %s (since %s)" % (args, format_timedelta( - self._bot.startup_time), self._bot.startup_time.strftime('%A, %b %d at %H:%M'))
# 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)