opentelemetry-python-contrib/reference/ddtrace/contrib/redis/util.py

53 lines
1.3 KiB
Python

"""
Some utils used by the dogtrace redis integration
"""
from ...compat import stringify
from ...ext import redis as redisx, net
VALUE_PLACEHOLDER = '?'
VALUE_MAX_LEN = 100
VALUE_TOO_LONG_MARK = '...'
CMD_MAX_LEN = 1000
def _extract_conn_tags(conn_kwargs):
""" Transform redis conn info into dogtrace metas """
try:
return {
net.TARGET_HOST: conn_kwargs['host'],
net.TARGET_PORT: conn_kwargs['port'],
redisx.DB: conn_kwargs['db'] or 0,
}
except Exception:
return {}
def format_command_args(args):
"""Format a command by removing unwanted values
Restrict what we keep from the values sent (with a SET, HGET, LPUSH, ...):
- Skip binary content
- Truncate
"""
length = 0
out = []
for arg in args:
try:
cmd = stringify(arg)
if len(cmd) > VALUE_MAX_LEN:
cmd = cmd[:VALUE_MAX_LEN] + VALUE_TOO_LONG_MARK
if length + len(cmd) > CMD_MAX_LEN:
prefix = cmd[:CMD_MAX_LEN - length]
out.append('%s%s' % (prefix, VALUE_TOO_LONG_MARK))
break
out.append(cmd)
length += len(cmd)
except Exception:
out.append(VALUE_PLACEHOLDER)
break
return ' '.join(out)