From e7d4524a233e6cb5fde6a8f5bcd4e50e27f73e07 Mon Sep 17 00:00:00 2001 From: Reiley Yang Date: Mon, 11 Mar 2019 13:07:46 -0700 Subject: [PATCH] Refactor exporters into ext packages (#550) * refactor exporters into ext packages * fix doc and system test * fix system test --- README.rst | 4 +- .../examples/app/settings.py | 2 +- .../tests/test_django_middleware.py | 16 ++--- .../opencensus-ext-flask/examples/custom.py | 6 +- .../tests/test_flask_middleware.py | 18 +++--- .../examples/hello_world_client.py | 4 +- .../examples/hello_world_server.py | 4 +- contrib/opencensus-ext-jaeger/CHANGELOG.md | 5 ++ contrib/opencensus-ext-jaeger/README.rst | 16 +++++ .../opencensus/__init__.py | 1 + .../opencensus/ext/__init__.py | 1 + .../opencensus/ext/jaeger/__init__.py | 1 + .../ext/jaeger/trace_exporter/__init__.py | 2 +- .../jaeger/trace_exporter}/gen/__init__.py | 0 .../trace_exporter}/gen/jaeger/__init__.py | 0 .../trace_exporter}/gen/jaeger/agent.py | 2 +- .../trace_exporter}/gen/jaeger/jaeger.py | 0 contrib/opencensus-ext-jaeger/setup.cfg | 2 + contrib/opencensus-ext-jaeger/setup.py | 50 ++++++++++++++++ .../tests}/test_jaeger_exporter.py | 52 ++++++++--------- contrib/opencensus-ext-jaeger/version.py | 15 +++++ .../tests/test_pyramid_middleware.py | 2 +- .../opencensus-ext-stackdriver/CHANGELOG.md | 5 ++ contrib/opencensus-ext-stackdriver/README.rst | 16 +++++ .../opencensus/__init__.py | 1 + .../opencensus/ext/__init__.py | 1 + .../opencensus/ext/stackdriver/__init__.py | 1 + .../stackdriver/trace_exporter/__init__.py | 0 contrib/opencensus-ext-stackdriver/setup.cfg | 2 + contrib/opencensus-ext-stackdriver/setup.py | 51 ++++++++++++++++ .../tests}/test_stackdriver_exporter.py | 58 +++++++++---------- contrib/opencensus-ext-stackdriver/version.py | 15 +++++ contrib/opencensus-ext-zipkin/CHANGELOG.md | 5 ++ contrib/opencensus-ext-zipkin/README.rst | 16 +++++ .../opencensus/__init__.py | 1 + .../opencensus/ext/__init__.py | 1 + .../opencensus/ext/zipkin/__init__.py | 1 + .../ext/zipkin/trace_exporter/__init__.py | 0 contrib/opencensus-ext-zipkin/setup.cfg | 2 + contrib/opencensus-ext-zipkin/setup.py | 50 ++++++++++++++++ .../tests}/test_zipkin_exporter.py | 30 +++++----- contrib/opencensus-ext-zipkin/version.py | 15 +++++ docs/trace/api/stackdriver_exporter.rst | 2 +- docs/trace/api/zipkin_exporter.rst | 2 +- docs/trace/usage.rst | 2 +- nox.py | 3 + tests/system/trace/django/app/settings.py | 2 +- tests/system/trace/flask/main.py | 2 +- 48 files changed, 382 insertions(+), 105 deletions(-) create mode 100644 contrib/opencensus-ext-jaeger/CHANGELOG.md create mode 100644 contrib/opencensus-ext-jaeger/README.rst create mode 100644 contrib/opencensus-ext-jaeger/opencensus/__init__.py create mode 100644 contrib/opencensus-ext-jaeger/opencensus/ext/__init__.py create mode 100644 contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/__init__.py rename opencensus/trace/exporters/jaeger_exporter.py => contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/__init__.py (99%) rename {opencensus/trace/exporters => contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter}/gen/__init__.py (100%) rename {opencensus/trace/exporters => contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter}/gen/jaeger/__init__.py (100%) rename {opencensus/trace/exporters => contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter}/gen/jaeger/agent.py (98%) rename {opencensus/trace/exporters => contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter}/gen/jaeger/jaeger.py (100%) create mode 100644 contrib/opencensus-ext-jaeger/setup.cfg create mode 100644 contrib/opencensus-ext-jaeger/setup.py rename {tests/unit/trace/exporters => contrib/opencensus-ext-jaeger/tests}/test_jaeger_exporter.py (91%) create mode 100644 contrib/opencensus-ext-jaeger/version.py create mode 100644 contrib/opencensus-ext-stackdriver/CHANGELOG.md create mode 100644 contrib/opencensus-ext-stackdriver/README.rst create mode 100644 contrib/opencensus-ext-stackdriver/opencensus/__init__.py create mode 100644 contrib/opencensus-ext-stackdriver/opencensus/ext/__init__.py create mode 100644 contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/__init__.py rename opencensus/trace/exporters/stackdriver_exporter.py => contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/trace_exporter/__init__.py (100%) create mode 100644 contrib/opencensus-ext-stackdriver/setup.cfg create mode 100644 contrib/opencensus-ext-stackdriver/setup.py rename {tests/unit/trace/exporters => contrib/opencensus-ext-stackdriver/tests}/test_stackdriver_exporter.py (93%) create mode 100644 contrib/opencensus-ext-stackdriver/version.py create mode 100644 contrib/opencensus-ext-zipkin/CHANGELOG.md create mode 100644 contrib/opencensus-ext-zipkin/README.rst create mode 100644 contrib/opencensus-ext-zipkin/opencensus/__init__.py create mode 100644 contrib/opencensus-ext-zipkin/opencensus/ext/__init__.py create mode 100644 contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/__init__.py rename opencensus/trace/exporters/zipkin_exporter.py => contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/trace_exporter/__init__.py (100%) create mode 100644 contrib/opencensus-ext-zipkin/setup.cfg create mode 100644 contrib/opencensus-ext-zipkin/setup.py rename {tests/unit/trace/exporters => contrib/opencensus-ext-zipkin/tests}/test_zipkin_exporter.py (93%) create mode 100644 contrib/opencensus-ext-zipkin/version.py diff --git a/README.rst b/README.rst index 7810549b3..2182a60c4 100644 --- a/README.rst +++ b/README.rst @@ -142,7 +142,7 @@ This example shows how to report the traces to Stackdriver Trace: .. code:: python - from opencensus.trace.exporters import stackdriver_exporter + from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter from opencensus.trace import tracer as tracer_module exporter = stackdriver_exporter.StackdriverExporter( @@ -166,7 +166,7 @@ This example shows how to configure OpenCensus to use a background thread: .. code:: python from opencensus.common.transports.async_ import AsyncTransport - from opencensus.trace.exporters import stackdriver_exporter + from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter from opencensus.trace import tracer as tracer_module exporter = stackdriver_exporter.StackdriverExporter( diff --git a/contrib/opencensus-ext-django/examples/app/settings.py b/contrib/opencensus-ext-django/examples/app/settings.py index b01d84f09..bb45463d2 100644 --- a/contrib/opencensus-ext-django/examples/app/settings.py +++ b/contrib/opencensus-ext-django/examples/app/settings.py @@ -68,7 +68,7 @@ 'SAMPLER': 'opencensus.trace.samplers.always_on.AlwaysOnSampler', 'EXPORTER': - 'opencensus.trace.exporters.stackdriver_exporter.StackdriverExporter', + 'opencensus.ext.stackdriver.trace_exporter.StackdriverExporter', 'PROPAGATOR': 'opencensus.trace.propagation.google_cloud_format.' 'GoogleCloudFormatPropagator', diff --git a/contrib/opencensus-ext-django/tests/test_django_middleware.py b/contrib/opencensus-ext-django/tests/test_django_middleware.py index 6a91249f1..c72b1782b 100644 --- a/contrib/opencensus-ext-django/tests/test_django_middleware.py +++ b/contrib/opencensus-ext-django/tests/test_django_middleware.py @@ -19,13 +19,13 @@ from django.test.utils import teardown_test_environment from opencensus.common.transports import sync -from opencensus.ext.ocagent import trace_exporter +from opencensus.ext.jaeger import trace_exporter as jaeger_exporter +from opencensus.ext.ocagent import trace_exporter as ocagent_exporter +from opencensus.ext.zipkin import trace_exporter as zipkin_exporter from opencensus.trace import execution_context from opencensus.trace import span as span_module from opencensus.trace import utils from opencensus.trace.exporters import print_exporter -from opencensus.trace.exporters import zipkin_exporter -from opencensus.trace.exporters import jaeger_exporter from opencensus.trace.propagation import google_cloud_format from opencensus.trace.samplers import always_on from opencensus.trace.samplers import probability @@ -216,7 +216,7 @@ def test_constructor_ocagent_trace_exporter(self): patch_ocagent_trace = mock.patch( 'opencensus.ext.django.config.settings.EXPORTER', - trace_exporter.TraceExporter) + ocagent_exporter.TraceExporter) patch_params = mock.patch( 'opencensus.ext.django.config.settings.params', @@ -227,14 +227,14 @@ def test_constructor_ocagent_trace_exporter(self): self.assertIs(middleware._sampler, always_on.AlwaysOnSampler) self.assertIs( - middleware._exporter, trace_exporter.TraceExporter) + middleware._exporter, ocagent_exporter.TraceExporter) self.assertIs( middleware._propagator, google_cloud_format.GoogleCloudFormatPropagator) assert isinstance(middleware.sampler, always_on.AlwaysOnSampler) assert isinstance( - middleware.exporter, trace_exporter.TraceExporter) + middleware.exporter, ocagent_exporter.TraceExporter) assert isinstance( middleware.propagator, google_cloud_format.GoogleCloudFormatPropagator) @@ -254,7 +254,7 @@ def test_constructor_ocagent_trace_exporter_default_endpoint(self): patch_ocagent_trace = mock.patch( 'opencensus.ext.django.config.settings.EXPORTER', - trace_exporter.TraceExporter) + ocagent_exporter.TraceExporter) patch_params = mock.patch( 'opencensus.ext.django.config.settings.params', @@ -265,7 +265,7 @@ def test_constructor_ocagent_trace_exporter_default_endpoint(self): self.assertEqual(middleware.exporter.service_name, service_name) self.assertEqual(middleware.exporter.endpoint, - trace_exporter.DEFAULT_ENDPOINT) + ocagent_exporter.DEFAULT_ENDPOINT) def test_constructor_probability_sampler(self): from opencensus.ext.django import middleware diff --git a/contrib/opencensus-ext-flask/examples/custom.py b/contrib/opencensus-ext-flask/examples/custom.py index 1df6f7bc2..a4a922e60 100644 --- a/contrib/opencensus-ext-flask/examples/custom.py +++ b/contrib/opencensus-ext-flask/examples/custom.py @@ -23,10 +23,10 @@ import hello_world_pb2 import hello_world_pb2_grpc +from opencensus.ext.flask.flask_middleware import FlaskMiddleware +from opencensus.ext.grpc import client_interceptor +from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter from opencensus.trace import config_integration -from opencensus.trace.exporters import stackdriver_exporter -from opencensus.trace.ext.flask.flask_middleware import FlaskMiddleware -from opencensus.trace.ext.grpc import client_interceptor from opencensus.trace.samplers import probability INTEGRATIONS = ['mysql', 'postgresql', 'sqlalchemy', 'requests'] diff --git a/contrib/opencensus-ext-flask/tests/test_flask_middleware.py b/contrib/opencensus-ext-flask/tests/test_flask_middleware.py index 511d0a0a4..af75cc36a 100644 --- a/contrib/opencensus-ext-flask/tests/test_flask_middleware.py +++ b/contrib/opencensus-ext-flask/tests/test_flask_middleware.py @@ -22,17 +22,17 @@ import mock from opencensus.ext.flask import flask_middleware -from opencensus.ext.ocagent import trace_exporter +from opencensus.ext.jaeger import trace_exporter as jaeger_exporter +from opencensus.ext.ocagent import trace_exporter as ocagent_exporter +from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter +from opencensus.ext.zipkin import trace_exporter as zipkin_exporter from opencensus.trace import execution_context from opencensus.trace import span as span_module from opencensus.trace import span_data from opencensus.trace import stack_trace from opencensus.trace import status from opencensus.trace.blank_span import BlankSpan -from opencensus.trace.exporters import jaeger_exporter from opencensus.trace.exporters import print_exporter -from opencensus.trace.exporters import stackdriver_exporter -from opencensus.trace.exporters import zipkin_exporter from opencensus.trace.propagation import google_cloud_format from opencensus.trace.samplers import always_off, always_on, ProbabilitySampler from opencensus.trace.span_context import SpanContext @@ -240,7 +240,7 @@ def test_init_app_config_ocagent_trace_exporter(self): app.config = { 'OPENCENSUS_TRACE': { 'SAMPLER': ProbabilitySampler, - 'EXPORTER': trace_exporter.TraceExporter, + 'EXPORTER': ocagent_exporter.TraceExporter, 'PROPAGATOR': google_cloud_format.GoogleCloudFormatPropagator, }, 'OPENCENSUS_TRACE_PARAMS': { @@ -254,7 +254,7 @@ def test_init_app_config_ocagent_trace_exporter(self): self.assertIs(middleware.app, app) assert isinstance( - middleware.exporter, trace_exporter.TraceExporter) + middleware.exporter, ocagent_exporter.TraceExporter) self.assertEqual(middleware.exporter.service_name, 'foo') self.assertEqual(middleware.exporter.endpoint, 'localhost:50001') @@ -266,7 +266,7 @@ def test_init_app_config_ocagent_trace_exporter_default_endpoint(self): app.config = { 'OPENCENSUS_TRACE': { 'SAMPLER': ProbabilitySampler, - 'EXPORTER': trace_exporter.TraceExporter, + 'EXPORTER': ocagent_exporter.TraceExporter, 'PROPAGATOR': google_cloud_format.GoogleCloudFormatPropagator, }, 'OPENCENSUS_TRACE_PARAMS': { @@ -279,10 +279,10 @@ def test_init_app_config_ocagent_trace_exporter_default_endpoint(self): self.assertIs(middleware.app, app) assert isinstance( - middleware.exporter, trace_exporter.TraceExporter) + middleware.exporter, ocagent_exporter.TraceExporter) self.assertEqual(middleware.exporter.service_name, 'foo') self.assertEqual(middleware.exporter.endpoint, - trace_exporter.DEFAULT_ENDPOINT) + ocagent_exporter.DEFAULT_ENDPOINT) self.assertTrue(app.before_request.called) self.assertTrue(app.after_request.called) diff --git a/contrib/opencensus-ext-grpc/examples/hello_world_client.py b/contrib/opencensus-ext-grpc/examples/hello_world_client.py index 5752790a7..48e662118 100644 --- a/contrib/opencensus-ext-grpc/examples/hello_world_client.py +++ b/contrib/opencensus-ext-grpc/examples/hello_world_client.py @@ -20,8 +20,8 @@ import hello_world_pb2_grpc from opencensus.trace.tracer import Tracer -from opencensus.trace.exporters import stackdriver_exporter -from opencensus.trace.ext.grpc import client_interceptor +from opencensus.ext.grpc import client_interceptor +from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter HOST_PORT = 'localhost:50051' diff --git a/contrib/opencensus-ext-grpc/examples/hello_world_server.py b/contrib/opencensus-ext-grpc/examples/hello_world_server.py index 0ebd3038f..73b07d195 100644 --- a/contrib/opencensus-ext-grpc/examples/hello_world_server.py +++ b/contrib/opencensus-ext-grpc/examples/hello_world_server.py @@ -20,9 +20,9 @@ import hello_world_pb2 import hello_world_pb2_grpc -from opencensus.trace.ext.grpc import server_interceptor +from opencensus.ext.grpc import server_interceptor +from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter from opencensus.trace.samplers import always_on -from opencensus.trace.exporters import stackdriver_exporter _ONE_DAY_IN_SECONDS = 60 * 60 * 24 diff --git a/contrib/opencensus-ext-jaeger/CHANGELOG.md b/contrib/opencensus-ext-jaeger/CHANGELOG.md new file mode 100644 index 000000000..7918aaa78 --- /dev/null +++ b/contrib/opencensus-ext-jaeger/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## Unreleased + +- Initial version. diff --git a/contrib/opencensus-ext-jaeger/README.rst b/contrib/opencensus-ext-jaeger/README.rst new file mode 100644 index 000000000..f9c312e5d --- /dev/null +++ b/contrib/opencensus-ext-jaeger/README.rst @@ -0,0 +1,16 @@ +OpenCensus Jaeger Exporter +============================================================================ + +Installation +------------ + +:: + + pip install opencensus-ext-jaeger + +Usage +----- + +.. code:: python + + # TBD diff --git a/contrib/opencensus-ext-jaeger/opencensus/__init__.py b/contrib/opencensus-ext-jaeger/opencensus/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-jaeger/opencensus/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/contrib/opencensus-ext-jaeger/opencensus/ext/__init__.py b/contrib/opencensus-ext-jaeger/opencensus/ext/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-jaeger/opencensus/ext/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/__init__.py b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/opencensus/trace/exporters/jaeger_exporter.py b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/__init__.py similarity index 99% rename from opencensus/trace/exporters/jaeger_exporter.py rename to contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/__init__.py index 132e16818..3803d4233 100644 --- a/opencensus/trace/exporters/jaeger_exporter.py +++ b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/__init__.py @@ -22,9 +22,9 @@ from opencensus.common.transports import sync from opencensus.common.utils import timestamp_to_microseconds +from opencensus.ext.jaeger.trace_exporter.gen.jaeger import agent, jaeger from opencensus.trace import link as link_module from opencensus.trace.exporters import base -from opencensus.trace.exporters.gen.jaeger import agent, jaeger DEFAULT_HOST_NAME = 'localhost' DEFAULT_AGENT_PORT = 6831 diff --git a/opencensus/trace/exporters/gen/__init__.py b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/__init__.py similarity index 100% rename from opencensus/trace/exporters/gen/__init__.py rename to contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/__init__.py diff --git a/opencensus/trace/exporters/gen/jaeger/__init__.py b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/__init__.py similarity index 100% rename from opencensus/trace/exporters/gen/jaeger/__init__.py rename to contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/__init__.py diff --git a/opencensus/trace/exporters/gen/jaeger/agent.py b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/agent.py similarity index 98% rename from opencensus/trace/exporters/gen/jaeger/agent.py rename to contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/agent.py index 3bc9bbde6..176264a67 100644 --- a/opencensus/trace/exporters/gen/jaeger/agent.py +++ b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/agent.py @@ -9,7 +9,7 @@ from thrift.Thrift import TType, TMessageType, TApplicationException from thrift.Thrift import TProcessor from thrift.transport import TTransport -from opencensus.trace.exporters.gen.jaeger import jaeger +from opencensus.ext.jaeger.trace_exporter.gen.jaeger import jaeger class Iface(object): diff --git a/opencensus/trace/exporters/gen/jaeger/jaeger.py b/contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/jaeger.py similarity index 100% rename from opencensus/trace/exporters/gen/jaeger/jaeger.py rename to contrib/opencensus-ext-jaeger/opencensus/ext/jaeger/trace_exporter/gen/jaeger/jaeger.py diff --git a/contrib/opencensus-ext-jaeger/setup.cfg b/contrib/opencensus-ext-jaeger/setup.cfg new file mode 100644 index 000000000..2a9acf13d --- /dev/null +++ b/contrib/opencensus-ext-jaeger/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal = 1 diff --git a/contrib/opencensus-ext-jaeger/setup.py b/contrib/opencensus-ext-jaeger/setup.py new file mode 100644 index 000000000..3af0cea0e --- /dev/null +++ b/contrib/opencensus-ext-jaeger/setup.py @@ -0,0 +1,50 @@ +# Copyright 2019, OpenCensus Authors +# +# 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 setuptools import find_packages +from setuptools import setup +from version import __version__ + +setup( + name='opencensus-ext-jaeger', + version=__version__, # noqa + author='OpenCensus Authors', + author_email='census-developers@googlegroups.com', + classifiers=[ + 'Intended Audience :: Developers', + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + ], + description='OpenCensus Jaeger Trace Exporter', + include_package_data=True, + long_description=open('README.rst').read(), + install_requires=[ + 'opencensus >= 0.2.dev0, < 1.0.0', + ], + extras_require={}, + license='Apache-2.0', + packages=find_packages(exclude=('tests',)), + namespace_packages=[], + url='https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-jaeger', + zip_safe=False, +) diff --git a/tests/unit/trace/exporters/test_jaeger_exporter.py b/contrib/opencensus-ext-jaeger/tests/test_jaeger_exporter.py similarity index 91% rename from tests/unit/trace/exporters/test_jaeger_exporter.py rename to contrib/opencensus-ext-jaeger/tests/test_jaeger_exporter.py index 4daf70411..d0e853786 100644 --- a/tests/unit/trace/exporters/test_jaeger_exporter.py +++ b/contrib/opencensus-ext-jaeger/tests/test_jaeger_exporter.py @@ -16,10 +16,10 @@ import mock +from opencensus.ext.jaeger import trace_exporter +from opencensus.ext.jaeger.trace_exporter.gen.jaeger import jaeger from opencensus.trace import (attributes, link, span_context, span_data, status, time_event) -from opencensus.trace.exporters import jaeger_exporter -from opencensus.trace.exporters.gen.jaeger import jaeger class TestJaegerExporter(unittest.TestCase): @@ -30,7 +30,7 @@ def test_constructor_default(self): agent_port = 6831 agent_address = ('localhost', 6831) max_packet_size = 65000 - exporter = jaeger_exporter.JaegerExporter() + exporter = trace_exporter.JaegerExporter() agent_client = exporter.agent_client self.assertEqual(exporter.service_name, service_name) @@ -59,7 +59,7 @@ def test_constructor_explicit(self): thrift_url = 'http://localhost:14268/api/traces?format=jaeger.thrift' auth = (username, password) - exporter = jaeger_exporter.JaegerExporter( + exporter = trace_exporter.JaegerExporter( service_name=service, host_name=host_name, agent_host_name=agent_host_name, @@ -83,40 +83,40 @@ def test_constructor_explicit(self): self.assertTrue(exporter.collector.auth is None) def test_export(self): - exporter = jaeger_exporter.JaegerExporter( + exporter = trace_exporter.JaegerExporter( service_name='my_service', transport=MockTransport) exporter.export({}) - collector = jaeger_exporter.Collector( + collector = trace_exporter.Collector( transport=MockTransport, http_transport=MockTransport) collector.export({}) - agent = jaeger_exporter.AgentClientUDP(transport=MockTransport) + agent = trace_exporter.AgentClientUDP(transport=MockTransport) agent.export({}) self.assertTrue(exporter.transport.export_called) self.assertTrue(collector.transport.export_called) self.assertTrue(agent.transport.export_called) - @mock.patch('opencensus.trace.exporters.jaeger_exporter.logging') + @mock.patch('opencensus.ext.jaeger.trace_exporter.logging') def test_agent_emit_succeeded(self, mock_logging): - agent_client = jaeger_exporter.AgentClientUDP(client=MockClient) + agent_client = trace_exporter.AgentClientUDP(client=MockClient) agent_client.emit({}) self.assertTrue(agent_client.client.emit_called) self.assertFalse(mock_logging.warn.called) - @mock.patch('opencensus.trace.exporters.jaeger_exporter.logging') + @mock.patch('opencensus.ext.jaeger.trace_exporter.logging') def test_packet_capacity_exceeded(self, mock_logging): - agent_client = jaeger_exporter.AgentClientUDP( + agent_client = trace_exporter.AgentClientUDP( client=MockClient, max_packet_size=-1) agent_client.emit({}) self.assertTrue(mock_logging.warn.called) - @mock.patch('opencensus.trace.exporters.jaeger_exporter.logging') + @mock.patch('opencensus.ext.jaeger.trace_exporter.logging') def test_collector_emit_failed(self, mock_logging): url = 'http://localhost:14268/api/traces?format=jaeger.thrift' - collector = jaeger_exporter.Collector( + collector = trace_exporter.Collector( thrift_url=url, http_transport=MockTransport, client=MockClient) collector.http_transport.is_open = False collector.http_transport.code = 400 @@ -125,10 +125,10 @@ def test_collector_emit_failed(self, mock_logging): self.assertTrue(mock_logging.error.called) self.assertFalse(collector.http_transport.is_closed) - @mock.patch('opencensus.trace.exporters.jaeger_exporter.logging') + @mock.patch('opencensus.ext.jaeger.trace_exporter.logging') def test_collector_emit_succeeded(self, mock_logging): url = 'http://localhost:14268/api/traces?format=jaeger.thrift' - collector = jaeger_exporter.Collector( + collector = trace_exporter.Collector( thrift_url=url, http_transport=MockTransport, client=MockClient) collector.http_transport.is_open = True collector.http_transport.code = 200 @@ -138,26 +138,26 @@ def test_collector_emit_succeeded(self, mock_logging): self.assertTrue(collector.http_transport.is_closed) def test_collector_auth_headers(self): - collector = jaeger_exporter.Collector( + collector = trace_exporter.Collector( http_transport=MockTransport, auth=('user', 'pass')) self.assertTrue(collector.http_transport.headers_set) - collector = jaeger_exporter.Collector(http_transport=MockTransport) + collector = trace_exporter.Collector(http_transport=MockTransport) self.assertFalse(collector.http_transport.headers_set) @mock.patch.object( - jaeger_exporter.JaegerExporter, + trace_exporter.JaegerExporter, 'agent_client', new_callable=mock.PropertyMock) @mock.patch.object( - jaeger_exporter.JaegerExporter, + trace_exporter.JaegerExporter, 'collector', new_callable=mock.PropertyMock) - @mock.patch.object(jaeger_exporter.JaegerExporter, 'translate_to_jaeger') + @mock.patch.object(trace_exporter.JaegerExporter, 'translate_to_jaeger') def test_emit_succeeded(self, translate_mock, collector_mock, agent_mock): collector = collector_mock.return_value = MockTransport() agent = agent_mock.return_value = MockTransport() - exporter = jaeger_exporter.JaegerExporter() + exporter = trace_exporter.JaegerExporter() translate_mock.return_value = {'test': 'mock'} exporter.emit([]) self.assertTrue(agent.export_called) @@ -165,7 +165,7 @@ def test_emit_succeeded(self, translate_mock, collector_mock, agent_mock): collector_mock.return_value = None agent = agent_mock.return_value = MockTransport() - exporter = jaeger_exporter.JaegerExporter() + exporter = trace_exporter.JaegerExporter() exporter.emit([]) self.assertTrue(agent.export_called) @@ -299,7 +299,7 @@ def test_translate_to_jaeger(self): ) ] - exporter = jaeger_exporter.JaegerExporter() + exporter = trace_exporter.JaegerExporter() spans = exporter.translate_to_jaeger(span_datas) expected_spans = [ @@ -441,10 +441,10 @@ def test_translate_to_jaeger(self): def test_convert_hex_str_to_int(self): invalid_id = '990c63257de34c92' - jaeger_exporter._convert_hex_str_to_int(invalid_id) + trace_exporter._convert_hex_str_to_int(invalid_id) valid_id = '290c63257de34c92' - jaeger_exporter._convert_hex_str_to_int(valid_id) - self.assertIsNone(jaeger_exporter._convert_hex_str_to_int(None)) + trace_exporter._convert_hex_str_to_int(valid_id) + self.assertIsNone(trace_exporter._convert_hex_str_to_int(None)) class MockBatch(object): diff --git a/contrib/opencensus-ext-jaeger/version.py b/contrib/opencensus-ext-jaeger/version.py new file mode 100644 index 000000000..f3a64a892 --- /dev/null +++ b/contrib/opencensus-ext-jaeger/version.py @@ -0,0 +1,15 @@ +# Copyright 2019, OpenCensus Authors +# +# 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. + +__version__ = '0.1.dev0' diff --git a/contrib/opencensus-ext-pyramid/tests/test_pyramid_middleware.py b/contrib/opencensus-ext-pyramid/tests/test_pyramid_middleware.py index baec4ad75..e36584455 100644 --- a/contrib/opencensus-ext-pyramid/tests/test_pyramid_middleware.py +++ b/contrib/opencensus-ext-pyramid/tests/test_pyramid_middleware.py @@ -24,10 +24,10 @@ from opencensus.common.transports import sync from opencensus.ext.pyramid import pyramid_middleware +from opencensus.ext.zipkin import trace_exporter as zipkin_exporter from opencensus.trace import execution_context from opencensus.trace import span as span_module from opencensus.trace.exporters import print_exporter -from opencensus.trace.exporters import zipkin_exporter from opencensus.trace.propagation import google_cloud_format from opencensus.trace.samplers import always_on from opencensus.trace.blank_span import BlankSpan diff --git a/contrib/opencensus-ext-stackdriver/CHANGELOG.md b/contrib/opencensus-ext-stackdriver/CHANGELOG.md new file mode 100644 index 000000000..7918aaa78 --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## Unreleased + +- Initial version. diff --git a/contrib/opencensus-ext-stackdriver/README.rst b/contrib/opencensus-ext-stackdriver/README.rst new file mode 100644 index 000000000..c58bc52a5 --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/README.rst @@ -0,0 +1,16 @@ +OpenCensus Stackdriver Trace Exporter +============================================================================ + +Installation +------------ + +:: + + pip install opencensus-ext-stackdriver + +Usage +----- + +.. code:: python + + # TBD diff --git a/contrib/opencensus-ext-stackdriver/opencensus/__init__.py b/contrib/opencensus-ext-stackdriver/opencensus/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/opencensus/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/contrib/opencensus-ext-stackdriver/opencensus/ext/__init__.py b/contrib/opencensus-ext-stackdriver/opencensus/ext/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/opencensus/ext/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/__init__.py b/contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/opencensus/trace/exporters/stackdriver_exporter.py b/contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/trace_exporter/__init__.py similarity index 100% rename from opencensus/trace/exporters/stackdriver_exporter.py rename to contrib/opencensus-ext-stackdriver/opencensus/ext/stackdriver/trace_exporter/__init__.py diff --git a/contrib/opencensus-ext-stackdriver/setup.cfg b/contrib/opencensus-ext-stackdriver/setup.cfg new file mode 100644 index 000000000..2a9acf13d --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal = 1 diff --git a/contrib/opencensus-ext-stackdriver/setup.py b/contrib/opencensus-ext-stackdriver/setup.py new file mode 100644 index 000000000..5dfa666a8 --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/setup.py @@ -0,0 +1,51 @@ +# Copyright 2019, OpenCensus Authors +# +# 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 setuptools import find_packages +from setuptools import setup +from version import __version__ + +setup( + name='opencensus-ext-stackdriver', + version=__version__, # noqa + author='OpenCensus Authors', + author_email='census-developers@googlegroups.com', + classifiers=[ + 'Intended Audience :: Developers', + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + ], + description='OpenCensus Stackdriver Trace Exporter', + include_package_data=True, + long_description=open('README.rst').read(), + install_requires=[ + 'google-cloud-trace >= 0.20.0, < 1.0.0', + 'opencensus >= 0.2.dev0, < 1.0.0', + ], + extras_require={}, + license='Apache-2.0', + packages=find_packages(exclude=('tests',)), + namespace_packages=[], + url='https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-stackdriver', + zip_safe=False, +) diff --git a/tests/unit/trace/exporters/test_stackdriver_exporter.py b/contrib/opencensus-ext-stackdriver/tests/test_stackdriver_exporter.py similarity index 93% rename from tests/unit/trace/exporters/test_stackdriver_exporter.py rename to contrib/opencensus-ext-stackdriver/tests/test_stackdriver_exporter.py index 019dda1d4..925d1e415 100644 --- a/tests/unit/trace/exporters/test_stackdriver_exporter.py +++ b/contrib/opencensus-ext-stackdriver/tests/test_stackdriver_exporter.py @@ -17,9 +17,9 @@ import mock from opencensus.common.version import __version__ +from opencensus.ext.stackdriver import trace_exporter from opencensus.trace import span_context from opencensus.trace import span_data as span_data_module -from opencensus.trace.exporters import stackdriver_exporter class _Client(object): @@ -33,11 +33,11 @@ def __init__(self, project=None): class TestStackdriverExporter(unittest.TestCase): def test_constructor_default(self): patch = mock.patch( - 'opencensus.trace.exporters.stackdriver_exporter.Client', + 'opencensus.ext.stackdriver.trace_exporter.Client', new=_Client) with patch: - exporter = stackdriver_exporter.StackdriverExporter() + exporter = trace_exporter.StackdriverExporter() project_id = 'PROJECT' self.assertEqual(exporter.project_id, project_id) @@ -48,7 +48,7 @@ def test_constructor_explicit(self): client.project = project_id transport = mock.Mock() - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id, transport=transport) self.assertIs(exporter.client, client) @@ -58,13 +58,13 @@ def test_export(self): client = mock.Mock() project_id = 'PROJECT' client.project = project_id - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id, transport=MockTransport) exporter.export({}) self.assertTrue(exporter.transport.export_called) - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance', return_value=None) def test_emit(self, mr_mock): @@ -133,7 +133,7 @@ def test_emit(self, mr_mock): project_id = 'PROJECT' client.project = project_id - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id) exporter.emit(span_datas) @@ -143,7 +143,7 @@ def test_emit(self, mr_mock): client.batch_write_spans.assert_called_with(name, stackdriver_spans) self.assertTrue(client.batch_write_spans.called) - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance', return_value=None) def test_translate_to_stackdriver(self, mr_mock): @@ -202,7 +202,7 @@ def test_translate_to_stackdriver(self, mr_mock): client = mock.Mock() client.project = project_id - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id) spans = list(exporter.translate_to_stackdriver(trace)) @@ -260,7 +260,7 @@ def test_translate_common_attributes_to_stackdriver_no_attribute_map(self): project_id = 'PROJECT' client = mock.Mock() client.project = project_id - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id) attributes = {'outer key': 'some value'} @@ -273,7 +273,7 @@ def test_translate_common_attributes_to_stackdriver_none(self): project_id = 'PROJECT' client = mock.Mock() client.project = project_id - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id) # does not throw @@ -283,7 +283,7 @@ def test_translate_common_attributes_to_stackdriver(self): project_id = 'PROJECT' client = mock.Mock() client.project = project_id - exporter = stackdriver_exporter.StackdriverExporter( + exporter = trace_exporter.StackdriverExporter( client=client, project_id=project_id) attributes = { @@ -533,7 +533,7 @@ def test_translate_common_attributes_to_stackdriver(self): class Test_set_attributes_gae(unittest.TestCase): - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance', return_value=None) def test_set_attributes_gae(self, mr_mock): @@ -581,21 +581,21 @@ def test_set_attributes_gae(self, mr_mock): with mock.patch.dict( os.environ, { - stackdriver_exporter._APPENGINE_FLEXIBLE_ENV_VM: 'vm', - stackdriver_exporter._APPENGINE_FLEXIBLE_ENV_FLEX: 'flex', + trace_exporter._APPENGINE_FLEXIBLE_ENV_VM: 'vm', + trace_exporter._APPENGINE_FLEXIBLE_ENV_FLEX: 'flex', 'GOOGLE_CLOUD_PROJECT': 'project', 'GAE_SERVICE': 'service', 'GAE_VERSION': 'version' }): - self.assertTrue(stackdriver_exporter.is_gae_environment()) - stackdriver_exporter.set_attributes(trace) + self.assertTrue(trace_exporter.is_gae_environment()) + trace_exporter.set_attributes(trace) span = trace.get('spans')[0] self.assertEqual(span, expected) class TestMonitoredResourceAttributes(unittest.TestCase): - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance') def test_monitored_resource_attributes_gke(self, gmr_mock): import os @@ -690,19 +690,19 @@ def test_monitored_resource_attributes_gke(self, gmr_mock): gmr_mock.return_value = mock_resource with mock.patch.dict( os.environ, { - stackdriver_exporter._APPENGINE_FLEXIBLE_ENV_VM: 'vm', - stackdriver_exporter._APPENGINE_FLEXIBLE_ENV_FLEX: 'flex', + trace_exporter._APPENGINE_FLEXIBLE_ENV_VM: 'vm', + trace_exporter._APPENGINE_FLEXIBLE_ENV_FLEX: 'flex', 'GOOGLE_CLOUD_PROJECT': 'project', 'GAE_SERVICE': 'service', 'GAE_VERSION': 'version' }): - self.assertTrue(stackdriver_exporter.is_gae_environment()) - stackdriver_exporter.set_attributes(trace) + self.assertTrue(trace_exporter.is_gae_environment()) + trace_exporter.set_attributes(trace) span = trace.get('spans')[0] self.assertEqual(span, expected) - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance') def test_monitored_resource_attributes_gce(self, gmr_mock): trace = {'spans': [{'attributes': {}}]} @@ -747,11 +747,11 @@ def test_monitored_resource_attributes_gce(self, gmr_mock): 'zone': 'zone1' } gmr_mock.return_value = mock_resource - stackdriver_exporter.set_attributes(trace) + trace_exporter.set_attributes(trace) span = trace.get('spans')[0] self.assertEqual(span, expected) - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance') def test_monitored_resource_attributes_aws(self, amr_mock): trace = {'spans': [{'attributes': {}}]} @@ -790,11 +790,11 @@ def test_monitored_resource_attributes_aws(self, amr_mock): } amr_mock.return_value = mock_resource - stackdriver_exporter.set_attributes(trace) + trace_exporter.set_attributes(trace) span = trace.get('spans')[0] self.assertEqual(span, expected) - @mock.patch('opencensus.trace.exporters.stackdriver_exporter.' + @mock.patch('opencensus.ext.stackdriver.trace_exporter.' 'monitored_resource.get_instance') def test_monitored_resource_attributes_None(self, mr_mock): trace = {'spans': [{'attributes': {}}]} @@ -814,7 +814,7 @@ def test_monitored_resource_attributes_None(self, mr_mock): } mr_mock.return_value = None - stackdriver_exporter.set_attributes(trace) + trace_exporter.set_attributes(trace) span = trace.get('spans')[0] self.assertEqual(span, expected) @@ -823,7 +823,7 @@ def test_monitored_resource_attributes_None(self, mr_mock): mock_resource.get_labels.return_value = mock.Mock() mr_mock.return_value = mock_resource - stackdriver_exporter.set_attributes(trace) + trace_exporter.set_attributes(trace) span = trace.get('spans')[0] self.assertEqual(span, expected) diff --git a/contrib/opencensus-ext-stackdriver/version.py b/contrib/opencensus-ext-stackdriver/version.py new file mode 100644 index 000000000..f3a64a892 --- /dev/null +++ b/contrib/opencensus-ext-stackdriver/version.py @@ -0,0 +1,15 @@ +# Copyright 2019, OpenCensus Authors +# +# 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. + +__version__ = '0.1.dev0' diff --git a/contrib/opencensus-ext-zipkin/CHANGELOG.md b/contrib/opencensus-ext-zipkin/CHANGELOG.md new file mode 100644 index 000000000..7918aaa78 --- /dev/null +++ b/contrib/opencensus-ext-zipkin/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## Unreleased + +- Initial version. diff --git a/contrib/opencensus-ext-zipkin/README.rst b/contrib/opencensus-ext-zipkin/README.rst new file mode 100644 index 000000000..59e1632f4 --- /dev/null +++ b/contrib/opencensus-ext-zipkin/README.rst @@ -0,0 +1,16 @@ +OpenCensus Zipkin Exporter +============================================================================ + +Installation +------------ + +:: + + pip install opencensus-ext-zipkin + +Usage +----- + +.. code:: python + + # TBD diff --git a/contrib/opencensus-ext-zipkin/opencensus/__init__.py b/contrib/opencensus-ext-zipkin/opencensus/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-zipkin/opencensus/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/contrib/opencensus-ext-zipkin/opencensus/ext/__init__.py b/contrib/opencensus-ext-zipkin/opencensus/ext/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-zipkin/opencensus/ext/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/__init__.py b/contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/__init__.py new file mode 100644 index 000000000..69e3be50d --- /dev/null +++ b/contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/__init__.py @@ -0,0 +1 @@ +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/opencensus/trace/exporters/zipkin_exporter.py b/contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/trace_exporter/__init__.py similarity index 100% rename from opencensus/trace/exporters/zipkin_exporter.py rename to contrib/opencensus-ext-zipkin/opencensus/ext/zipkin/trace_exporter/__init__.py diff --git a/contrib/opencensus-ext-zipkin/setup.cfg b/contrib/opencensus-ext-zipkin/setup.cfg new file mode 100644 index 000000000..2a9acf13d --- /dev/null +++ b/contrib/opencensus-ext-zipkin/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal = 1 diff --git a/contrib/opencensus-ext-zipkin/setup.py b/contrib/opencensus-ext-zipkin/setup.py new file mode 100644 index 000000000..1c4832713 --- /dev/null +++ b/contrib/opencensus-ext-zipkin/setup.py @@ -0,0 +1,50 @@ +# Copyright 2019, OpenCensus Authors +# +# 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 setuptools import find_packages +from setuptools import setup +from version import __version__ + +setup( + name='opencensus-ext-zipkin', + version=__version__, # noqa + author='OpenCensus Authors', + author_email='census-developers@googlegroups.com', + classifiers=[ + 'Intended Audience :: Developers', + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: Apache Software License', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + ], + description='OpenCensus Zipkin Trace Exporter', + include_package_data=True, + long_description=open('README.rst').read(), + install_requires=[ + 'opencensus >= 0.2.dev0, < 1.0.0', + ], + extras_require={}, + license='Apache-2.0', + packages=find_packages(exclude=('tests',)), + namespace_packages=[], + url='https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-zipkin', + zip_safe=False, +) diff --git a/tests/unit/trace/exporters/test_zipkin_exporter.py b/contrib/opencensus-ext-zipkin/tests/test_zipkin_exporter.py similarity index 93% rename from tests/unit/trace/exporters/test_zipkin_exporter.py rename to contrib/opencensus-ext-zipkin/tests/test_zipkin_exporter.py index 7459bb3db..2275afc3b 100644 --- a/tests/unit/trace/exporters/test_zipkin_exporter.py +++ b/contrib/opencensus-ext-zipkin/tests/test_zipkin_exporter.py @@ -16,10 +16,10 @@ import mock from datetime import datetime +from opencensus.ext.zipkin import trace_exporter from opencensus.trace import span_context from opencensus.trace import span_data as span_data_module from opencensus.trace import time_event -from opencensus.trace.exporters import zipkin_exporter class TestZipkinExporter(unittest.TestCase): @@ -30,7 +30,7 @@ def test_constructor(self): endpoint = '/api/v2/test' ipv4 = '127.0.0.1' - exporter = zipkin_exporter.ZipkinExporter( + exporter = trace_exporter.ZipkinExporter( service_name=service_name, host_name=host_name, port=port, @@ -47,20 +47,20 @@ def test_constructor(self): self.assertEqual(exporter.ipv4, ipv4) def test_export(self): - exporter = zipkin_exporter.ZipkinExporter( + exporter = trace_exporter.ZipkinExporter( service_name='my_service', transport=MockTransport) exporter.export({}) self.assertTrue(exporter.transport.export_called) @mock.patch('requests.post') - @mock.patch.object(zipkin_exporter.ZipkinExporter, 'translate_to_zipkin') + @mock.patch.object(trace_exporter.ZipkinExporter, 'translate_to_zipkin') def test_emit_succeeded(self, translate_mock, requests_mock): import json trace = {'test': 'this_is_for_test'} - exporter = zipkin_exporter.ZipkinExporter(service_name='my_service') + exporter = trace_exporter.ZipkinExporter(service_name='my_service') response = mock.Mock() response.status_code = 202 requests_mock.return_value = response @@ -70,16 +70,16 @@ def test_emit_succeeded(self, translate_mock, requests_mock): requests_mock.assert_called_once_with( url=exporter.url, data=json.dumps(trace), - headers=zipkin_exporter.ZIPKIN_HEADERS) + headers=trace_exporter.ZIPKIN_HEADERS) @mock.patch('requests.post') - @mock.patch.object(zipkin_exporter.ZipkinExporter, 'translate_to_zipkin') + @mock.patch.object(trace_exporter.ZipkinExporter, 'translate_to_zipkin') def test_emit_failed(self, translate_mock, requests_mock): import json trace = {'test': 'this_is_for_test'} - exporter = zipkin_exporter.ZipkinExporter(service_name='my_service') + exporter = trace_exporter.ZipkinExporter(service_name='my_service') response = mock.Mock() response.status_code = 400 requests_mock.return_value = response @@ -89,7 +89,7 @@ def test_emit_failed(self, translate_mock, requests_mock): requests_mock.assert_called_once_with( url=exporter.url, data=json.dumps(trace), - headers=zipkin_exporter.ZIPKIN_HEADERS) + headers=trace_exporter.ZIPKIN_HEADERS) def test_translate_to_zipkin_span_kind_none(self): trace_id = '6e0c63257de34c92bf9efcd03927272e' @@ -215,7 +215,7 @@ def test_translate_to_zipkin_span_kind_none(self): ] # Test ipv4 local endpoint - exporter_ipv4 = zipkin_exporter.ZipkinExporter( + exporter_ipv4 = trace_exporter.ZipkinExporter( service_name='my_service', ipv4=ipv4) zipkin_spans_ipv4 = exporter_ipv4.translate_to_zipkin( span_datas=spans_ipv4) @@ -223,7 +223,7 @@ def test_translate_to_zipkin_span_kind_none(self): self.assertEqual(zipkin_spans_ipv4, expected_zipkin_spans_ipv4) # Test ipv6 local endpoint - exporter_ipv6 = zipkin_exporter.ZipkinExporter( + exporter_ipv6 = trace_exporter.ZipkinExporter( service_name='my_service', ipv6=ipv6) zipkin_spans_ipv6 = exporter_ipv6.translate_to_zipkin( span_datas=spans_ipv6) @@ -406,7 +406,7 @@ def test_translate_to_zipkin_with_annotations(self): ] # Test ipv4 local endpoint - exporter_ipv4 = zipkin_exporter.ZipkinExporter( + exporter_ipv4 = trace_exporter.ZipkinExporter( service_name='my_service', ipv4=ipv4) zipkin_spans_ipv4 = exporter_ipv4.translate_to_zipkin( span_datas=spans_ipv4) @@ -414,7 +414,7 @@ def test_translate_to_zipkin_with_annotations(self): self.assertEqual(zipkin_spans_ipv4, expected_zipkin_spans_ipv4) # Test ipv6 local endpoint - exporter_ipv6 = zipkin_exporter.ZipkinExporter( + exporter_ipv6 = trace_exporter.ZipkinExporter( service_name='my_service', ipv6=ipv6) zipkin_spans_ipv6 = exporter_ipv6.translate_to_zipkin( span_datas=spans_ipv6) @@ -424,11 +424,11 @@ def test_translate_to_zipkin_with_annotations(self): def test_ignore_incorrect_spans(self): attributes = {'unknown_value': {}} self.assertEqual( - zipkin_exporter._extract_tags_from_span(attributes), {}) + trace_exporter._extract_tags_from_span(attributes), {}) attributes = None self.assertEqual( - zipkin_exporter._extract_tags_from_span(attributes), {}) + trace_exporter._extract_tags_from_span(attributes), {}) class MockTransport(object): diff --git a/contrib/opencensus-ext-zipkin/version.py b/contrib/opencensus-ext-zipkin/version.py new file mode 100644 index 000000000..f3a64a892 --- /dev/null +++ b/contrib/opencensus-ext-zipkin/version.py @@ -0,0 +1,15 @@ +# Copyright 2019, OpenCensus Authors +# +# 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. + +__version__ = '0.1.dev0' diff --git a/docs/trace/api/stackdriver_exporter.rst b/docs/trace/api/stackdriver_exporter.rst index 01756ff9c..e284e4301 100644 --- a/docs/trace/api/stackdriver_exporter.rst +++ b/docs/trace/api/stackdriver_exporter.rst @@ -1,6 +1,6 @@ Exporter - Stackdriver Exporter =============================== -.. automodule:: opencensus.trace.exporters.stackdriver_exporter +.. automodule:: opencensus.ext.stackdriver.trace_exporter :members: :show-inheritance: diff --git a/docs/trace/api/zipkin_exporter.rst b/docs/trace/api/zipkin_exporter.rst index 6a2edb668..066a8d065 100644 --- a/docs/trace/api/zipkin_exporter.rst +++ b/docs/trace/api/zipkin_exporter.rst @@ -1,6 +1,6 @@ Exporter - Zipkin Exporter ========================== -.. automodule:: opencensus.trace.exporters.zipkin_exporter +.. automodule:: opencensus.ext.zipkin.trace_exporter :members: :show-inheritance: diff --git a/docs/trace/usage.rst b/docs/trace/usage.rst index 1b0af6d91..a205cba75 100644 --- a/docs/trace/usage.rst +++ b/docs/trace/usage.rst @@ -120,7 +120,7 @@ This example shows how to report the traces to Stackdriver Trace: .. code:: python - from opencensus.trace.exporters import stackdriver_exporter + from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter from opencensus.trace import tracer as tracer_module exporter = stackdriver_exporter.StackdriverExporter( diff --git a/nox.py b/nox.py index 42fbca67f..5c1ab8212 100644 --- a/nox.py +++ b/nox.py @@ -27,6 +27,7 @@ def _install_dev_packages(session): session.install('-e', 'contrib/opencensus-ext-flask') session.install('-e', 'contrib/opencensus-ext-grpc') session.install('-e', 'contrib/opencensus-ext-httplib') + session.install('-e', 'contrib/opencensus-ext-jaeger') session.install('-e', 'contrib/opencensus-ext-mysql') session.install('-e', 'contrib/opencensus-ext-ocagent') session.install('-e', 'contrib/opencensus-ext-postgresql') @@ -35,7 +36,9 @@ def _install_dev_packages(session): session.install('-e', 'contrib/opencensus-ext-pyramid') session.install('-e', 'contrib/opencensus-ext-requests') session.install('-e', 'contrib/opencensus-ext-sqlalchemy') + session.install('-e', 'contrib/opencensus-ext-stackdriver') session.install('-e', 'contrib/opencensus-ext-threading') + session.install('-e', 'contrib/opencensus-ext-zipkin') session.install('-e', 'contrib/opencensus-ext-google-cloud-clientlibs') diff --git a/tests/system/trace/django/app/settings.py b/tests/system/trace/django/app/settings.py index 9fd034335..fb2db39e2 100644 --- a/tests/system/trace/django/app/settings.py +++ b/tests/system/trace/django/app/settings.py @@ -84,7 +84,7 @@ 'SAMPLER': 'opencensus.trace.samplers.always_on.AlwaysOnSampler', 'EXPORTER': - 'opencensus.trace.exporters.stackdriver_exporter.StackdriverExporter', + 'opencensus.ext.stackdriver.trace_exporter.StackdriverExporter', 'PROPAGATOR': 'opencensus.trace.propagation.google_cloud_format.' 'GoogleCloudFormatPropagator', diff --git a/tests/system/trace/flask/main.py b/tests/system/trace/flask/main.py index cb3384144..b103d8ada 100644 --- a/tests/system/trace/flask/main.py +++ b/tests/system/trace/flask/main.py @@ -21,8 +21,8 @@ from opencensus.common.transports import async_ from opencensus.ext.flask.flask_middleware import FlaskMiddleware +from opencensus.ext.stackdriver import trace_exporter as stackdriver_exporter from opencensus.trace import config_integration -from opencensus.trace.exporters import stackdriver_exporter INTEGRATIONS = ['mysql', 'postgresql', 'sqlalchemy']