sensu-plugins-oracle 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d57f08c7f7aea95dc254abc505133c565e0209a
4
- data.tar.gz: c1041f3deaafe38cbdda41398bedf3c7388851cd
3
+ metadata.gz: efab7ed4b1a29b124c150b526b3e6ba79f4da9ae
4
+ data.tar.gz: 199db9fcafb5e3bf3f8369aea3b33f0154063028
5
5
  SHA512:
6
- metadata.gz: de6c9aa214636720c86169949da9ec4c3a48e18a61f6dd9232ad22cd1fd96a060d43614d22b1dd803620b5a890089c60182d3796306e7aff1363ae1760a0ce78
7
- data.tar.gz: 059fd886f9a11e4794da82ba0feffffa454f8e6c66dcc4d5d1e5876746e7b93bc07dad97703ba9b6ca3115a191b244b1e21122ef5f832d08041ca056b0d8b75a
6
+ metadata.gz: 564b180f48f2d26c9e8fec326c55aa09ca1b3581ef49861a76fc7372c2fd858113e3632c76c0e0c0db0ef85c32184525f327a1fb29b1645ef717d843e3ee4124
7
+ data.tar.gz: 36b1a795d59dcddf89fb2593f2a429e2be6a51e904a7269e65c553f1b294c1615e7adadc94bd339dd5ad56ef5aa42555330a66a0253fb4c4a07bb66356f83c99
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 0.5.0 - 2017-07-27
2
+
3
+ Major:
4
+ - Parallel processing with threads and queues, allow to define number of threads
5
+ - Refactored code to remove doublication
6
+ - Verbose output for thread processing
7
+
1
8
  ## 0.4.2 - 2017-07-24
2
9
 
3
10
  Bug Fixes:
data/README.md CHANGED
@@ -22,8 +22,8 @@ This sensu plugin provides native Oracle instrumentation.
22
22
  ```
23
23
 
24
24
  ```
25
- -- check multiple connections as defined in a file
26
- check-oracle-alive.rb -f connections.csv
25
+ -- check multiple connections as defined in a file, use 5 worker threads (-w 5) and verbose output (-v)
26
+ check-oracle-alive.rb -f connections.csv -w 5 -v
27
27
 
28
28
  > cat connections.csv
29
29
  # production connection
@@ -60,6 +60,20 @@ class CheckOracleAlive < Sensu::Plugin::Check::CLI
60
60
  short: '-f FILE',
61
61
  long: '--file FILE'
62
62
 
63
+ option :worker,
64
+ description: 'Number of worker threads to check for alive connections',
65
+ short: '-w WORKER',
66
+ long: '--worker WORKER',
67
+ default: 1,
68
+ :proc => Proc.new { |v| v.to_i == 0 ? 1 : v.to_i }
69
+
70
+ option :verbose,
71
+ description: 'Shows console log messages',
72
+ short: '-v',
73
+ long: '--verbose',
74
+ boolean: true,
75
+ default: false
76
+
63
77
  def run
64
78
  # handle OCI8 properties
65
79
  ::SensuPluginsOracle::Session.set_timeout_properties(config[:timeout])
@@ -73,39 +87,6 @@ class CheckOracleAlive < Sensu::Plugin::Check::CLI
73
87
 
74
88
  private
75
89
 
76
- def handle_connections_from_file
77
- sessions = ::SensuPluginsOracle::Session.parse_from_file(config[:file])
78
-
79
- sessions_total = sessions.size
80
- sessions_alive = 0
81
-
82
- thread_group = ThreadGroup.new
83
- queue = Queue.new
84
- mutex = Mutex.new
85
-
86
- sessions.each do |session|
87
- thread_group.add Thread.new {
88
- if session.alive?
89
- mutex.synchronize do
90
- sessions_alive += 1
91
- end
92
- else
93
- queue << session.error_message
94
- end
95
- }
96
- end
97
- thread_group.list.map(&:join)
98
- sessions_critical = queue.size.times.map { queue.pop }
99
-
100
- if sessions_total == sessions_alive
101
- ok "All are alive (#{sessions_alive}/#{sessions_total})"
102
- else
103
- critical ["#{sessions_alive}/#{sessions_total} are alive", sessions_critical].flatten.join("\n - ")
104
- end
105
- rescue => e
106
- unknown e.to_s
107
- end
108
-
109
90
  def handle_connection
