def __init__(self, get_response=None):
        settings = getattr(django.conf.settings, 'OPENCENSUS', {})
        settings = settings.get('TRACE', {})

        self.sampler = (settings.get('SAMPLER', None)
                        or samplers.ProbabilitySampler())
        if isinstance(self.sampler, six.string_types):
            self.sampler = configuration.load(self.sampler)

        self.exporter = settings.get('EXPORTER', None) or \
            print_exporter.PrintExporter()
        if isinstance(self.exporter, six.string_types):
            self.exporter = configuration.load(self.exporter)

        self.propagator = settings.get('PROPAGATOR', None) or \
            trace_context_http_header_format.TraceContextPropagator()
        if isinstance(self.propagator, six.string_types):
            self.propagator = configuration.load(self.propagator)

        self.excludelist_paths = settings.get(EXCLUDELIST_PATHS, None)

        self.excludelist_hostnames = settings.get(EXCLUDELIST_HOSTNAMES, None)

        if django.VERSION >= (2, ):  # pragma: NO COVER
            connection.execute_wrappers.append(_trace_db_call)

        super().__init__(get_response)
Example #2
0
    def init_app(self, app):
        self.app = app

        # get settings from app config
        settings = self.app.config.get('OPENCENSUS', {})
        settings = settings.get('TRACE', {})

        if self.sampler is None:
            self.sampler = (settings.get('SAMPLER', None)
                            or samplers.ProbabilitySampler())
            if isinstance(self.sampler, six.string_types):
                self.sampler = configuration.load(self.sampler)

        if self.exporter is None:
            self.exporter = settings.get('EXPORTER', None) or \
                print_exporter.PrintExporter()
            if isinstance(self.exporter, six.string_types):
                self.exporter = configuration.load(self.exporter)

        if self.propagator is None:
            self.propagator = settings.get('PROPAGATOR', None) or \
                trace_context_http_header_format.TraceContextPropagator()
            if isinstance(self.propagator, six.string_types):
                self.propagator = configuration.load(self.propagator)

        self.blacklist_paths = settings.get(BLACKLIST_PATHS,
                                            self.blacklist_paths)

        self.blacklist_hostnames = settings.get(BLACKLIST_HOSTNAMES, None)

        self.setup_trace()
Example #3
0
    def __init__(self, get_response=None):
        self.get_response = get_response
        settings = getattr(django.conf.settings, 'OPENCENSUS', {})
        settings = settings.get('TRACE', {})

        self.sampler = (settings.get('SAMPLER', None)
                        or samplers.ProbabilitySampler())
        if isinstance(self.sampler, six.string_types):
            self.sampler = configuration.load(self.sampler)

        self.exporter = settings.get('EXPORTER', None) or \
            print_exporter.PrintExporter()
        if isinstance(self.exporter, six.string_types):
            self.exporter = configuration.load(self.exporter)

        self.propagator = settings.get('PROPAGATOR', None) or \
            trace_context_http_header_format.TraceContextPropagator()
        if isinstance(self.propagator, six.string_types):
            self.propagator = configuration.load(self.propagator)

        self.blacklist_paths = settings.get(BLACKLIST_PATHS, None)

        self.blacklist_hostnames = settings.get(BLACKLIST_HOSTNAMES, None)
    
        self.explain_mode = settings.get('EXPLAIN', None)

        logger.debug(f"OpenCensus Exporter: {self.exporter}")
Example #4
0
    def link_from_headers(cls, headers):
        # type: (Dict[str, str]) -> None
        """
        Given a dictionary, extracts the context and links the context to the current tracer.

        :param headers: A key value pair dictionary
        :type headers: dict
        """
        ctx = trace_context_http_header_format.TraceContextPropagator().from_headers(headers)
        current_span = cls.get_current_span()
        current_span.add_link(Link(ctx.trace_id, ctx.span_id))
