Merge "Trace Zuul trigger events"

This commit is contained in:
Zuul
2022-10-04 10:37:12 +00:00
committed by Gerrit Code Review
2 changed files with 35 additions and 16 deletions

View File

@@ -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(

View File

@@ -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)