예제 #1
0
def notify(message):
    """Notifies the recipient of the desired event given the model.
    Log notifications using cinder's default logging system"""

    priority = message.get("priority", FLAGS.default_notification_level)
    priority = priority.lower()
    logger = logging.getLogger("cinder.notification.%s" % message["event_type"])
    getattr(logger, priority)(json.dumps(message))
예제 #2
0
 def setUp(self):
     super(JSONFormatterTestCase, self).setUp()
     self.log = log.getLogger('test-json')
     self.stream = cStringIO.StringIO()
     handler = logging.StreamHandler(self.stream)
     handler.setFormatter(log.JSONFormatter())
     self.log.logger.addHandler(handler)
     self.log.logger.setLevel(logging.DEBUG)
예제 #3
0
 def setUp(self):
     super(CinderLoggerTestCase, self).setUp()
     levels = FLAGS.default_log_levels
     levels.append("cinder-test=AUDIT")
     self.flags(default_log_levels=levels,
                verbose=True)
     log.setup()
     self.log = log.getLogger('cinder-test')
예제 #4
0
 def setUp(self):
     super(CinderFormatterTestCase, self).setUp()
     self.flags(logging_context_format_string="HAS CONTEXT "
                                              "[%(request_id)s]: "
                                              "%(message)s",
                logging_default_format_string="NOCTXT: %(message)s",
                logging_debug_format_suffix="--DBG")
     self.log = log.getLogger()
     self.stream = cStringIO.StringIO()
     self.handler = logging.StreamHandler(self.stream)
     self.handler.setFormatter(log.LegacyCinderFormatter())
     self.log.logger.addHandler(self.handler)
     self.level = self.log.logger.getEffectiveLevel()
     self.log.logger.setLevel(logging.DEBUG)
예제 #5
0
    def setUp(self):
        super(DriverTestCase, self).setUp()
        self.flags(volume_driver=self.driver_name,
                   logging_default_format_string="%(message)s")
        self.volume = importutils.import_object(FLAGS.volume_manager)
        self.context = context.get_admin_context()
        self.output = ""

        def _fake_execute(_command, *_args, **_kwargs):
            """Fake _execute."""
            return self.output, None
        self.volume.driver.set_execute(_fake_execute)

        log = logging.getLogger()
        self.stream = cStringIO.StringIO()
        log.logger.addHandler(logging.logging.StreamHandler(self.stream))
예제 #6
0
    def test_error_notification(self):
        self.stubs.Set(cinder.flags.FLAGS, 'notification_driver',
            'cinder.notifier.rabbit_notifier')
        self.stubs.Set(cinder.flags.FLAGS, 'publish_errors', True)
        LOG = log.getLogger('cinder')
        log.setup()
        msgs = []

        def mock_notify(context, topic, data):
            msgs.append(data)

        self.stubs.Set(cinder.openstack.common.rpc, 'notify', mock_notify)
        LOG.error('foo')
        self.assertEqual(1, len(msgs))
        msg = msgs[0]
        self.assertEqual(msg['event_type'], 'error_notification')
        self.assertEqual(msg['priority'], 'ERROR')
        self.assertEqual(msg['payload']['error'], 'foo')
예제 #7
0
    def __init__(self, name, app, host=None, port=None, pool_size=None,
                       protocol=eventlet.wsgi.HttpProtocol):
        """Initialize, but do not start, a WSGI server.

        :param name: Pretty name for logging.
        :param app: The WSGI application to serve.
        :param host: IP address to serve the application.
        :param port: Port number to server the application.
        :param pool_size: Maximum number of eventlets to spawn concurrently.
        :returns: None

        """
        self.name = name
        self.app = app
        self.host = host or "0.0.0.0"
        self.port = port or 0
        self._server = None
        self._socket = None
        self._protocol = protocol
        self._pool = eventlet.GreenPool(pool_size or self.default_pool_size)
        self._logger = logging.getLogger("eventlet.wsgi.server")
        self._wsgi_logger = logging.WritableLogger(self._logger)
예제 #8
0
    def setUp(self):
        super(NotifierListTestCase, self).setUp()
        list_notifier._reset_drivers()
        # Mock log to add one to exception_count when log.exception is called

        def mock_exception(cls, *args):
            self.exception_count += 1

        self.exception_count = 0
        list_notifier_log = logging.getLogger('cinder.notifier.list_notifier')
        self.stubs.Set(list_notifier_log, "exception", mock_exception)
        # Mock no_op notifier to add one to notify_count when called.

        def mock_notify(cls, *args):
            self.notify_count += 1

        self.notify_count = 0
        self.stubs.Set(cinder.notifier.no_op_notifier, 'notify', mock_notify)
        # Mock log_notifier to raise RuntimeError when called.

        def mock_notify2(cls, *args):
            raise RuntimeError("Bad notifier.")

        self.stubs.Set(cinder.notifier.log_notifier, 'notify', mock_notify2)
