Exemplo n.º 1
0
from signal import SIGTERM
from threading import Thread

import websocket

from bat_agent.common import log
from bat_agent.common.constants import Constant
from bat_agent.common.util import InstanceConfigUtil
from bat_agent.engine.agent import AgentService
from bat_agent.listener.default_server import DefaultListenerServer
from bat_agent.monitor.hypervisor import HypervisorMonitor
from bat_agent.monitor.instance import InstanceMonitor
from bat_agent.monitor.network import NetworkMonitor
from bat_agent.notifier.send import AgentNotifier

LOGGER = log.getLogger(Constant.LOGGER_RPC_SERVER)


class DefaultAgentService(AgentService):
    """
    dictionary are not immutable so danger danger
    """

    def __init__(self, cfg):
        self._cfg = cfg
        self._instanceconfigurations = {}
        self._monitored_instance = {}
        self._monitored_network = {}
        self._monitored_hypervisor = {}
        self._failed_instances = {}
        self._hostname = self._cfg["Host"]["hostname"]
Exemplo n.º 2
0
import sys
import uuid

import pika

from bat_agent.common import log
from bat_agent.common.constants import Constant

LOGGER = log.getLogger(Constant.LOGGER_LISTENER)

from bat_agent.common.constants import Constant
import simplejson


class AgentNotifier(object):
    def __init__(self, cfg, queue_section_name, hostname=None):
        """Setup the example publisher object, passing in the URL we will use
        to connect to RabbitMQ.

        :param str amqp_url: The URL for connecting to RabbitMQ

        """

        self._rabbit_cfg = cfg[Constant.CONFIG_RABBIT_SECTION]
        self._queue_cfg = cfg[queue_section_name]
        self._connection = None
        self.response = None
        self.corr_id = None
        self._consumer_tag = None
        if hostname is None:
            self.ROUTING_KEY = self._queue_cfg['notifier_routing_key']
Exemplo n.º 3
0
if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'bat_agent', '__init__.py')):
    sys.path.insert(0, POSSIBLE_TOPDIR)

from bat_agent.monitor.daemon import batMonitorDaemon
import time
from bat_agent.common.constants import Constant
from bat_agent.notifier import send
from bat_agent.rules import instance
from bat_agent.common import log
from bat_agent.common.util import AgentConfigParser
import json
from  bat_agent.rpcclient.api import API
import timeit

LOGGER = log.getLogger(Constant.LOGGER_MONITOR)


class HypervisorMonitor(batMonitorDaemon):
    def __init__(self, pidfile, instance_configuration_json, cfg):
        batMonitorDaemon.__init__(self, pidfile, instance_configuration_json)
        self._cfg = cfg

    def run(self):
        LOGGER.info("Running hypervisor monitor for instance %s" % self._instance_id_to_monitor)
        if self._instance_configuration_json is None:
            LOGGER.error("Instance %s configuration is missing during monitoring")
        else:
            try:
                hostname = self._hypervisor_to_monitor["hostname"]
                url = "ws://" + hostname + ":3000/events"
Exemplo n.º 4
0
import sys
import time
import os
import atexit
from signal import SIGTERM
from bat_agent.common import log
from bat_agent.common.constants import Constant

LOGGER = log.getLogger(Constant.LOGGER_RPC_SERVER)


class batRPCDaemon:
    """
        A generic daemon class.
        Usage: subclass the Daemon class and override the run() method
    """
    startmsg = "RPC server started with pid %s"
    """
       A generic daemon class.

       Usage: subclass the Daemon class and override the run() method
       """
    def __init__(self,
                 pidfile,
                 stdin='/dev/null',
                 stdout='/dev/null',
                 stderr='/dev/null'):
        self.stdin = stdin
        self.stdout = stdout
        self.stderr = stderr
        self.pidfile = pidfile
Exemplo n.º 5
0
import json
import os
import sys
import time

from bat_agent.common import log
from bat_agent.common.constants import Constant
from bat_agent.common.util import AgentConfigParser
from  bat_agent.rpcclient.api import API

LOGGER = log.getLogger(Constant.LOGGER_MONITOR)
EVENT_LOGGER = log.getLogger(Constant.LOGGER_EVENT)


