sensu-run-check 0.1.0 → 0.2.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
  SHA1:
3
- metadata.gz: 4c955968a850e224f8c594fa95232dbce3753c7a
4
- data.tar.gz: 6edb3a30525201462fccde5ead01242d8fc9bacd
3
+ metadata.gz: 124fa69d27a4dc7394117818fc7ae64f01a349f4
4
+ data.tar.gz: c8c8073b37ca4ccce499be14337a9dab581232f7
5
5
  SHA512:
6
- metadata.gz: 830cb80b44157a7212ff4b10ac928a0f7169fc52f82bc9bf57450c871758a14dc03ff0b655c2d02336e0b8f50dde568c89a50e2a1d35e92fa13b37666e3e06d7
7
- data.tar.gz: ea68e6f66aaf102e246197aebb41dbfc62c3da8db7e19aa6452ac8ed9433ecb2602c4aad8654f23d17af2ddca526b596d2d75d22f3d869aaf51be7f9cef3ea56
6
+ metadata.gz: 46b7d5a9c7cd60eae203612e285364b47eaa0f0d06951f5ce8b8bdb4a5cf97a0d18415865a8b64749529aec958e6def984586397b3a93981dcae0cfddadd13ca
7
+ data.tar.gz: 6b679510da951ea62c99d9036ed409f6f29b36f0295385c43c51e77f6d2c1a7665d2f1b5cb69c449c1be1499ce78bcab55fc081fa6ba91a40a9cb0ba2f9a5620
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Sensu Run Check
2
2
 
3
- Often after just doing a change on servers you want to just be sure that they’re all going to pass a certain or all Sensu checks. This gem exposes Sensus checks to be executed local on the command line.
3
+ Often after just doing a change on servers you want to just be sure that they’re all going to pass a certain or all (Sensu)[http://sensuapp.org] checks. This gem exposes Sensu checks to be executed local on the command line.
4
4
 
5
5
  _WARNING_ This is very much a hack and will break with other versions* of Sensu!
6
6
 
@@ -44,4 +44,4 @@ Run all checks defined on this host.
44
44
 
45
45
  (c) 2015 - Rickard von Essen
46
46
 
47
- Released under the MIT license, see LICENSE.txt
47
+ Released under the MIT license, see LICENSE.txt
@@ -1,5 +1,6 @@
1
1
  require "rubygems"
2
2
 
3
+ require "open3"
3
4
  require "sensu-run-check/version"
4
5
  require "sensu/client/process"
5
6
  require "sensu/settings"
@@ -34,6 +35,7 @@ module SensuRunCheck
34
35
  statuses = []
35
36
  s.get_all_checks.collect{ |check| check[:name] }.sort.each do |checkname|
36
37
  stdout, status = s.run_check(checkname)
38
+ status ||= 3
37
39
  statuses << status
38
40
  puts "#{checkname} #{status} #{stdout}"
39
41
  end
@@ -41,6 +43,7 @@ module SensuRunCheck
41
43
  else
42
44
  stdout, status = s.run_check(options[:run_check])
43
45
  puts stdout
46
+ status ||= 3
44
47
  exit(status)
45
48
  end
46
49
  end
@@ -57,6 +60,47 @@ module SensuRunCheck
57
60
  @logger = SensuRunCheck::NilLog.new
58
61
  end
59
62
 
63
+ # Execute a check command, capturing its output (STDOUT/ERR),
64
+ # exit status code, execution duration, timestamp, and publish
65
+ # the result. This method guards against multiple executions for
66
+ # the same check. Check command tokens are substituted with the
67
+ # associated client attribute values. If there are unmatched
68
+ # check command tokens, the check command will not be executed,
69
+ # instead a check result will be published reporting the
70
+ # unmatched tokens.
71
+ #
72
+ # @param check [Hash]
73
+ def execute_check_command(check)
74
+ @logger.debug("attempting to execute check command", :check => check)
75
+ unless @checks_in_progress.include?(check[:name])
76
+ @checks_in_progress << check[:name]
77
+ command, unmatched_tokens = substitute_check_command_tokens(check)
78
+ if unmatched_tokens.empty?
79
+ check[:executed] = Time.now.to_i
80
+ started = Time.now.to_f
81
+
82
+ output, status = Open3.capture2(command)
83
+ check[:duration] = ("%.3f" % (Time.now.to_f - started)).to_f
84
+ check[:output] = output
85
+ check[:status] = status.exitstatus
86
+ @checks_in_progress.delete(check[:name])
87
+ publish_check_result(check)
88
+ else
89
+ check[:output] = "Unmatched command tokens: " + unmatched_tokens.join(", ")
90
+ check[:status] = 3
91
+ check[:handle] = false
92
+ @checks_in_progress.delete(check[:name])
93
+ publish_check_result(check)
94
+ end
95
+ else
96
+ @logger.warn("previous check command execution in progress", :check => check)
97
+ end
98
+ end
99
+
100
+ def publish_check_result(check)
101
+ return check[:output], check[:status]
102
+ end
103
+
60
104
  # Find a Sensu check by name.
61
105
  #
62
106
  # @param [String] name of the check
@@ -84,16 +128,20 @@ module SensuRunCheck
84
128
  execute_check_command(check)
85
129
  end
86
130
  end
87
-
88
131
  end
89
132
 
90
133
  # Swallow logs
91
134
  class NilLog
92
- def debug(*ignore)
93
- # Ignore
135
+ def initialize
136
+ self.class.create_level_methods
94
137
  end
95
- def warn(*ignore)
96
- # Ignore
138
+
139
+ def self.create_level_methods
140
+ Sensu::Logger::LEVELS.each do |level|
141
+ define_method(level) do |*args|
142
+ # Do nothing
143
+ end
144
+ end
97
145
  end
98
146
  end
99
147
  end
@@ -1,3 +1,3 @@
1
1
  module SensuRunCheck
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensu-run-check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rickard von Essen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-15 00:00:00.000000000 Z
11
+ date: 2015-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu