Files
2020-04-08 10:39:44 -07:00

76 lines
2.4 KiB
Python

from ...compat import parse
from ...internal.logger import get_logger
log = get_logger(__name__)
def _resource_from_cache_prefix(resource, cache):
"""
Combine the resource name with the cache prefix (if any)
"""
if getattr(cache, 'key_prefix', None):
name = '{} {}'.format(resource, cache.key_prefix)
else:
name = resource
# enforce lowercase to make the output nicer to read
return name.lower()
def quantize_key_values(key):
"""
Used in the Django trace operation method, it ensures that if a dict
with values is used, we removes the values from the span meta
attributes. For example::
>>> quantize_key_values({'key', 'value'})
# returns ['key']
"""
if isinstance(key, dict):
return key.keys()
return key
def get_request_uri(request):
"""
Helper to rebuild the original request url
query string or fragments are not included.
"""
# DEV: We do this instead of `request.build_absolute_uri()` since
# an exception can get raised, we want to always build a url
# regardless of any exceptions raised from `request.get_host()`
host = None
try:
host = request.get_host() # this will include host:port
except Exception:
log.debug('Failed to get Django request host', exc_info=True)
if not host:
try:
# Try to build host how Django would have
# https://github.com/django/django/blob/e8d0d2a5efc8012dcc8bf1809dec065ebde64c81/django/http/request.py#L85-L102
if 'HTTP_HOST' in request.META:
host = request.META['HTTP_HOST']
else:
host = request.META['SERVER_NAME']
port = str(request.META['SERVER_PORT'])
if port != ('443' if request.is_secure() else '80'):
host = '{0}:{1}'.format(host, port)
except Exception:
# This really shouldn't ever happen, but lets guard here just in case
log.debug('Failed to build Django request host', exc_info=True)
host = 'unknown'
# Build request url from the information available
# DEV: We are explicitly omitting query strings since they may contain sensitive information
return parse.urlunparse(parse.ParseResult(
scheme=request.scheme,
netloc=host,
path=request.path,
params='',
query='',
fragment='',
))