sensu-plugins-edgelab 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
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