Example #1
0
 def __init__(self, get_response):
     self.name = horizon_settings.get_dict_config('OPENSTACK_PROFILER',
                                                  'facility_name')
     self.hmac_keys = horizon_settings.get_dict_config(
         'OPENSTACK_PROFILER', 'keys')
     self.get_response = get_response
     if PROFILER_ENABLED:
         api.init_notifier(
             horizon_settings.get_dict_config('OPENSTACK_PROFILER',
                                              'notifier_connection_string'))
     else:
         raise exceptions.MiddlewareNotUsed()
Example #2
0
 def decorator(func):
     if setting_utils.get_dict_config('OPENSTACK_PROFILER', 'enabled'):
         return profiler.trace(name,
                               info=None,
                               hide_args=False,
                               allow_multiple_trace=True)(func)
     return func
    def __init__(self, get_response):
        if not settings.OPERATION_LOG_ENABLED:
            raise MiddlewareNotUsed

        self.get_response = get_response

        # set configurations
        _available_methods = ['POST', 'GET', 'PUT', 'DELETE']
        _methods = setting_utils.get_dict_config('OPERATION_LOG_OPTIONS',
                                                 'target_methods')
        self.target_methods = [x for x in _methods if x in _available_methods]
        self.mask_fields = setting_utils.get_dict_config(
            'OPERATION_LOG_OPTIONS', 'mask_fields')
        self.format = setting_utils.get_dict_config('OPERATION_LOG_OPTIONS',
                                                    'format')
        self._logger = logging.getLogger('horizon.operation_log')
        self._ignored_urls = [
            re.compile(url) for url in setting_utils.get_dict_config(
                'OPERATION_LOG_OPTIONS', 'ignore_urls')
        ]
Example #4
0
    def process_request(self, request):
        if self.is_async_profiling(request):
            for src_header, dst_header in self.profiler_headers:
                request.META[dst_header] = request.META.get(src_header)
            return None

        if 'profile_page' in request.COOKIES:
            hmac_key = horizon_settings.get_dict_config(
                'OPENSTACK_PROFILER', 'keys')[0]
            profiler.init(hmac_key)
            for hdr_key, hdr_value in web.get_trace_id_headers().items():
                request.META[hdr_key] = hdr_value
        return None
Example #5
0
def _get_engine(request):
    connection_str = horizon_settings.get_dict_config(
        'OPENSTACK_PROFILER', 'receiver_connection_string')
    kwargs = _get_engine_kwargs(request, connection_str)
    return profiler_get_driver(connection_str, **kwargs)
Example #6
0
    data['info']['max_finished'] = max_finished
    return data


def update_trace_headers(keys, **kwargs):
    trace_headers = web.get_trace_id_headers()
    trace_info = utils.signed_unpack(trace_headers[web.X_TRACE_INFO],
                                     trace_headers[web.X_TRACE_HMAC], keys)
    trace_info.update(kwargs)
    p = profiler.get()
    trace_data = utils.signed_pack(trace_info, p.hmac_key)
    trace_data = [
        key.decode() if isinstance(key, bytes) else key for key in trace_data
    ]
    return json.dumps({
        web.X_TRACE_INFO: trace_data[0],
        web.X_TRACE_HMAC: trace_data[1]
    })


if not horizon_settings.get_dict_config('OPENSTACK_PROFILER', 'enabled'):

    def trace(function):
        return function
else:

    def trace(function):
        func_name = function.__module__ + '.' + function.__name__
        decorator = profiler.trace(func_name)
        return decorator(function)
Example #7
0
def _get_engine():
    connection_str = horizon_settings.get_dict_config(
        'OPENSTACK_PROFILER', 'receiver_connection_string')
    return profiler_get_driver(connection_str)
Example #8
0
from django.core import exceptions
from django.urls import reverse
from django.utils import safestring
from django.utils.translation import ugettext_lazy as _
from osprofiler import _utils as profiler_utils
from osprofiler import profiler
from osprofiler import web

from horizon import messages
from horizon.utils import settings as horizon_settings
from openstack_dashboard.contrib.developer.profiler import api

_REQUIRED_KEYS = ("base_id", "hmac_key")
_OPTIONAL_KEYS = ("parent_id", )

PROFILER_ENABLED = horizon_settings.get_dict_config('OPENSTACK_PROFILER',
                                                    'enabled')


class ProfilerClientMiddleware(object):
    profiler_headers = [('HTTP_X_TRACE_INFO', 'X-Trace-Info'),
                        ('HTTP_X_TRACE_HMAC', 'X-Trace-HMAC')]

    def __init__(self, get_response):
        if not PROFILER_ENABLED:
            raise exceptions.MiddlewareNotUsed()
        super().__init__()
        self.get_response = get_response

    def __call__(self, request):
        self.process_request(request)
        response = self.get_response(request)