summaryrefslogtreecommitdiff
path: root/keystonemiddleware/audit/__init__.py
diff options
context:
space:
mode:
authorJamie Lennox <jamielennox@gmail.com>2016-06-27 10:27:20 +1000
committerJamie Lennox <jamielennox@gmail.com>2016-06-27 12:15:26 +1000
commit515a990dce650497718a428ab25e0c9ff984855c (patch)
tree797e3e76b06f97f6be442527a47938b54dfadef5 /keystonemiddleware/audit/__init__.py
parentaa2cde7f9f504a34fee1e9c3d4b952f2c127ea89 (diff)
downloadkeystonemiddleware-515a990dce650497718a428ab25e0c9ff984855c.tar.gz
Extract a common notifier pattern
Create a notifier pattern that abstracts the message notification. This should make it easier to test. Change-Id: Ifbe3be434c304f1d3d4d570d645937a72c3503c8
Diffstat (limited to 'keystonemiddleware/audit/__init__.py')
-rw-r--r--keystonemiddleware/audit/__init__.py64
1 files changed, 9 insertions, 55 deletions
diff --git a/keystonemiddleware/audit/__init__.py b/keystonemiddleware/audit/__init__.py
index 8a64a92..05dc4f1 100644
--- a/keystonemiddleware/audit/__init__.py
+++ b/keystonemiddleware/audit/__init__.py
@@ -22,16 +22,9 @@ provides.
import copy
import functools
import logging
-import os.path
-import sys
from oslo_config import cfg
from oslo_context import context as oslo_context
-try:
- import oslo_messaging
- messaging = True
-except ImportError:
- messaging = False
from pycadf import cadftaxonomy as taxonomy
from pycadf import cadftype
from pycadf import credential
@@ -47,7 +40,8 @@ import webob.dec
from keystonemiddleware._common import config
from keystonemiddleware.audit import _api
-from keystonemiddleware.i18n import _LE, _LI
+from keystonemiddleware.audit import _notifier
+from keystonemiddleware.i18n import _LE
_LOG = None
@@ -107,21 +101,6 @@ class AuditMiddleware(object):
http://docs.openstack.org/developer/keystonemiddleware/audit.html
"""
- @staticmethod
- def _get_aliases(proj):
- aliases = {}
- if proj:
- # Aliases to support backward compatibility
- aliases = {
- '%s.openstack.common.rpc.impl_kombu' % proj: 'rabbit',
- '%s.openstack.common.rpc.impl_qpid' % proj: 'qpid',
- '%s.openstack.common.rpc.impl_zmq' % proj: 'zmq',
- '%s.rpc.impl_kombu' % proj: 'rabbit',
- '%s.rpc.impl_qpid' % proj: 'qpid',
- '%s.rpc.impl_zmq' % proj: 'zmq',
- }
- return aliases
-
def __init__(self, app, **conf):
self._application = app
self._conf = config.Config('audit',
@@ -135,32 +114,7 @@ class AuditMiddleware(object):
conf.get('ignore_req_list', '').split(',')]
self._cadf_audit = _api.OpenStackAuditApi(conf.get('audit_map_file'),
_LOG)
-
- project = self._conf.project or taxonomy.UNKNOWN
- transport_aliases = self._get_aliases(project)
- if messaging:
- transport = oslo_messaging.get_transport(
- cfg.CONF,
- url=self._conf.get('transport_url'),
- aliases=transport_aliases)
- self._notifier = oslo_messaging.Notifier(
- transport,
- os.path.basename(sys.argv[0]),
- driver=self._conf.get('driver'),
- topics=self._conf.get('topics'))
-
- def _emit_audit(self, context, event_type, payload):
- """Emit audit notification.
-
- if oslo.messaging enabled, send notification. if not, log event.
- """
- if messaging:
- self._notifier.info(context, event_type, payload)
- else:
- _LOG.info(_LI('Event type: %(event_type)s, Context: %(context)s, '
- 'Payload: %(payload)s'), {'context': context,
- 'event_type': event_type,
- 'payload': payload})
+ self._notifier = _notifier.create_notifier(self._conf, _LOG)
def _create_event(self, req):
correlation_id = identifier.generate_uuid()
@@ -194,10 +148,9 @@ class AuditMiddleware(object):
@_log_and_ignore_error
def _process_request(self, request):
- event = self._create_event(request)
-
- self._emit_audit(request.context, 'audit.http.request',
- event.as_dict())
+ self._notifier.notify(request.context,
+ 'audit.http.request',
+ self._create_event(request).as_dict())
@_log_and_ignore_error
def _process_response(self, request, response=None):
@@ -223,8 +176,9 @@ class AuditMiddleware(object):
reporter=resource.Resource(id='target'),
reporterTime=timestamp.get_utc_now()))
- self._emit_audit(request.context, 'audit.http.response',
- event.as_dict())
+ self._notifier.notify(request.context,
+ 'audit.http.response',
+ event.as_dict())
@webob.dec.wsgify
def __call__(self, req):