sensu-plugins-oracle 0.4.2 → 0.5.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: 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