コード例 #1
0
ファイル: middleware.py プロジェクト: tiloc/opencensus-python
    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}")
コード例 #2
0
    def test_constructor(self):
        pyramid_trace_header = 'X-Cloud-Trace-Context'
        trace_id = '2dd43a1d6b2549c6bc2a1a54c2fc0b05'
        span_id = '6e0c63257de34c92'
        pyramid_trace_id = '{}/{}'.format(trace_id, span_id)

        response = Response()

        def dummy_handler(request):
            return response

        mock_registry = mock.Mock(spec=Registry)
        mock_registry.settings = {}
        mock_registry.settings['OPENCENSUS_TRACE'] = {
            'EXPORTER': print_exporter.PrintExporter()
        }

        middleware = pyramid_middleware.OpenCensusTweenFactory(
            dummy_handler,
            mock_registry,
        )

        assert isinstance(middleware.sampler, always_on.AlwaysOnSampler)
        assert isinstance(middleware.exporter, print_exporter.PrintExporter)
        assert isinstance(middleware.propagator,
                          google_cloud_format.GoogleCloudFormatPropagator)

        # Just a smoke test to make sure things work
        request = DummyRequest(
            registry=mock_registry,
            path='/',
            headers={pyramid_trace_header: pyramid_trace_id},
        )

        assert middleware(request) == response
コード例 #3
0
    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)
コード例 #4
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()
コード例 #5
0
ファイル: simple.py プロジェクト: binderjoe/opencensus-python
def run_app():
    settings = {
        'OPENCENSUS': {
            'TRACE': {
                'EXPORTER': print_exporter.PrintExporter(),
                'SAMPLER': probability.ProbabilitySampler(rate=1),
            }
        }
    }

    app = main({}, **settings)
    server = make_server('localhost', 8080, app)
    server.serve_forever()
コード例 #6
0
def get_tracer_exporter():
    global _tracer_exporter

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

        _tracer_exporter = settings_.get('EXPORTER', None) or \
            print_exporter.PrintExporter()
        if isinstance(_tracer_exporter, str):
            _tracer_exporter = configuration.load(_tracer_exporter)

    return _tracer_exporter
コード例 #7
0
def run_app():
    settings = {}

    exporter = print_exporter.PrintExporter()
    sampler = probability.ProbabilitySampler(rate=1)

    settings['OPENCENSUS_TRACE'] = {
        'EXPORTER': exporter,
        'SAMPLER': sampler,
    }

    app = main({}, **settings)
    server = make_server('localhost', 8080, app)
    server.serve_forever()
コード例 #8
0
    def __init__(self, exporter=None, span_context=None):
        if exporter is None:
            exporter = print_exporter.PrintExporter()

        if span_context is None:
            span_context = SpanContext()

        self.exporter = exporter
        self.span_context = span_context
        self.trace_id = span_context.trace_id
        self.root_span_id = span_context.span_id

        # List of spans to report
        self._spans_list = []
コード例 #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)
コード例 #10
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())
コード例 #11
0
    def test_invoke_method_with_tracer(self):
        tracer = Tracer(sampler=samplers.AlwaysOnSampler(),
                        exporter=print_exporter.PrintExporter())

        self.client = DaprClient(headers_callback=lambda: tracer.propagator.
                                 to_headers(tracer.span_context))
        self.server.set_response(b"FOO")

        with tracer.span(name="test"):
            req = common_v1.StateItem(key='test')
            resp = self.client.invoke_method(
                self.app_id,
                self.method_name,
                http_verb='PUT',
                data=req,
            )

        request_headers = self.server.get_request_headers()

        self.assertIn('Traceparent', request_headers)
        self.assertEqual(b'FOO', resp.data)
コード例 #12
0
    def test_constructor(self):
        pyramid_trace_header = 'traceparent'
        trace_id = '2dd43a1d6b2549c6bc2a1a54c2fc0b05'
        span_id = '6e0c63257de34c92'
        pyramid_trace_id = '00-{}-{}-00'.format(trace_id, span_id)

        response = Response()

        def dummy_handler(request):
            return response

        mock_registry = mock.Mock(spec=Registry)
        mock_registry.settings = {
            'OPENCENSUS': {
                'TRACE': {
                    'EXPORTER': print_exporter.PrintExporter(),
                }
            }
        }

        middleware = pyramid_middleware.OpenCensusTweenFactory(
            dummy_handler,
            mock_registry,
        )

        assert isinstance(middleware.sampler, samplers.AlwaysOnSampler)
        assert isinstance(
            middleware.exporter, print_exporter.PrintExporter)
        assert isinstance(
            middleware.propagator,
            trace_context_http_header_format.TraceContextPropagator)

        # Just a smoke test to make sure things work
        request = DummyRequest(
            registry=mock_registry,
            path='/',
            headers={pyramid_trace_header: pyramid_trace_id},
        )

        assert middleware(request) == response
コード例 #13
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)
コード例 #14
0
ファイル: main.py プロジェクト: johanste/opencensus-python
def main():
    sampler = always_on.AlwaysOnSampler()
    exporter = print_exporter.PrintExporter()
    tracer = Tracer(sampler=sampler, exporter=exporter)

    with tracer.span(name='root'):
        tracer.add_attribute_to_current_span(
            attribute_key='example key', attribute_value='example value')
        function_to_trace()
        with tracer.span(name='child'):
            function_to_trace()

    # Get the current tracer
    tracer = execution_context.get_opencensus_tracer()

    # Explicitly create spans
    tracer.start_span()

    # Get current span
    execution_context.get_current_span()

    # Explicitly end span
    tracer.end_span()
コード例 #15
0
ファイル: tracer.py プロジェクト: johanste/opencensus-python
    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 = always_on.AlwaysOnSampler()

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

        if propagator is None:
            propagator = google_cloud_format.GoogleCloudFormatPropagator()

        self.span_context = span_context
        self.sampler = sampler
        self.exporter = exporter
        self.propagator = propagator
        self.tracer = self.get_tracer()
        self.store_tracer()
コード例 #16
0
ファイル: tracer.py プロジェクト: ylil93/opencensus-python
    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()
コード例 #17
0
 def __init__(self, **kwargs):
     super().__init__(**kwargs)
     self.sampler = ProbabilitySampler(1)
     self.exporter = print_exporter.PrintExporter()
     self.propagator = TraceContextPropagator()
コード例 #18
0
ファイル: config.py プロジェクト: zyxue/opencensus-python
# 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 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)