diff options
-rw-r--r-- | zuul/driver/zuul/__init__.py | 43 | ||||
-rw-r--r-- | zuul/manager/__init__.py | 8 |
2 files changed, 35 insertions, 16 deletions
diff --git a/zuul/driver/zuul/__init__.py b/zuul/driver/zuul/__init__.py index 9a9c45da9..6dd6ff1b9 100644 --- a/zuul/driver/zuul/__init__.py +++ b/zuul/driver/zuul/__init__.py @@ -16,6 +16,8 @@ import logging import time from uuid import uuid4 +from opentelemetry import trace + from zuul.driver import Driver, TriggerInterface from zuul.driver.zuul.zuulmodel import ZuulTriggerEvent from zuul.driver.zuul import zuulmodel @@ -29,6 +31,7 @@ PROJECT_CHANGE_MERGED = 'project-change-merged' class ZuulDriver(Driver, TriggerInterface): name = 'zuul' log = logging.getLogger("zuul.ZuulTrigger") + tracer = trace.get_tracer("zuul") def __init__(self): self.parent_change_enqueued_events = {} @@ -54,12 +57,19 @@ class ZuulDriver(Driver, TriggerInterface): def onChangeMerged(self, tenant, change, source): # Called each time zuul merges a change if self.project_change_merged_events.get(tenant.name): - try: - self._createProjectChangeMergedEvents(change, source) - except Exception: - self.log.exception( - "Unable to create project-change-merged events for " - "%s" % (change,)) + span = trace.get_current_span() + link_attributes = {"rel": "ChangeMerged"} + link = trace.Link(span.get_span_context(), + attributes=link_attributes) + attributes = {"event_type": PROJECT_CHANGE_MERGED} + with self.tracer.start_as_current_span( + "ZuulEvent", links=[link], attributes=attributes): + try: + self._createProjectChangeMergedEvents(change, source) + except Exception: + self.log.exception( + "Unable to create project-change-merged events for " + "%s" % (change,)) def onChangeEnqueued(self, tenant, change, pipeline, event): log = get_annotated_logger(self.log, event) @@ -69,13 +79,20 @@ class ZuulDriver(Driver, TriggerInterface): (tenant.name, pipeline.name)) log.debug("onChangeEnqueued %s", tenant_events) if tenant_events: - try: - self._createParentChangeEnqueuedEvents( - change, pipeline, tenant, event) - except Exception: - log.exception( - "Unable to create parent-change-enqueued events for " - "%s in %s" % (change, pipeline)) + span = trace.get_current_span() + link_attributes = {"rel": "ChangeEnqueued"} + link = trace.Link(span.get_span_context(), + attributes=link_attributes) + attributes = {"event_type": PARENT_CHANGE_ENQUEUED} + with self.tracer.start_as_current_span( + "ZuulEvent", links=[link], attributes=attributes): + try: + self._createParentChangeEnqueuedEvents( + change, pipeline, tenant, event) + except Exception: + log.exception( + "Unable to create parent-change-enqueued events for " + "%s in %s" % (change, pipeline)) def _createProjectChangeMergedEvents(self, change, source): changes = source.getProjectOpenChanges( diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py index aad112af8..d70b12885 100644 --- a/zuul/manager/__init__.py +++ b/zuul/manager/__init__.py @@ -623,8 +623,9 @@ class PipelineManager(metaclass=ABCMeta): zuul_driver = self.sched.connections.drivers['zuul'] tenant = self.pipeline.tenant - zuul_driver.onChangeEnqueued( - tenant, item.change, self.pipeline, event) + with trace.use_span(tracing.restoreSpan(item.span_info)): + zuul_driver.onChangeEnqueued( + tenant, item.change, self.pipeline, event) self.dequeueSupercededItems(item) return True @@ -2036,7 +2037,8 @@ class PipelineManager(metaclass=ABCMeta): zuul_driver = self.sched.connections.drivers['zuul'] tenant = self.pipeline.tenant - zuul_driver.onChangeMerged(tenant, item.change, source) + with trace.use_span(tracing.restoreSpan(item.span_info)): + zuul_driver.onChangeMerged(tenant, item.change, source) elif action: self.reportNormalBuildsetEnd(item.current_build_set, action, final=True) |