class Buildkite::Trace::JobFinishedEvent

Value object that wraps raw buildkite webhook data and provides convenience methods for querying it

Public Class Methods

new(data) click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 10
def initialize(data)
  @data = data
end

Public Instance Methods

agent_hostname() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 52
def agent_hostname
  @data.fetch("job", {}).fetch("agent",{}).fetch("hostname","")
end
agent_name() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 48
def agent_name
  @data.fetch("job", {}).fetch("agent",{}).fetch("name","")
end
build_branch() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 60
def build_branch
  @data.fetch("build", {}).fetch("branch","")
end
build_id() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 56
def build_id
  @data.fetch("build", {}).fetch("id","")
end
job_finished_at() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 43
def job_finished_at
  value = @data.fetch("job", {}).fetch("finished_at", nil)
  value ? DateTime.parse(value).to_time : nil
end
job_id() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 18
def job_id
  @data.fetch("job", {}).fetch("id","")
end
job_name() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 22
def job_name
  @data.fetch("job", {}).fetch("name","")
end
job_slug() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 26
def job_slug
  slugorize(job_name)
end
job_started_at() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 38
def job_started_at
  value = @data.fetch("job", {}).fetch("started_at", nil)
  value ? DateTime.parse(value).to_time : nil
end
job_state() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 30
def job_state
  @data.fetch("job", {}).fetch("state","")
end
job_web_url() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 34
def job_web_url
  @data.fetch("job", {}).fetch("web_url","")
end
name() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 14
def name
  @data.fetch("event", "")
end
pipeline_name() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 64
def pipeline_name
  @data.fetch("pipeline", {}).fetch("name", "")
end
pipeline_slug() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 68
def pipeline_slug
  @data.fetch("pipeline", {}).fetch("slug", "")
end
to_span() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 72
def to_span
  Span.new(
    trace_id: Digest::CRC64.checksum(build_id),
    span_id: Digest::CRC64.checksum(job_id),
    parent_id: Digest::CRC64.checksum(build_id) + 1,
    name: "build.job",
    resource: job_name,
    service: "buildkite",
    type: "custom",
    start: job_started_at.to_i * 1_000_000_000,
    duration: duration_in_secs * 1_000_000_000,
    metrics: {_sampling_priority_v1: 2},
    meta: {url: job_web_url, pipeline: pipeline_slug},
  )
end

Private Instance Methods

duration_in_secs() click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 90
def duration_in_secs
  job_finished_at.to_i - job_started_at.to_i
end
slugorize(input) click to toggle source
# File lib/buildkite/trace/job_finished_event.rb, line 94
def slugorize(input)
  result = input.to_s.downcase
  result.gsub!(/['|’]/, '')           # Remove apostrophes
  result.gsub!('&', 'and')            # Replace & with 'and'
  result.gsub!(/[^a-z0-9\-]/, '-')    # Get rid of anything we don't like
  result.gsub!(/-+/, '-')             # collapse dashes
  result.gsub!(/-$/, '')              # trim dashes
  result.gsub!(/^-/, '')              # trim dashes
  result
end