MSV FM

[email protected]: ~ $
Path : /usr/lib/fm-agent/library/
File Upload :
Current < : //usr/lib/fm-agent/library/plugin_driver.py

import os
import sys
import time
import logging
import optparse
from plugin_manager import PluginManager
from schedule import Schedule
import container_discovery


class PluginDriver(object):
    def __init__(self, brand, pkg_dir, base_config_dir, base_custom_plugin_dir):
        self.config_file = os.path.join(base_config_dir, pkg_dir, "%s_agent.cfg" % brand)
        self.custom_plugin_dir = os.path.join(base_custom_plugin_dir, pkg_dir)

    def set_up_logging(self, verbose):
        LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'

        handler = logging.StreamHandler()
        handler.setFormatter(logging.Formatter(LOG_FORMAT))

        root_logger = logging.getLogger()
        root_logger.addHandler(handler)

        self.log = logging.getLogger(self.__class__.__name__)

        if verbose:
           root_logger.setLevel(logging.DEBUG)
        else:
           root_logger.setLevel(logging.WARN)
           self.log.setLevel(logging.INFO)

    def parse_arguments(self):
        parser = optparse.OptionParser()
        parser.add_option("-p", "--plugin-textkey", action="store", dest="plugin_textkey")
        parser.add_option("-r", "--resource-textkey", action="store", dest="resource_textkey")
        parser.add_option("-o", "--option", action="store", dest="option")
        parser.add_option("-d", "--plugin-directory", action="store", dest="plugin_directory", default=self.custom_plugin_dir, help="default %s" % self.custom_plugin_dir)
        parser.add_option("-c", "--config-file", action="store", dest="config_file", default=self.config_file, help="default %s" % self.config_file)
        parser.add_option("--container-id", action="store", dest="container_id", help="docker container id to check")
        parser.add_option("--count", action="store", dest="count", type="int", default=1, help="number of checks run, default 1")
        parser.add_option("--interval", action="store", dest="interval", type="int", default=1, help="interval between checks, default 1 second")
        parser.add_option("-v", "--verbose", action="store_true", dest="verbose")

        options, args = parser.parse_args()

        # validate required arguments
        if not options.plugin_textkey or not options.resource_textkey:
            print("Specify plugin-textkey and resource-textkey\n")
            parser.print_help()
            sys.exit(1)

        return options

    def get_container(self, container_id):
        can_access_docker = container_discovery.check_access()
        if can_access_docker != "success":
            self.log.error("cannot access to docker: %s" % can_access_docker)
            return None

        found_container = container_discovery.find_docker_container(container_id)
        if not found_container:
            self.log.error("container %s not found" % container_id)
            return None

        return found_container

    def main(self):
        # parse arguments
        options = self.parse_arguments()

        # set up logging
        self.set_up_logging(options.verbose)

        # check config file
        if not os.path.exists(options.config_file):
            self.log.warn("config file '%s' not exist" % options.config_file)

        # convert option to '"option"' format, so that schedule can do json.loads()
        if options.option:
            options.option = '"%s"' % options.option

        db = {}
        server_key = None

        # docker container
        if options.container_id:
            container = self.get_container(options.container_id)
            if not container:
                return

            db["docker_containers"] = {
                options.container_id: container
            }
            server_key = ":" + options.container_id

        # load plugins
        plugin_manager = PluginManager(db, options.config_file, options.plugin_directory)
        if options.plugin_textkey not in plugin_manager.plugins:
            self.log.error("Plugin %s not found" % options.plugin_textkey)
            return

        # create schedule to call check
        schedule = Schedule({
            "id": 1,
            "plugin_textkey": options.plugin_textkey,
            "resource_textkey": options.resource_textkey,
            "option": options.option,
            "server_key": server_key,
            "frequency": 60,
            "thresholds": []
        })

        for i in range(options.count):
            # run plugin
            value, _ = schedule.check(plugin_manager, {})

            self.log.info("%s.%s returned %s" % (schedule.plugin_textkey, schedule.resource_textkey, value))
            if schedule.cached_results:
                self.log.info("  cached_results: %s" % schedule.cached_results)

            # if this is not the last turn, sleep options.interval seconds
            if i < options.count - 1:
                time.sleep(options.interval)
Bethany
Bethany
0%

THE FINEST HOTEL NEAR LAKE KIVU

The Perfect Base For You

Required fields are followed by *





EC1A68011

About Us

Delicious Interior With The Pinch Of Everything

Bethany Investment group is Presbyterian church in Rwanda(EPR) company that manage Hotel and Guest house in Karongi (Bethany Hotel), ISANO branch in GIKONDO(Kigali), Kiyovu branch(Kigali), AMIZERO branch(Nyagatare-East) and Gisenyi Branch(Rubavu).

Accomodation

Get a Comfortable Room
Feel The Comfort

Get a comfortable room and feel our hotel’s comfort. Bethany Hotel features a variety of fully furnished rooms with extra space, Executive rooms, Deluxe rooms with a beautiful lake view and garden space, Deluxe rooms, comfort rooms, family rooms and standard rooms at your service.

Standard Single

Services

We Provide Top Class Facility
Especially For You

Beach BBQ Party

Kick back on the beach& and enjoy our berbecue from our masterchef

Breakfast

Kick back at our hotels& enjoy our breakfast from our masterchef

Conference Hall

Kick back at our hotels& enjoy our conference halls from all bethany branches

Enjoy with your partner

Honeymoon Package

80%

Get In Touch

Don’t Miss Any Update

    +

    Search your Room

    Required fields are followed by *