Skip to content

Commit

Permalink
rename stackdriver to cloud trace
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Xue committed May 19, 2020
1 parent 3784ba8 commit f789229
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 84 deletions.
31 changes: 15 additions & 16 deletions ext/opentelemetry-ext-cloud-trace/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,29 +16,28 @@ Usage
.. code:: python
from opentelemetry import trace
from opentelemetry.ext import stackdriver
from opentelemetry.sdk.trace import Tracer
from opentelemetry.sdk.trace.export import BatchExportSpanProcessor
trace.set_preferred_tracer_implementation(lambda T: Tracer())
tracer = trace.tracer()
# create a StackdriverSpanExporter
stackdriver_exporter = stackdriver.trace.StackdriverSpanExporter(
project_id='my-helloworld-project',
from opentelemetry.ext.cloud_trace import CloudTraceSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
SimpleExportSpanProcessor,
)
# Create a BatchExportSpanProcessor and add the exporter to it
span_processor = BatchExportSpanProcessor(stackdriver_exporter)
# add to the tracer
tracer.add_span_processor(span_processor)
trace.set_tracer_provider(TracerProvider())
cloud_trace_exporter = CloudTraceSpanExporter(
project_id='my-gcloud-project',
)
trace.get_tracer_provider().add_span_processor(
SimpleExportSpanProcessor(cloud_trace_exporter)
)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span('foo'):
print('Hello world!')
References
----------

* `Stackdriver <https://cloud.google.com/stackdriver/>`_
* `Cloud Trace <https://cloud.google.com/trace/>`_
* `OpenTelemetry Project <https://opentelemetry.io/>`_
26 changes: 15 additions & 11 deletions ext/opentelemetry-ext-cloud-trace/examples/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,22 @@
import requests

from opentelemetry import trace
from opentelemetry.ext import http_requests
from opentelemetry.ext.stackdriver.trace import StackdriverSpanExporter
from opentelemetry.sdk.trace import Tracer
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
import opentelemetry.ext.requests
from opentelemetry import trace
from opentelemetry.ext.cloud_trace import CloudTraceSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
SimpleExportSpanProcessor,
)
opentelemetry.ext.requests.RequestsInstrumentor().instrument()
trace.set_tracer_provider(TracerProvider())

trace.set_preferred_tracer_implementation(lambda T: Tracer())
tracer = trace.tracer()
span_processor = SimpleExportSpanProcessor(
StackdriverSpanExporter(project_id="my-helloworld-project")
cloud_trace_exporter = CloudTraceSpanExporter(
project_id='aaxue-starter',
)
trace.get_tracer_provider().add_span_processor(
SimpleExportSpanProcessor(cloud_trace_exporter)
)
tracer.add_span_processor(span_processor)
tracer = trace.get_tracer(__name__)

http_requests.enable(tracer)
response = requests.get(url="http://localhost:7777/hello")
span_processor.shutdown()
2 changes: 1 addition & 1 deletion ext/opentelemetry-ext-cloud-trace/examples/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

from opentelemetry import trace
from opentelemetry.ext import http_requests
from opentelemetry.ext.stackdriver.trace import StackdriverSpanExporter
from opentelemetry.ext.stackdriver import StackdriverSpanExporter
from opentelemetry.ext.wsgi import OpenTelemetryMiddleware
from opentelemetry.sdk.trace import Tracer
from opentelemetry.sdk.trace.export import BatchExportSpanProcessor
Expand Down
37 changes: 15 additions & 22 deletions ext/opentelemetry-ext-cloud-trace/examples/trace.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,18 @@
# Copyright 2019, OpenTelemetry 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 opentelemetry import trace
from opentelemetry.ext.stackdriver.trace import StackdriverSpanExporter
from opentelemetry.sdk.trace import Tracer
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
from opentelemetry.ext.cloud_trace import CloudTraceSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
SimpleExportSpanProcessor,
)

trace.set_preferred_tracer_implementation(lambda T: Tracer())
tracer = trace.tracer()
tracer.add_span_processor(SimpleExportSpanProcessor(StackdriverSpanExporter()))
trace.set_tracer_provider(TracerProvider())

with tracer.start_as_current_span("hello") as span:
print("Hello, World!")
cloud_trace_exporter = CloudTraceSpanExporter(
project_id='my-gcloud-project',
)
trace.get_tracer_provider().add_span_processor(
SimpleExportSpanProcessor(cloud_trace_exporter)
)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span('foo'):
print('Hello world!')
2 changes: 1 addition & 1 deletion ext/opentelemetry-ext-cloud-trace/setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#
[metadata]
name = opentelemetry-ext-cloud-trace
description = Stackdriver integration for OpenTelemetry
description = Cloud Trace integration for OpenTelemetry
long_description = file: README.rst
long_description_content_type = text/x-rst
author = OpenTelemetry Authors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

