sensu-plugins-jenkins 1.6.2 → 1.7.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0835b69c82a04c134a91160cd8752da9f1231e7f65f170bc50373b96529f2c48
4
- data.tar.gz: 94842b12df98c6db6c57897de68669b35b98512caa44900133bb75694919d8cd
3
+ metadata.gz: 75c39b7e5b5565b722528e10fb11058718cc4a3269c6ed5681addfb89407b9cb
4
+ data.tar.gz: b3d3ca9c8db98a107638ece7e80ac90619cca58dfe892a403f5c672aa83f4f7e
5
5
  SHA512:
6
- metadata.gz: 8dd866668e513e35777ea75e37fb37e437431f4699e6ad4685b0dce8e486191c8c33ae2c9519705e5a05ecd33fe4b8aaeaea175922df9909ef3297bb2bb9d621
7
- data.tar.gz: 7e72e30f86c9317a19895fdd4131c61388da4d1054d19a2f5c104eae3ac659fd0ee65c4cf24f6ca00ee569ebf0708cd67be6bdd14fa819b841a16c8faf87c1f9
6
+ metadata.gz: b78f035d9c4665fd24d04396f4747648de3391ff65311e61c85260a798f538676975f51eac261fe0e85c5a2b58f547695355d7c4602efddf0bf80848ab69e7eb
7
+ data.tar.gz: 0372069eeb99cdc1d30098c4b6d0be30880acd803fa75fd1e008d912e12fe152904793e9b8bdf9b168395a11d3240454440ef878ee7df662556cb8a04fa1c62d
data/CHANGELOG.md CHANGED
@@ -6,6 +6,11 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.7.0] - 2018-05-14
10
+ ### Added
11
+ - check-jenkins-build-time.rb: add `--check-build-duration` mode to check duration (@CoRfr)
12
+ - check-jenkins.rb: add `--timeout` option to specify timeout instead of the hardcoded 5s (@CoRfr)
13
+
9
14
  ## [1.6.2] - 2018-03-01
10
15
  ### Fixed
11
16
  - check-jenkins-health.rb: fixed bug introduced by #25 (@majormoses)