Example #5
0
def get_tracer_propagator():
    global _tracer_propagator

    if _tracer_propagator is None:
        settings_ = getattr(settings, 'OPENCENSUS', {})
        settings_ = settings_.get('TRACE', {})

        _tracer_propagator = settings_.get('PROPAGATOR', None) or \
            trace_context_http_header_format.TraceContextPropagator()
        if isinstance(_tracer_propagator, str):
            _tracer_propagator = configuration.load(_tracer_propagator)

    return _tracer_propagator
    def __init__(self, span=None, name="span", **kwargs):
        # type: (Optional[Span], Optional[str], Any) -> None
        """
        If a span is not passed in, creates a new tracer. If the instrumentation key for Azure Exporter is given, will
        configure the azure exporter else will just create a new tracer.

        :param span: The OpenCensus span to wrap
        :type span: :class: opencensus.trace.Span
        :param name: The name of the OpenCensus span to create if a new span is needed
        :type name: str
        :keyword SpanKind kind: The span kind of this span.
        :keyword links: The list of links to be added to the span.
        :paramtype links: list[~azure.core.tracing.Link]
        """
        tracer = self.get_current_tracer()
        value = kwargs.pop('kind', None)
        kind = (
            OpenCensusSpanKind.CLIENT
            if value == SpanKind.CLIENT else OpenCensusSpanKind.CLIENT
            if value == SpanKind.PRODUCER else  # No producer in opencensus
            OpenCensusSpanKind.SERVER if value == SpanKind.SERVER else
            OpenCensusSpanKind.CLIENT if value ==
            SpanKind.CONSUMER else  # No consumer in opencensus
            OpenCensusSpanKind.UNSPECIFIED if value ==
            SpanKind.INTERNAL else  # No internal in opencensus
            OpenCensusSpanKind.UNSPECIFIED if value ==
            SpanKind.UNSPECIFIED else None)  # type: SpanKind
        if value and kind is None:
            raise ValueError(
                "Kind {} is not supported in OpenCensus".format(value))

        links = kwargs.pop('links', None)
        self._span_instance = span or tracer.start_span(name=name, **kwargs)
        if kind is not None:
            self._span_instance.span_kind = kind

        if links:
            try:
                for link in links:
                    ctx = trace_context_http_header_format.TraceContextPropagator(
                    ).from_headers(link.headers)
                    self._span_instance.add_link(
                        Link(trace_id=ctx.trace_id,
                             span_id=ctx.span_id,
                             attributes=link.attributes))
            except AttributeError:
                # we will just send the links as is if it's not ~azure.core.tracing.Link without any validation
                # assuming user knows what they are doing.
                self._span_instance.links = links
Example #7
0
def get_opencensus_values():
    """
    Return the OpenCensus Trace and Span IDs if Span ID is set in the
    OpenCensus execution context.
    """
    if execution_context:
        span_ctx = execution_context.get_opencensus_tracer().span_context
        span_id = span_ctx.span_id
        if span_id:
            # Insert the W3C TraceContext generated
            w3C_trace_ctx = trace_context_http_header_format.TraceContextPropagator(
            )
            return w3C_trace_ctx.to_headers(span_ctx)
    else:
        raise ImportError('opencensus is not installed.')
    return {}
Example #8
0
 def __init__(
     self,
     app: ASGIApp,
     excludelist_paths=None,
     excludelist_hostnames=None,
     sampler=None,
     exporter=None,
     propagator=None,
 ) -> None:
     super().__init__(app)
     self.app = app
     self.excludelist_paths = excludelist_paths
     self.excludelist_hostnames = excludelist_hostnames
     self.sampler = sampler or samplers.AlwaysOnSampler()
     self.exporter = exporter or print_exporter.PrintExporter()
     self.propagator = (
         propagator
         or trace_context_http_header_format.TraceContextPropagator())