"""Stackdriver Span Exporter for OpenTelemetry."""
"""Cloud Trace Span Exporter for OpenTelemetry."""

import logging
from typing import Sequence, Dict, Any, List
Expand All @@ -36,11 +36,11 @@
MAX_LENGTH = 128


class StackdriverSpanExporter(SpanExporter):
"""Stackdriver span exporter for OpenTelemetry.
class CloudTraceSpanExporter(SpanExporter):
"""Cloud Trace span exporter for OpenTelemetry.
Args:
client: Stackdriver Trace client.
client: Cloud Trace client.
project_id: project_id to create the Trace client.
"""

Expand All @@ -53,43 +53,43 @@ def __init__(
self.project_id = project_id

def export(self, spans: Sequence[Span]) -> SpanExportResult:
"""Export the spans to Stackdriver.
"""Export the spans to Cloud Trace.
See: https://cloud.google.com/trace/docs/reference/v2/rest/v2/
projects.traces/batchWrite
Args:
spans: Tuple of spans to export
"""
stackdriver_formatted_spans = self.translate_to_stackdriver(spans)
stackdriver_spans = []
for span in stackdriver_formatted_spans:
cloud_trace_formatted_spans = self.translate_to_cloud_trace(spans)
cloud_trace_spans = []
for span in cloud_trace_formatted_spans:
try:
stackdriver_spans.append(self.client.create_span(**span))
cloud_trace_spans.append(self.client.create_span(**span))
except Exception as ex:
logger.warning("Error {} when creating span {}".format(ex, span))

try:
self.client.batch_write_spans(
"projects/{}".format(self.project_id),
stackdriver_spans,
cloud_trace_spans,
)
except Exception as ex:
logger.warning("Error while writing to stackdriver: %s", ex)
logger.warning("Error while writing to Cloud Trace: %s", ex)
return SpanExportResult.FAILED_RETRYABLE

return SpanExportResult.SUCCESS

def translate_to_stackdriver(
def translate_to_cloud_trace(
self, spans: Sequence[Span]
) -> List[Dict[str, Any]]:
"""Translate the spans to Stackdriver format.
"""Translate the spans to Cloud Trace format.
Args:
spans: Tuple of spans to convert
"""

stackdriver_spans = []
cloud_trace_spans = []

for span in spans:
ctx = span.get_context()
Expand All @@ -108,7 +108,8 @@ def translate_to_stackdriver(
start_time = get_time_from_ns(span.start_time)
end_time = get_time_from_ns(span.end_time)

span.attributes["g.co/agent"] = AGENT
attributes = _extract_attributes(span.attributes)
attributes['attribute_map']["g.co/agent"] = _format_attribute_value(AGENT)

sd_span = {
"name": span_name,
Expand All @@ -117,23 +118,15 @@ def translate_to_stackdriver(
"start_time": start_time,
"end_time": end_time,
"parent_span_id": parent_id,
"attributes": _extract_attributes(span.attributes),
"attributes": attributes,
"links": _extract_links(span.links),
"status": _extract_status(span.status),
"time_events": _extract_events(span.events),
}

"""
}
span_txt = {'end_time': end_time,
'span_id': SPAN_ID,
'start_time': start_time,
'name': '''projects/{}/traces/{}/spans/{}'''.format(PROJECT_ID, TRACE_ID, SPAN_ID),
'display_name': {'value': 'FISHYYYY'}}"""

stackdriver_spans.append(sd_span)
cloud_trace_spans.append(sd_span)

return stackdriver_spans
return cloud_trace_spans

def shutdown(self):
pass
Expand All @@ -146,12 +139,12 @@ def get_time_from_ns(ns):
return {'seconds': int(ns / 1e9), 'nanos': int(ns % 1e9)}


def get_truncatable_str(str_to_convert):
def get_truncatable_str(str_to_convert, max_length=MAX_LENGTH):
"""Truncate a string if exceed limit and record the truncated bytes
count.
"""
truncated, truncated_byte_count = check_str_length(
str_to_convert, MAX_LENGTH
str_to_convert, max_length
)

result = {
Expand Down Expand Up @@ -204,11 +197,10 @@ def _extract_events(events: Sequence[Event]):
"""Convert span.events to dict."""
logs = []
for event in events:
annotation_json = {"description": get_truncatable_str(event.name)}
if event.attributes is not None:
annotation_json["attributes"] = _extract_attributes(
event.attributes
)
annotation_json = {"description": get_truncatable_str(event.name, 256),
"attributes": _extract_attributes(
event.attributes
)}

logs.append(
{
Expand Down

0 comments on commit f789229

Please sign in to comment.