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()
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') ]
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
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)
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)
def _get_engine(): connection_str = horizon_settings.get_dict_config( 'OPENSTACK_PROFILER', 'receiver_connection_string') return profiler_get_driver(connection_str)
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)