예제 #9
0
import webob.dec
import webob.exc

import cinder.api.openstack
from cinder.api.openstack import wsgi
from cinder.api.openstack import xmlutil
from cinder import exception
from cinder import flags
from cinder import log as logging
from cinder.openstack.common import exception as common_exception
from cinder.openstack.common import importutils
import cinder.policy


LOG = logging.getLogger(__name__)
FLAGS = flags.FLAGS


class ExtensionDescriptor(object):
    """Base class that defines the contract for extensions.

    Note that you don't have to derive from this class to have a valid
    extension; it is purely a convenience.

    """

    # The name of the extension, e.g., 'Fox In Socks'
    name = None

    # The alias for the extension, e.g., 'FOXNSOX'
예제 #10
0
"""
Tests for NetApp volume driver

"""

import BaseHTTPServer
import httplib
import StringIO

from lxml import etree

from cinder import log as logging
from cinder import test
from cinder.volume import netapp

LOG = logging.getLogger("cinder.volume.driver")


WSDL_HEADER = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:na="http://www.netapp.com/management/v1"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NetAppDfm"
    targetNamespace="http://www.netapp.com/management/v1">"""

WSDL_TYPES = """<types>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
    targetNamespace="http://www.netapp.com/management/v1">
<xsd:element name="ApiProxy">
    <xsd:complexType>
        <xsd:all>
예제 #11
0
import ConfigParser
import commands
import os
import unittest
import urlparse

from migrate.versioning import repository
import sqlalchemy

import cinder.db.sqlalchemy.migrate_repo
from cinder.db.sqlalchemy.migration import versioning_api as migration_api
from cinder import log as logging
from cinder import test

LOG = logging.getLogger('cinder.tests.test_migrations')


def _mysql_get_connect_string(user="******",
                              passwd="openstack_citest",
                              database="openstack_citest"):
    """
    Try to get a connection with a very specfic set of values, if we get
    these then we'll run the mysql tests, otherwise they are skipped
    """
    return "mysql://%(user)s:%(passwd)s@localhost/%(database)s" % locals()


def _is_mysql_avail(user="******",
                    passwd="openstack_citest",
                    database="openstack_citest"):
예제 #12
0
 def setUp(self):
     super(LoggerTestCase, self).setUp()
     self.log = log.getLogger()
예제 #13
0
 def test_child_log_has_level_of_parent_flag(self):
     l = log.getLogger('cinder-test.foo')
     self.assertEqual(logging.AUDIT, l.logger.getEffectiveLevel())
예제 #14
0
#    under the License.
"""
:mod:`nexenta.jsonrpc` -- Nexenta-specific JSON RPC client
=====================================================================

.. automodule:: nexenta.jsonrpc
.. moduleauthor:: Yuriy Taraday <*****@*****.**>
"""

import json
import urllib2

from cinder.volume import nexenta
from cinder import log as logging

LOG = logging.getLogger("cinder.volume.nexenta.jsonrpc")


class NexentaJSONException(nexenta.NexentaException):
    pass


class NexentaJSONProxy(object):
    def __init__(self, url, user, password, auto=False, obj=None, method=None):
        self.url = url
        self.user = user
        self.password = password
        self.auto = auto
        self.obj = obj
        self.method = method
예제 #15
0
This rountine can be used to find and delete stale lock files from
cinder's interprocess synchroization.  It can be used safely while services
are running.

"""

import logging
import optparse

from cinder import flags
from cinder import log
from cinder import utils


LOG = log.getLogger('cinder.utils')
FLAGS = flags.FLAGS


def parse_options():
    """process command line options."""

    parser = optparse.OptionParser('usage: %prog [options]')
    parser.add_option('--verbose', action='store_true',
                      help='List lock files found and deleted')

    options, args = parser.parse_args()

    return options, args

예제 #16
0
:mod:`nexenta.volume` -- Driver to store volumes on Nexenta Appliance
=====================================================================

.. automodule:: nexenta.volume
.. moduleauthor:: Yuriy Taraday <*****@*****.**>
"""

from cinder import exception
from cinder import flags
from cinder import log as logging
from cinder.openstack.common import cfg
from cinder.volume import driver
from cinder.volume import nexenta
from cinder.volume.nexenta import jsonrpc

LOG = logging.getLogger("cinder.volume.nexenta.volume")
FLAGS = flags.FLAGS

nexenta_opts = [
    cfg.StrOpt('nexenta_host',
              default='',
              help='IP address of Nexenta SA'),
    cfg.IntOpt('nexenta_rest_port',
               default=2000,
               help='HTTP port to connect to Nexenta REST API server'),
    cfg.StrOpt('nexenta_rest_protocol',
               default='auto',
               help='Use http or https for REST connection (default auto)'),
    cfg.StrOpt('nexenta_user',
               default='admin',
               help='User name to connect to Nexenta SA'),