summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Westphahl <simon.westphahl@bmw.de>2022-09-26 14:06:09 +0200
committerSimon Westphahl <simon.westphahl@bmw.de>2022-09-30 11:19:31 +0200
commit3db58dbe33f09971c174cc04c0a1338e26b001d0 (patch)
treedf10f2eaad9eae9e38ef9625978ac6a7256ff2be
parentc63e4f6729a26085b68d996973e7edf1ae95044f (diff)
downloadzuul-3db58dbe33f09971c174cc04c0a1338e26b001d0.tar.gz
Trace Zuul trigger events
Start a span when creating Zuul trigger events when a change is merged or enqueued. The span will be linked to the span of the queue item that was enqueued or merged. Change-Id: I3870ef2755136a9e8684494da69aefc5f426728e
-rw-r--r--zuul/driver/zuul/__init__.py43
-rw-r--r--zuul/manager/__init__.py8
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 d98b871be..0af0df976 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)