sensu-plugins-edgelab 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/check-nomad-jobs.rb +41 -9
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eed99dc209e0eb7a588c6b73d5f99e285c1e1825
4
- data.tar.gz: b246d4c581b0e6a2c3d0fbb4145170617433940f
3
+ metadata.gz: ea0c07087191700425e9030541a612e62b7bce0c
4
+ data.tar.gz: 8f26d3185e70df103814a71d80bfeb0a0f345aed
5
5
  SHA512:
6
- metadata.gz: 5494b1d94ae2f340c798fcd6bbadc132dbc1a11417504f614af89615d9f1fca866ac87e87930b75f30bbe0991348f17ecb5383bd198c5fb9d93d61cc545a594a
7
- data.tar.gz: a67e3152c3f83f2c30091086b6ffef6d74a29a07b8b99e69bcd3da205f027db1497dc9c3b83a52ce0abc1aeae3ba68565534ca2bc73b4b99ba5bf7b122388d0d
6
+ metadata.gz: d785ffe04f0a3d3fe258c70f565e6c70dc2dec837bbd3fcf15eeaa22dd35cfd43cab1f5c3aafd6d923acc9e6bb7bac271f8267b706e95456423f93f5d10805d4
7
+ data.tar.gz: ebab2d70d72dae8eb52960e5f0d92218b21568458ab3f9727cbe55e46176daa8ec9ba659809e26022a6fc617f9abc4b9bfc148d482c62ab586e6f025ef92cdda
@@ -17,10 +17,14 @@ class CheckNomadAllocations < Sensu::Plugin::Check::CLI
17
17
  description: 'nomad server address',
18
18
  long: '--nomad SERVER',
19
19
  default: 'http://localhost:4646'
20
+ option :alloc_starting_time,
21
+ description: '',
22
+ long: '--alloc-starting-time',
23
+ default: 300
20
24
 
21
- # Return, as array of hash, all registered jobs in Nomad
22
- def nomad_jobs
23
- url = config[:nomad] + '/v1/jobs'
25
+ # Call Nomad api and parse the json response
26
+ def api_call(endpoint)
27
+ url = config[:nomad] + endpoint
24
28
  begin
25
29
  response = RestClient.get(url)
26
30
  rescue => e
@@ -34,8 +38,40 @@ class CheckNomadAllocations < Sensu::Plugin::Check::CLI
34
38
  end
35
39
  end
36
40
 
41
+ # Check that allocations are in the desired status
42
+ def check_allocations(job, failed)
43
+ allocations = api_call "/v1/job/#{job['ID']}/allocations"
44
+
45
+ allocations.each do |alloc|
46
+ if alloc['DesiredStatus'] == 'run'
47
+ # Batch stay in run DesiredStatus even if task completed successfully.
48
+ next if job['Type'] == 'batch' and alloc['ClientStatus'] == 'complete'
49
+
50
+ alloc['TaskStates'].each do |_, state|
51
+ if state['State'] == 'dead'
52
+ failed << "Alloc #{alloc['Name']} is dead but desired status is 'run'"
53
+
54
+ # Check that pending alloc are not too old
55
+ elsif state['State'] == 'pending'
56
+ # Get the last event timestamp (which is in microseconds in Nomad)
57
+ event_time = state['Events'][-1]['Time'] / 1_000_000_000
58
+ starting_time = (Time.new - Time.at(event_time)).round
59
+
60
+ if starting_time > config[:alloc_starting_time]
61
+ failed << "Alloc #{alloc['Name']} is pending since #{starting_time} seconds"
62
+
63
+ # No need to check other task in the same task group.
64
+ break
65
+ end
66
+
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+
37
73
  def run
38
- jobs = nomad_jobs
74
+ jobs = api_call '/v1/jobs'
39
75
  if jobs.empty?
40
76
  critical 'No jobs found in Nomad.'
41
77
  end
@@ -43,11 +79,7 @@ class CheckNomadAllocations < Sensu::Plugin::Check::CLI
43
79
  failed = []
44
80
 
45
81
  jobs.each do |job|
46
- job['JobSummary']['Summary'].each do |group, summary|
47
- if summary['Failed'] != 0
48
- failed << "#{job['Name']}.#{group}"
49
- end
50
- end
82
+ check_allocations job, failed
51
83
  end
52
84
 
53
85
  if failed.any?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-edgelab
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgelab
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-12 00:00:00.000000000 Z
11
+ date: 2017-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin