Skip to content
This repository was archived by the owner on Mar 6, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
b13ad47
testing first trace export
aravinsiva Aug 1, 2020
cacea7c
instrumention client.py
aravinsiva Aug 3, 2020
63e9581
instrumenting job.py and adding documentation
aravinsiva Aug 4, 2020
719ed83
reconfiguring imports
aravinsiva Aug 4, 2020
72f22b6
quick cleanup of unused variable
aravinsiva Aug 5, 2020
ff8171f
adding more attributes in module and limiting complexity of instrumen…
aravinsiva Aug 7, 2020
456b445
adding tests, nox and correct attribute additions in client & job
aravinsiva Aug 9, 2020
f4aba6d
adding tests, nox and correct attribute additions in client & job (le…
aravinsiva Aug 9, 2020
e223657
linting
aravinsiva Aug 9, 2020
78b8298
reformatting noxfile.[y
aravinsiva Aug 9, 2020
88b1a57
Merge branch 'master' into opentelemetry-tracing
aravinsiva Aug 9, 2020
e0895c9
Merge branch 'master' into opentelemetry-tracing
aravinsiva Aug 10, 2020
95a35ad
addressing suggested changes
aravinsiva Aug 11, 2020
3bf4574
Merge branch 'opentelemetry-tracing' of https://github.com/aravinsiva…
aravinsiva Aug 11, 2020
4dbb692
adding suggested changes
aravinsiva Aug 12, 2020
406f61a
removing print statements
aravinsiva Aug 12, 2020
c2b9add
setting same version across all OT [ackages and other reccommended ch…
aravinsiva Aug 12, 2020
d425909
suggested changes
aravinsiva Aug 12, 2020
64ec5fd
fixing packages issue in nox and updating documentation
aravinsiva Aug 13, 2020
73230dc
fixing module install issue
aravinsiva Aug 13, 2020
ae04fc6
restructuring design for testing adding first layer of tests (some st…
aravinsiva Aug 14, 2020
ac56488
adding reamining client tests and all job tests
aravinsiva Aug 15, 2020
d4de926
fixing linting issues
aravinsiva Aug 15, 2020
2d8aeb3
Merge branch 'master' into opentelemetry-tracing
tswast Aug 17, 2020
cd8e303
fixing trace not defined issue
aravinsiva Aug 17, 2020
d8c601d
fixing lint issues
aravinsiva Aug 17, 2020
2bcd106
fixing documentation issues and python2 testing issue
aravinsiva Aug 17, 2020
f1de589
linting and fixing coverage issues
aravinsiva Aug 18, 2020
72a77d1
Merge branch 'master' into opentelemetry-tracing
tswast Aug 18, 2020
0c7b354
adding suggested changes
aravinsiva Aug 18, 2020
51045f1
Merge branch 'opentelemetry-tracing' of https://github.com/aravinsiva…
aravinsiva Aug 18, 2020
ec96f5c
linting
aravinsiva Aug 18, 2020
35afadf
Merge branch 'master' into opentelemetry-tracing
aravinsiva Aug 18, 2020
5a32ad4
adding Shawn's suggested changes
aravinsiva Aug 19, 2020
1d7155c
Merge branch 'opentelemetry-tracing' of https://github.com/aravinsiva…
aravinsiva Aug 19, 2020
54c133a
fixing _default_span_attribute_bug
aravinsiva Aug 19, 2020
3aff14d
reverting uneccesxsary changes
aravinsiva Aug 19, 2020
59477ff
adding more tests for all job_ref parameters
aravinsiva Aug 19, 2020
0d15998
removing dependecny, ordering imports and other changes
aravinsiva Aug 20, 2020
d997175
addressing Shawn concerns
aravinsiva Aug 20, 2020
61b5b85
adding test and suggested changes
aravinsiva Aug 20, 2020
4d1dec1
adding opentelemetry to setup.py and other suggested changes
aravinsiva Aug 20, 2020
7704975
adding reasoning for not adding to [all]
aravinsiva Aug 20, 2020
839cd92
linting
aravinsiva Aug 20, 2020
55c322e
adding nested functions
aravinsiva Aug 21, 2020
4f66ffb
adding test
aravinsiva Aug 21, 2020
dd1e246
adding Tim suggested changes
aravinsiva Aug 21, 2020
5b3a202
adding full tests
aravinsiva Aug 22, 2020
9757812
Merge branch 'opentelemetry-tracing' of https://github.com/aravinsiva…
aravinsiva Aug 22, 2020
b0ac6eb
Merge pull request #1 from aravinsiva/adding_telemetry_to_non_api_calls
aravinsiva Aug 22, 2020
c75f827
Merge branch 'opentelemetry-tracing' of https://github.com/aravinsiva…
aravinsiva Aug 22, 2020
745775e
Merge branch 'master' of https://github.com/aravinsiva/python-bigquer…
aravinsiva Aug 24, 2020
9e087ff
linting and fixing missing test
aravinsiva Aug 24, 2020
d858ef5
Merge branch 'master' into adding_telemetry_to_non_api_calls
aravinsiva Aug 24, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
instrumenting job.py and adding documentation
  • Loading branch information
aravinsiva committed Aug 4, 2020
commit 63e9581f90ef33f946cb2938643379ad5770d0ff
48 changes: 48 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,51 @@ Perform a query

for row in rows:
print(row.name)

Instrumenting With OpenTelemetry
--------------------------------

This application uses OpenTelmetry to output tracing data from
api calls to BigQuery. To enable OpenTelemetry tracing in
the BigQuery client the following PyPi packages need to be installed:

.. code-block:: console

pip install opentelemetry-api

.. code-block:: console

pip install opentelemetry-sdk

.. code-block:: console

pip install opentelemetry-instrumentaion

.. code-block:: console

pip install opentelemetry-exporter-cloud_trace

After installation, OpenTelemetry can now be used in the BigQuery
client and in BigQuery jobs. First however an exporter must be
specified for where the trace data will be outputted to. An example of this
can be found here:

.. code-block:: python

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
SimpleExportSpanProcessor(CloudTraceSpanExporter())
)

In this example all tracing data will be published to the Google
Cloud trace console. For more information on OpenTelemetry, please consult the `OpenTelemetry documentation`_.

.. _OpenTelemetry documentation: https://opentelemetry-python.readthedocs.io




67 changes: 42 additions & 25 deletions google/cloud/bigquery/job.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@
from google.cloud.bigquery.table import TableReference
from google.cloud.bigquery.table import Table
from google.cloud.bigquery.table import TimePartitioning
from opentelemetry_tracing import SpanCreator


_DONE_STATE = "DONE"
_STOPPED_REASON = "stopped"
Expand Down Expand Up @@ -634,9 +636,12 @@ def _begin(self, client=None, retry=DEFAULT_RETRY, timeout=None):

# jobs.insert is idempotent because we ensure that every new
# job has an ID.
api_response = client._call_api(
retry, method="POST", path=path, data=self.to_api_repr(), timeout=timeout
)
attributes = {'path': path}
span_creator = SpanCreator()
with span_creator.create('BigQuery.job.begin', attributes):
api_response = client._call_api(
retry, method="POST", path=path, data=self.to_api_repr(), timeout=timeout
)
self._set_properties(api_response)

def exists(self, client=None, retry=DEFAULT_RETRY, timeout=None):
Expand Down Expand Up @@ -665,13 +670,17 @@ def exists(self, client=None, retry=DEFAULT_RETRY, timeout=None):
extra_params["location"] = self.location

try:
client._call_api(
retry,
method="GET",
path=self.path,
query_params=extra_params,
timeout=timeout,
)
span_creator = SpanCreator()
attributes = extra_params
attributes['path'] = self.path
with span_creator.create('BigQuery.job.exists', attributes):
client._call_api(
retry,
method="GET",
path=self.path,
query_params=extra_params,
timeout=timeout,
)
except NotFound:
return False
else:
Expand All @@ -698,14 +707,17 @@ def reload(self, client=None, retry=DEFAULT_RETRY, timeout=None):
extra_params = {}
if self.location:
extra_params["location"] = self.location

api_response = client._call_api(
retry,
method="GET",
path=self.path,
query_params=extra_params,
timeout=timeout,
)
span_creator = SpanCreator()
attributes = extra_params
attributes['path'] = self.path
with span_creator.create('BigQuery.job.reload', attributes):
api_response = client._call_api(
retry,
method="GET",
path=self.path,
query_params=extra_params,
timeout=timeout,
)
self._set_properties(api_response)

def cancel(self, client=None, retry=DEFAULT_RETRY, timeout=None):
Expand All @@ -732,13 +744,18 @@ def cancel(self, client=None, retry=DEFAULT_RETRY, timeout=None):
if self.location:
extra_params["location"] = self.location

api_response = client._call_api(
retry,
method="POST",
path="{}/cancel".format(self.path),
query_params=extra_params,
timeout=timeout,
)
path = "{}/cancel".format(self.path)
span_creator = SpanCreator()
attributes = extra_params
attributes['path'] = path
with span_creator.create('BigQuery.job.cancel', attributes):
api_response = client._call_api(
retry,
method="POST",
path=path,
query_params=extra_params,
timeout=timeout,
)
self._set_properties(api_response["job"])
# The Future interface requires that we return True if the *attempt*
# to cancel was successful.
Expand Down