Class: CI::Queue::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/ci/queue/configuration.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(timeout: 30, build_id: nil, worker_id: nil, max_requeues: 0, requeue_tolerance: 0, namespace: nil, seed: nil, flaky_tests: [], statsd_endpoint: nil, max_consecutive_failures: nil, grind_count: nil, max_duration: nil, failure_file: nil, max_test_duration: nil, max_test_duration_percentile: 0.5, track_test_duration: false, max_test_failed: nil) ⇒ Configuration

Returns a new instance of Configuration.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/ci/queue/configuration.rb', line 31

def initialize(
  timeout: 30, build_id: nil, worker_id: nil, max_requeues: 0, requeue_tolerance: 0,
  namespace: nil, seed: nil, flaky_tests: [], statsd_endpoint: nil, max_consecutive_failures: nil,
  grind_count: nil, max_duration: nil, failure_file: nil, max_test_duration: nil,
  max_test_duration_percentile: 0.5, track_test_duration: false, max_test_failed: nil
)
  @build_id = build_id
  @circuit_breakers = [CircuitBreaker::Disabled]
  @failure_file = failure_file
  @flaky_tests = flaky_tests
  @grind_count = grind_count
  @max_requeues = max_requeues
  @max_test_duration = max_test_duration
  @max_test_duration_percentile = max_test_duration_percentile
  @max_test_failed = max_test_failed
  @namespace = namespace
  @requeue_tolerance = requeue_tolerance
  @seed = seed
  @statsd_endpoint = statsd_endpoint
  @timeout = timeout
  @track_test_duration = track_test_duration
  @worker_id = worker_id
  self.max_consecutive_failures = max_consecutive_failures
  self.max_duration = max_duration
end

Instance Attribute Details

#build_idObject



77
78
79
80
81
82
83
# File 'lib/ci/queue/configuration.rb', line 77

def build_id
  if namespace
    "#{namespace}:#{@build_id}"
  else
    @build_id
  end
end

#circuit_breakersObject (readonly)

Returns the value of attribute circuit_breakers.



9
10
11
# File 'lib/ci/queue/configuration.rb', line 9

def circuit_breakers
  @circuit_breakers
end

#failing_testObject

Returns the value of attribute failing_test.



6
7
8
# File 'lib/ci/queue/configuration.rb', line 6

def failing_test
  @failing_test
end

#failure_fileObject

Returns the value of attribute failure_file.



5
6
7
# File 'lib/ci/queue/configuration.rb', line 5

def failure_file
  @failure_file
end

#grind_countObject

Returns the value of attribute grind_count.



5
6
7
# File 'lib/ci/queue/configuration.rb', line 5

def grind_count
  @grind_count
end

#max_requeuesObject

Returns the value of attribute max_requeues.



5
6
7
# File 'lib/ci/queue/configuration.rb', line 5

def max_requeues
  @max_requeues
end

#max_test_durationObject

Returns the value of attribute max_test_duration.



7
8
9
# File 'lib/ci/queue/configuration.rb', line 7

def max_test_duration
  @max_test_duration
end

#max_test_duration_percentileObject

Returns the value of attribute max_test_duration_percentile.



7
8
9
# File 'lib/ci/queue/configuration.rb', line 7

def max_test_duration_percentile
  @max_test_duration_percentile
end

#max_test_failedObject

Returns the value of attribute max_test_failed.



8
9
10
# File 'lib/ci/queue/configuration.rb', line 8

def max_test_failed
  @max_test_failed
end

#namespaceObject

Returns the value of attribute namespace.



6
7
8
# File 'lib/ci/queue/configuration.rb', line 6

def namespace
  @namespace
end

#requeue_toleranceObject

Returns the value of attribute requeue_tolerance.



6
7
8
# File 'lib/ci/queue/configuration.rb', line 6

def requeue_tolerance
  @requeue_tolerance
end

#seedObject



73
74
75
# File 'lib/ci/queue/configuration.rb', line 73

def seed
  @seed || build_id
end

#statsd_endpointObject

Returns the value of attribute statsd_endpoint.



6
7
8
# File 'lib/ci/queue/configuration.rb', line 6

def statsd_endpoint
  @statsd_endpoint
end

#timeoutObject

Returns the value of attribute timeout.



5
6
7
# File 'lib/ci/queue/configuration.rb', line 5

def timeout
  @timeout
end

#track_test_durationObject

Returns the value of attribute track_test_duration.



7
8
9
# File 'lib/ci/queue/configuration.rb', line 7

def track_test_duration
  @track_test_duration
end

#worker_idObject

Returns the value of attribute worker_id.



5
6
7
# File 'lib/ci/queue/configuration.rb', line 5

def worker_id
  @worker_id
end

Class Method Details

.from_env(env) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/ci/queue/configuration.rb', line 13

def from_env(env)
  new(
    build_id: env['CIRCLE_BUILD_URL'] || env['BUILDKITE_BUILD_ID'] || env['TRAVIS_BUILD_ID'] || env['HEROKU_TEST_RUN_ID'] || env['SEMAPHORE_PIPELINE_ID'],
    worker_id: env['CIRCLE_NODE_INDEX'] || env['BUILDKITE_PARALLEL_JOB'] || env['CI_NODE_INDEX'] || env['SEMAPHORE_JOB_ID'],
    seed: env['CIRCLE_SHA1'] || env['BUILDKITE_COMMIT'] || env['TRAVIS_COMMIT'] || env['HEROKU_TEST_RUN_COMMIT_VERSION'] || env['SEMAPHORE_GIT_SHA'],
    flaky_tests: load_flaky_tests(env['CI_QUEUE_FLAKY_TESTS']),
    statsd_endpoint: env['CI_QUEUE_STATSD_ADDR'],
  )
end

.load_flaky_tests(path) ⇒ Object



23
24
25
26
27
28
# File 'lib/ci/queue/configuration.rb', line 23

def load_flaky_tests(path)
  return [] unless path
  ::File.readlines(path).map(&:chomp).to_set
rescue SystemCallError
  []
end

Instance Method Details

#flaky?(test) ⇒ Boolean

Returns:



69
70
71
# File 'lib/ci/queue/configuration.rb', line 69

def flaky?(test)
  @flaky_tests.include?(test.id)
end

#global_max_requeues(tests_count) ⇒ Object



85
86
87
# File 'lib/ci/queue/configuration.rb', line 85

def global_max_requeues(tests_count)
  (tests_count * Float(requeue_tolerance)).ceil
end

#max_consecutive_failures=(max) ⇒ Object



57
58
59
60
61
# File 'lib/ci/queue/configuration.rb', line 57

def max_consecutive_failures=(max)
  if max
    @circuit_breakers << CircuitBreaker::MaxConsecutiveFailures.new(max_consecutive_failures: max)
  end
end

#max_duration=(duration) ⇒ Object



63
64
65
66
67
# File 'lib/ci/queue/configuration.rb', line 63

def max_duration=(duration)
  if duration
    @circuit_breakers << CircuitBreaker::Timeout.new(duration: duration)
  end
end