53 lines
1.3 KiB
Python
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)
|