@@ -95,7 +100,8 @@ Which is based on [Keep A Changelog](http://keepachangelog.com/)
95
100
  ### Added
96
101
  - initial release
97
102
 
98
- [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-jenkins/compare/1.6.2...HEAD
103
+ [Unreleased]: https://github.com/sensu-plugins/sensu-plugins-jenkins/compare/1.7.0...HEAD
104
+ [1.7.0]: https://github.com/sensu-plugins/sensu-plugins-jenkins/compare/1.6.2...1.7.0
99
105
  [1.6.2]: https://github.com/sensu-plugins/sensu-plugins-jenkins/compare/1.6.1...1.6.2
100
106
  [1.6.1]: https://github.com/sensu-plugins/sensu-plugins-jenkins/compare/1.6.0...1.6.1
101
107
  [1.6.0]: https://github.com/sensu-plugins/sensu-plugins-jenkins/compare/1.5.0...1.6.0
@@ -4,7 +4,9 @@
4
4
  #
5
5
  # DESCRIPTION:
6
6
  # Alert if the last successful build timestamp of a jenkins job is older than
7
- # a specified time duration OR not within a specific daily time window.
7
+ # a specified time duration
8
+ # OR not within a specific daily time window
9
+ # OR if the total build duration exceeds a specified duration.
8
10
  #
9
11
  # OUTPUT:
10
12
  # plain text
@@ -19,6 +21,8 @@
19
21
  # where TIME_EXPRESSION is either a relative time duration from now (30m, 1h) or
20
22
  # a daily time window (1am-2am, 1:01am-2:01am), without spaces.
21
23
  #
24
+ # --check-build-duration to check the last build duration for a job.
25
+ #
22
26
  # DEPENDENCIES:
23
27
  # gem: sensu-plugin
24
28
  # jenkins_api_client
@@ -50,6 +54,11 @@ class JenkinsBuildTime < Sensu::Plugin::Check::CLI
50
54
  long: '--jobs JOB_NAME=TIME_EXPRESSION,[JOB_NAME=TIME_EXPRESSION]',
51
55
  required: true
52
56
 
57
+ option :check_build_duration,
58
+ description: 'Mode to check the build duration instead of the last occurence of a build',
59
+ short: '-d',
60
+ long: '--[no-]check-build-duration'
61
+
53
62
  option :username,
54
63
  description: 'Username for Jenkins instance',
55
64
  short: '-U USERNAME',
@@ -68,24 +77,32 @@ class JenkinsBuildTime < Sensu::Plugin::Check::CLI
68
77
  critical_jobs = []
69
78
 
70
79
  jobs = parse_jobs_param
80
+ check_build_duration = config[:check_build_duration] || false
71
81
 
72
82
  jobs.each do |job_name, time_expression|
73
83
  begin
74
- last_build_time = build_time(job_name, last_successful_build_number(job_name))
84
+ build_number = last_successful_build_number(job_name)
85
+ last_build_time = build_time(job_name, build_number)
86
+ last_build_duration = build_duration(job_name, build_number)
75
87
  rescue
76
88
  critical "Error looking up Jenkins job: #{job_name}"
77
89
  end
78
90
 
79
- if time_expression_is_window?(time_expression)
91
+ if check_build_duration
92
+ unless time_within_allowed_build_duration?(last_build_duration,
93
+ parse_duration_seconds(time_expression))
94
+ critical_jobs << critical_message_build_duration(job_name, last_build_time, last_build_duration, time_expression)
95
+ end
96
+ elsif time_expression_is_window?(time_expression)
80
97
  unless time_within_window?(last_build_time,
81
98
  parse_window_start(time_expression),
82
99
  parse_window_end(time_expression))
83
- critical_jobs << critical_message(job_name, last_build_time, time_expression)
100
+ critical_jobs << critical_message(job_name, last_build_time, last_build_duration, time_expression)
84
101
  end
85
102
  else
86
103
  unless time_within_allowed_duration?(last_build_time,
87
104
  parse_duration_seconds(time_expression))
88
- critical_jobs << critical_message(job_name, last_build_time, time_expression)
105
+ critical_jobs << critical_message(job_name, last_build_time, last_build_duration, time_expression)
89
106
  end
90
107
  end
91
108
  end
@@ -104,9 +121,21 @@ class JenkinsBuildTime < Sensu::Plugin::Check::CLI
104
121
  jenkins.job.list_details(job_name)['lastSuccessfulBuild']['number']
105
122
  end
106
123
 
124
+ def build_details(job_name, build_number)
125
+ # Cache the results
126
+ @build_details ||= {}
127
+ @build_details[job_name] ||= {}
128
+ @build_details[job_name][build_number] ||= jenkins.job.get_build_details(job_name, build_number)
129
+ end
130
+
107
131
  def build_time(job_name, build_number)
108
132
  # Jenkins expresses timestamps in epoch millis
109
- Time.at(jenkins.job.get_build_details(job_name, build_number)['timestamp'] / 1000)
133
+ Time.at(build_details(job_name, build_number)['timestamp'] / 1000)
134
+ end
135
+
136
+ def build_duration(job_name, build_number)
137
+ # Jenkins expresses timestamps in epoch millis, convert it to seconds
138
+ build_details(job_name, build_number)['duration'] / 1000
110
139
  end
111
140
 
112
141
  def time_expression_is_window?(time_expression)
@@ -148,8 +177,16 @@ class JenkinsBuildTime < Sensu::Plugin::Check::CLI
148
177
  time > (@now - duration_seconds)
149
178
  end
150
179
 
151
- def critical_message(job_name, last_build_time, time_expression)
152
- "#{job_name}: last built at #{last_build_time}, not within allowed time: #{time_expression}"
180
+ def time_within_allowed_build_duration?(build_duration_seconds, duration_seconds)
181
+ build_duration_seconds <= duration_seconds
182
+ end
183
+
184
+ def critical_message_build_duration(job_name, last_build_time, duration_seconds, time_expression)
185
+ "#{job_name}: last built at #{last_build_time} (#{ChronicDuration.output(duration_seconds)}) exceeded max duration (#{time_expression})"
186
+ end
187
+
188
+ def critical_message(job_name, last_build_time, duration_seconds, time_expression)
189
+ "#{job_name}: last built at #{last_build_time} (#{ChronicDuration.output(duration_seconds)}), not within allowed time: #{time_expression}"
153
190
  end
154
191
 
155
192
  def parse_jobs_param
data/bin/check-jenkins.rb CHANGED
@@ -65,16 +65,23 @@ class JenkinsMetricsPingPongChecker < Sensu::Plugin::Check::CLI
65
65
  description: 'Perform "insecure" SSL connections and transfers.',
66
66
  default: false
67
67
 
68
+ option :timeout,
69
+ short: '-t SECONDS',
70
+ long: '--timeout SECONDS',
71
+ description: 'Timeout for REST request',
72
+ proc: proc(&:to_i),
73
+ default: 5
74
+
68
75
  def run
69
76
  https ||= config[:https] ? 'https' : 'http'
70
77
  testurl = "#{https}://#{config[:server]}:#{config[:port]}#{config[:uri]}"
71
78
 
72
79
  r = if config[:https] && config[:insecure]
73
- RestClient::Resource.new(testurl, timeout: 5, verify_ssl: false).get
80
+ RestClient::Resource.new(testurl, timeout: config[:timeout], verify_ssl: false).get
74
81
  elsif config[:https]
75
- RestClient::Resource.new(testurl, timeout: 5, verify_ssl: true).get
82
+ RestClient::Resource.new(testurl, timeout: config[:timeout], verify_ssl: true).get
76
83
  else
77
- RestClient::Resource.new(testurl, timeout: 5).get
84
+ RestClient::Resource.new(testurl, timeout: config[:timeout]).get
78
85
  end
79
86
 
80
87
  if r.code == 200 && r.body.include?('pong')
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsJenkins
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 6
5
- PATCH = 2
4
+ MINOR = 7
5
+ PATCH = 0
6
6
 
7
7
  VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-plugins-jenkins
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sensu-Plugins and contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-02 00:00:00.000000000 Z
11
+ date: 2018-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin