# Copyright (c) 2016-2018 Uber Technologies, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import, unicode_literals, print_function

from . import __version__

import six

# DEPRECATED: max number of bits to use when generating random ID
MAX_ID_BITS = 64

# Max number of bits allowed to use when generating Trace ID
_max_trace_id_bits = 128

# Max number of bits to use when generating random ID
_max_id_bits = 64

# How often remotely controlled sampler polls for sampling strategy
DEFAULT_SAMPLING_INTERVAL = 60

# How often remote reporter does a preemptive flush of its buffers
DEFAULT_FLUSH_INTERVAL = 1

# Name of the HTTP header used to encode trace ID
TRACE_ID_HEADER = 'uber-trace-id' if six.PY3 else b'uber-trace-id'

# Prefix for HTTP headers used to record baggage items
BAGGAGE_HEADER_PREFIX = 'uberctx-' if six.PY3 else b'uberctx-'

# The name of HTTP header or a TextMap carrier key which, if found in the
# carrier, forces the trace to be sampled as "debug" trace. The value of the
# header is recorded as the tag on the # root span, so that the trace can
# be found in the UI using this value as a correlation ID.
DEBUG_ID_HEADER_KEY = 'jaeger-debug-id'

# The name of HTTP header or a TextMap carrier key that can be used to pass
# additional baggage to the span, e.g. when executing an ad-hoc curl request:
# curl -H 'jaeger-baggage: k1=v1,k2=v2' http://...
BAGGAGE_HEADER_KEY = 'jaeger-baggage'


JAEGER_CLIENT_VERSION = 'Python-%s' % __version__

# Tracer-scoped tag that tells the version of Jaeger client library
JAEGER_VERSION_TAG_KEY = 'jaeger.version'

# Tracer-scoped tag that contains the hostname
JAEGER_HOSTNAME_TAG_KEY = 'hostname'

# Tracer-scoped tag that is used to report ip of the process.
JAEGER_IP_TAG_KEY = 'ip'

# the type of sampler that always makes the same decision.
SAMPLER_TYPE_CONST = 'const'

# the type of sampler that polls Jaeger agent for sampling strategy.
SAMPLER_TYPE_REMOTE = 'remote'

# the type of sampler that samples traces with a certain fixed probability.
SAMPLER_TYPE_PROBABILISTIC = 'probabilistic'

# the type of sampler that samples only up to a fixed number
# of traces per second.
# noinspection SpellCheckingInspection
SAMPLER_TYPE_RATE_LIMITING = 'ratelimiting'

# the type of sampler that samples only up to a fixed number
# of traces per second.
# noinspection SpellCheckingInspection
SAMPLER_TYPE_LOWER_BOUND = 'lowerbound'

# Tag key for unique client identifier. Used in throttler implementation.
CLIENT_UUID_TAG_KEY = 'client-uuid'

# max length for tag values. Longer values will be truncated.
MAX_TAG_VALUE_LENGTH = 1024

# max length for traceback data. Longer values will be truncated.
MAX_TRACEBACK_LENGTH = 4096

# Constant for sampled flag
SAMPLED_FLAG = 0x01

# Constant for debug flag
DEBUG_FLAG = 0x02

# How often throttler polls for credits
DEFAULT_THROTTLER_REFRESH_INTERVAL = 5
