# -*- coding: utf-8 -*- import os import time from om.config import Config from om.handler import Handler from om.plugin import list_native_plugins from om.utils.logger import get_logger from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler log = get_logger("supervisor") class ConfigChangeHandler(FileSystemEventHandler): def __init__(self, supervisor, config_file='config.json'): self.supervisor = supervisor self.config_file = config_file def on_created(self, event): if event.src_path.endswith(self.config_file): self.supervisor.reload_config() def on_modified(self, event): if event.src_path.endswith(self.config_file): self.supervisor.reload_config() class Supervisor(object): '''Schedules the remote metrics calls for monitored hosts. Delegates handling of
# -*- coding: utf-8 -*- from om.plugin import list_plugins, list_default_plugins from om.executor import Executor from om.utils.logger import get_logger log = get_logger("machine") class Machine(object): def __init__(self, host, machine_ssh, machine_metrics): self.host = host self.machine_ssh = machine_ssh self.plugins = Machine.load_plugins(machine_metrics) def run_plugins(self): executor = Executor(self.host, **self.machine_ssh) executor.start() res = [plugin.execute(executor) for plugin in self.plugins] executor.stop() return res def __repr__(self): return "<Machine executor='%s' plugins=%s>" % \ (self.executor, self.plugins) @staticmethod def load_plugins(configs): if not configs: plugins = list_default_plugins()
# -*- coding: utf-8 -*- import time import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText import sqlite3 import redis from om.utils.logger import get_logger log = get_logger("metrics") class Handler(object): '''Base class for handlers ''' def __init__(self): self._enabled = True @classmethod def _handles(cls, result): return lambda handler: handler.handles(result) @classmethod def _handle(cls, result): return lambda handler: handler.handle(result) @property def enabled(self):
# -*- coding: utf-8 -*- import os, errno import json import getpass from om.handler import JSONStdoutHandler, StdoutHandler, MailHandler, RedisHandler, Sqlite3Handler from om.machine import Machine from om.utils.logger import get_logger log = get_logger("config") def mkdir_p(path): try: os.makedirs(path) except os.error, e: if e.errno != errno.EEXIST: raise class Config(object): def __init__(self, path): self._config = {} self._load_config(path) self._handlers = [] self._hosts = [] def __getitem__(self, key): return self._config.__getitem__(key)