Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"""
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)