110
91
  session = SensuPluginsOracle::Session.new(
111
92
  username: config[:username],
@@ -119,4 +100,32 @@ class CheckOracleAlive < Sensu::Plugin::Check::CLI
119
100
  critical session.error_message
120
101
  end
121
102
  end
103
+
104
+ def handle_connections_from_file
105
+ sessions = ::SensuPluginsOracle::Session.parse_from_file(config[:file])
106
+ ::SensuPluginsOracle::Session.handle_multiple(
107
+ sessions: sessions,
108
+ method: :alive?,
109
+ config: config
110
+ )
111
+
112
+ errors = []
113
+ sessions.each do |session|
114
+ errors << session.error_message if session.error_message
115
+ end
116
+
117
+ sessions_total = sessions.size
118
+ errors_total = errors.size
119
+
120
+ if errors_total == 0
121
+ ok "All are alive (#{sessions_total}/#{sessions_total})"
122
+ else
123
+ critical ["#{sessions_total - errors_total}/#{sessions_total} are alive", errors].flatten.join("\n - ")
124
+ end
125
+
126
+ rescue => e
127
+ unknown e.to_s
128
+ end
129
+
130
+
122
131
  end
@@ -1,9 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
  #
3
- # check-oracle-alive
3
+ # check-oracle-query
4
4
  #
5
5
  # DESCRIPTION:
6
- # This plugin attempts to login to oracle with provided credentials.
6
+ # This plugin attempts to execute defined query against provided connection credential(s).
7
7
  #
8
8
  # OUTPUT:
9
9
  # plain text
@@ -16,7 +16,7 @@
16
16
  # gem: ruby-oci8
17
17
  #
18
18
  # USAGE:
19
- # ./check-oracle-alive.rb -u USERNAME -p PASSWORD -d DATABASE -P PRIVILEGE -T TIMEOUT -f FILE -q 'select foo from bar' -w 'value > 5' -c 'value > 10'
19
+ # ./check-oracle-query.rb -u USERNAME -p PASSWORD -d DATABASE -P PRIVILEGE -T TIMEOUT -f FILE -q 'select foo from bar' -w 'value > 5' -c 'value > 10'
20
20
  #
21
21
  # NOTES:
22
22
  #
@@ -93,6 +93,20 @@ class CheckOracleQuery < Sensu::Plugin::Check::CLI
93
93
  boolean: true,
94
94
  default: false
95
95
 
96
+ option :worker,
97
+ description: 'Number of worker threads to execute query against provided connections',
98
+ short: '-w WORKER',
99
+ long: '--worker WORKER',
100
+ default: 1,
101
+ :proc => Proc.new { |v| v.to_i == 0 ? 1 : v.to_i }
102
+
103
+ option :verbose,
104
+ description: 'Shows console log messages',
105
+ short: '-v',
106
+ long: '--verbose',
107
+ boolean: true,
108
+ default: false
109
+
96
110
  def run
97
111
  # handle OCI8 properties
98
112
  ::SensuPluginsOracle::Session.set_timeout_properties(config[:timeout])
@@ -124,29 +138,22 @@ class CheckOracleQuery < Sensu::Plugin::Check::CLI
124
138
 
125
139
  def handle_connections_from_file
126
140
  sessions = ::SensuPluginsOracle::Session.parse_from_file(config[:file])
141
+ ::SensuPluginsOracle::Session.handle_multiple(
142
+ sessions: sessions,
143
+ method: :query,
144
+ method_arguments: config[:query].to_s,
145
+ config: config
146
+ )
127
147
 
128
148
  results = Hash.new { |h, key| h[key] = [] }
129
-
130
- thread_group = ThreadGroup.new
131
- mutex = Mutex.new
132
-
133
149
  sessions.each do |session|
134
- thread_group.add Thread.new {
135
-
136
- if session.query(config[:query].to_s)
137
- method, message = session.handle_query_result(config)
138
- mutex.synchronize do
139
- results[method] << message
140
- end
141
- else
142
- mutex.synchronize do
143
- results[:critical] << session.error_message
144
- end
145
- end
146
-
147
- }
150
+ if session.error_message
151
+ results[:critical] << session.error_message
152
+ else
153
+ method, message = session.handle_query_result(config)
154
+ results[method] << message
155
+ end
148
156
  end
149
- thread_group.list.map(&:join)
150
157
 
151
158
  # return summary plus warning and critical messages
152
159
  method = :ok
@@ -95,6 +95,33 @@ module SensuPluginsOracle
95
95
  OCI8.properties[:recv_timeout] = timeout
96
96
  end
97
97
 
98
+ def self.handle_multiple(args={})
99
+ queue_sessions = Queue.new
100
+
101
+ # feed the queue with sessions
102
+ args[:sessions].map{ |session| queue_sessions.push(session) }
103
+
104
+ # start worker threads and handle requested sessions
105
+ worker = (1..args[:config][:worker]).map do
106
+ Thread.new do
107
+ begin
108
+ while session = queue_sessions.pop(true)
109
+ start = Time.now
110
+ puts "Processing #{session.name} - Method: #{args[:method]}" if args[:config][:verbose]
111
+ if args[:method_arguments]
112
+ session.send(args[:method], args[:method_arguments])
113
+ else
114
+ session.send(args[:method])
115
+ end
116
+ puts "Done #{session.name}, took #{ '%0.1f' % ((Time.now - start)*1000)} ms" if args[:config][:verbose]
117
+ end
118
+ rescue ThreadError
119
+ end
120
+ end
121
+ end
122
+ worker.map(&:join)
123
+ end
124
+
98
125
  private
99
126
 
100
127
  def show(show_records=true)
@@ -1,8 +1,8 @@
1
1
  module SensuPluginsOracle
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 4
5
- PATCH = 2
4
+ MINOR = 5
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-oracle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.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: 2017-07-24 00:00:00.000000000 Z
11
+ date: 2017-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sensu-plugin