Example #9
0
def initialize_tracer(request: 'flask.Request') -> tracer.Tracer:
    if TRACE_PROPAGATE == "google":
        propagator = google_cloud_format.GoogleCloudFormatPropagator()
    else:
        propagator = trace_context_http_header_format.TraceContextPropagator()
    if TRACE_EXPORTER == "stackdriver":
        exporter = trace_exporter.StackdriverExporter(transport=AsyncTransport)
        sampler = samplers.AlwaysOnSampler()
    elif TRACE_EXPORTER == "log":
        exporter = logging_exporter.LoggingExporter(
            handler=py_logging.NullHandler(), transport=AsyncTransport)
        sampler = samplers.AlwaysOnSampler()
    elif TRACE_EXPORTER == "stdout":
        exporter = print_exporter.PrintExporter(transport=AsyncTransport)
        sampler = samplers.AlwaysOnSampler()
    else:
        exporter = print_exporter.PrintExporter(transport=AsyncTransport)
        sampler = samplers.AlwaysOffSampler()
    span_context = propagator.from_headers(request.headers)
    return tracer.Tracer(exporter=exporter,
                         sampler=sampler,
                         propagator=propagator,
                         span_context=span_context)
Example #10
0
    def __init__(self, get_response=None):
        self.get_response = get_response
        settings = getattr(django.conf.settings, 'OPENCENSUS', {})
        settings = settings.get('TRACE', {})

        self.sampler = settings.get('SAMPLER', None) or \
            always_on.AlwaysOnSampler()
        if isinstance(self.sampler, six.string_types):
            self.sampler = configuration.load(self.sampler)

        self.exporter = settings.get('EXPORTER', None) or \
            print_exporter.PrintExporter()
        if isinstance(self.exporter, six.string_types):
            self.exporter = configuration.load(self.exporter)

        self.propagator = settings.get('PROPAGATOR', None) or \
            trace_context_http_header_format.TraceContextPropagator()
        if isinstance(self.propagator, six.string_types):
            self.propagator = configuration.load(self.propagator)

        self.blacklist_paths = settings.get(BLACKLIST_PATHS, None)

        self.blacklist_hostnames = settings.get(BLACKLIST_HOSTNAMES, None)
Example #11
0
    def __init__(self,
                 span_context=None,
                 sampler=None,
                 exporter=None,
                 propagator=None):
        if span_context is None:
            span_context = SpanContext()

        if sampler is None:
            sampler = samplers.ProbabilitySampler()

        if exporter is None:
            exporter = print_exporter.PrintExporter()

        if propagator is None:
            propagator = \
                trace_context_http_header_format.TraceContextPropagator()

        self.span_context = span_context
        self.sampler = sampler
        self.exporter = exporter
        self.propagator = propagator
        self.tracer = self.get_tracer()
        self.store_tracer()
Example #12
0
#
#     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 opencensus.trace import print_exporter, samplers
from opencensus.trace.propagation import trace_context_http_header_format

DEFAULT_PYRAMID_TRACER_CONFIG = {
    'SAMPLER': samplers.AlwaysOnSampler(),
    'EXPORTER': print_exporter.PrintExporter(),
    'PROPAGATOR': trace_context_http_header_format.TraceContextPropagator(),
    # https://cloud.google.com/appengine/docs/flexible/python/
    # how-instances-are-managed#health_checking
    'BLACKLIST_PATHS': ['_ah/health'],
}


class PyramidTraceSettings(object):
    def __init__(self, registry):
        self.settings = registry.settings.get('OPENCENSUS', {})
        self.settings = self.settings.get('TRACE',
                                          DEFAULT_PYRAMID_TRACER_CONFIG)

        _set_default_configs(self.settings, DEFAULT_PYRAMID_TRACER_CONFIG)

    def __getattr__(self, attr):
Example #13
0
 def __init__(self, span=None):
     self.span = span
     self.propagator = (
         trace_context_http_header_format.TraceContextPropagator()
     )