class Rules():

    @staticmethod
    def publish(routing_key, jsondata, instances=None, notifier=None):
        if notifier is not None:
            notifier.reinit(routing_key, '', '')
        if instances is not None:
            notifier.notify({"return_code": 501, "id": instances["id"], "message": jsondata})
        else:
            notifier.notify({"return_code": 501, "id": jsondata, "message": jsondata})

    @staticmethod
    def shutdown_monitoring(instanceid, jsondata, instances=None, notifier=None):
        cfg = AgentConfigParser()
        cfg.read(os.path.abspath(os.path.join(os.path.dirname(__file__), '../config.cfg')))
        cfg = cfg.as_dic()
        LOGGER.info(cfg)
Exemplo n.º 6
0
# it will override what happens to be installed in /usr/(local/)lib/python...
POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir, os.pardir, os.pardir))

if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'bat_agent', '__init__.py')):
    sys.path.insert(0, POSSIBLE_TOPDIR)

from bat_agent.monitor.daemon import batMonitorDaemon
import time
from bat_agent.common.constants import Constant
from bat_agent.common import log
from bat_agent.common.util import AgentConfigParser
from bat_agent.notifier import send
from bat_agent.rules import instance
import string

LOGGER = log.getLogger(Constant.LOGGER_MONITOR)
FAILURE_LOGGER = log.getLogger(Constant.LOGGER_FAILURE)


class NetworkMonitor(batMonitorDaemon):
    def __init__(self, pidfile, instance_configuration_json, cfg):
        batMonitorDaemon.__init__(self, pidfile, instance_configuration_json)
        self._cfg = cfg

        #
        # Right now we are monitoring tap interfaces going down.  We may need to monitor
        # an actual physical interface (like FTCore does for KVM-FT).  If we need to
        # monitor an actual physical interface, we can always open the /etc/nova/kvmax.conf
        # file and extract it from there.  Of course, in that case, all network monitoring
        # processes create by a particular bat agent will be monitoring the same
        # interface, so perhaps then it would be advantageous to rearchitect this piece
Exemplo n.º 7
0
import simplejson

import pika

from bat_agent.common import log
from bat_agent.common.constants import Constant
from bat_agent.engine.default_agent import DefaultAgentService
from bat_agent.rpcserver.daemon import batRPCDaemon
from bat_agent.rpcserver.endpoint import RPCEndpoint
from bat_agent.rpcserver.server import RPCServer

LOGGER = log.getLogger(Constant.LOGGER_RPC_SERVER)
EVENT_LOGGER = log.getLogger(Constant.LOGGER_EVENT)


class DefaultRPCServer(batRPCDaemon, RPCServer):
    def __init__(self, cfg, log_name=None):
        batRPCDaemon.__init__(self, cfg[Constant.CONFIG_PIDFILE_SECTION]["server"])
        RPCServer.__init__(self, cfg)
        self.cfg = cfg

        self._defaultagentservice = DefaultAgentService(cfg)

    def run(self):
        self.start_rpc()

    def getconfig(self, instanceid):
        return self._defaultagentservice.getconfig()

    def getagentconfig(self, dummy=None):
        return self.cfg
Exemplo n.º 8
0
import simplejson

import pika

from bat_agent.common import log
from bat_agent.common.constants import Constant
from bat_agent.engine.default_agent import DefaultAgentService
from bat_agent.rpcserver.daemon import batRPCDaemon
from bat_agent.rpcserver.endpoint import RPCEndpoint
from bat_agent.rpcserver.server import RPCServer

LOGGER = log.getLogger(Constant.LOGGER_RPC_SERVER)
EVENT_LOGGER = log.getLogger(Constant.LOGGER_EVENT)


class DefaultRPCServer(batRPCDaemon, RPCServer):
    def __init__(self, cfg, log_name=None):
        batRPCDaemon.__init__(self,
                              cfg[Constant.CONFIG_PIDFILE_SECTION]["server"])
        RPCServer.__init__(self, cfg)
        self.cfg = cfg

        self._defaultagentservice = DefaultAgentService(cfg)

    def run(self):
        self.start_rpc()

    def getconfig(self, instanceid):
        return self._defaultagentservice.getconfig()

    def getagentconfig(self, dummy=None):