rboss 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -21,16 +21,16 @@ Simply do a "cd" to your JBoss Home and use it
21
21
 
22
22
  You can scan resources like: datasources, queues, connectors, webapps, ...
23
23
 
24
- twiddle --datasources --webapps
24
+ twiddle --datasource --webapp
25
25
  twiddle --all
26
26
 
27
27
  If you don't need to scan for resources, you can specify them for monitoring:
28
28
 
29
- twiddle --webapps jmx-console,admin-console
29
+ twiddle --webapp jmx-console,admin-console
30
30
 
31
31
  Combine with "watch" to get a simple and instantly monitoring:
32
32
 
33
- watch --interval=1 twiddle --webapps jmx-console,admin-console
33
+ watch --interval=1 twiddle --webapp jmx-console,admin-console
34
34
 
35
35
  Retrieve property values with --get:
36
36
 
@@ -22,95 +22,84 @@
22
22
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  # THE SOFTWARE.
24
24
 
25
- require 'rboss'
25
+ require_relative '../lib/rboss'
26
26
  require 'optparse'
27
27
  require 'yaml'
28
28
 
29
29
  params = {}
30
- resources = {}
31
- list_only = false
30
+ mbeans = {}
31
+ commands = {}
32
+ no_details = false
32
33
  params[:jboss_home] = Dir.pwd unless ENV["JBOSS_HOME"]
33
34
  exec_file = nil
34
- eval_expression = nil
35
+ defaults = JBoss::Twiddle::Monitor::defaults
35
36
 
36
37
  opts = OptionParser::new
37
38
  opts.on('-j', '--jboss-home PATH', 'Defines the JBOSS_HOME variable') do |home|
38
39
  params[:jboss_home] = home
39
40
  end
40
- opts.on('-s', '--jboss-server URL', 'Defines the JBoss server') do |server|
41
+ opts.on('-s', '--server URL', 'Defines the JBoss server') do |server|
41
42
  params[:jboss_server] = server
42
43
  end
43
- opts.on('--jboss-host HOST', 'Defines the JBoss host') do |host|
44
+ opts.on('--host HOST', 'Defines the JBoss host') do |host|
44
45
  params[:jboss_host] = host
45
46
  end
46
- opts.on('--jboss-port PORT', 'Defines the JBoss jnp port') do |port|
47
+ opts.on('--port PORT', 'Defines the JBoss jnp port') do |port|
47
48
  params[:jboss_port] = port
48
49
  end
49
50
  opts.on('-e', '--exec-file PATH',
50
51
  'Defines the ruby file to exec using the vars twiddle and monitor') do |path|
51
52
  exec_file = File.expand_path path
52
53
  end
53
- opts.on('--eval EXPRESSION',
54
- 'Evaluates the given expression using the vars twiddle and monitor') do |expression|
55
- eval_expression = expression
56
- end
57
- opts.on('--all', 'Shows all resources available') do
58
- [
59
- :server_info,
60
- :deployments,
61
- :datasources,
62
- :webapps,
63
- :connectors,
64
- :queues,
65
- :ejbs
66
- ].each do |option|
67
- resources[option] = :all
54
+
55
+ opts.on('--all', "Detail all mapped mbeans") do
56
+ defaults.each do |mbean_id, mbean|
57
+ if mbean[:scan]
58
+ mbeans[mbean_id] = :all
59
+ elsif mbean[:detail]
60
+ mbeans[mbean_id] = true
61
+ end
68
62
  end
69
63
  end
70
- opts.on('--server-info', 'Shows server information') do
71
- resources[:server_info] = true
72
- end
73
- opts.on('--deployments', 'Shows deployments on server') do
74
- resources[:deployments] = true
75
- end
76
- opts.on('--connectors [name_a, name_b, name_c, ...]', Array,
77
- 'Defines the connectors to show or scan if not specified') do |connectors|
78
- resources[:connectors] = connectors || :all
79
- end
80
- opts.on('--datasources [name_a, name_b, name_c, ...]', Array,
81
- 'Defines the datasources to show or scan if not specified') do |datasources|
82
- resources[:datasources] = datasources || :all
83
- end
84
- opts.on('--ejbs [name_a, name_b, name_c, ...]', Array,
85
- 'Defines the EJBs to show or scan if not specified') do |ejbs|
86
- resources[:ejbs] = ejbs || :all
87
- end
88
- opts.on('--queues [name_a, name_b, name_c, ...]', Array,
89
- 'Defines the JMS queues to show or scan if not specified') do |queues|
90
- resources[:queues] = queues || :all
91
- end
92
- opts.on('--webapps [name_a, name_b, name_c, ...]', Array,
93
- 'Defines the webapps to show or scan if not specified') do |webapps|
94
- resources[:webapps] = webapps || :all
95
- end
96
- opts.on('--system-properties [name_a, name_b, name_c, ...]', Array,
97
- 'Defines the System properties to show or scan if not specified') do |properties|
98
- resources[:system_properties] = properties || :all
64
+
65
+ defaults.each do |mbean_id, mbean|
66
+ command = mbean_id.to_s.gsub /_/, '-'
67
+ if mbean[:scan]
68
+ opts.on("--#{command} [name_a,name_b,...]", Array,
69
+ "Detail this mbeam based on the given names (no names for scan)") do |names|
70
+ mbeans[mbean_id] = names || :all
71
+ end
72
+ elsif mbean[:detail]
73
+ opts.on("--#{command}", "Detail this mbeam") do
74
+ mbeans[mbean_id] = true
75
+ end
76
+ end
99
77
  end
100
- opts.on('--set resource_type[:resource_name],property,value', Array,
78
+
79
+ opts.on('--set mbean_id[:resource_name],property,value', Array,
101
80
  'Sets a value to a resource that the monitor knows') do |set|
102
- resources[:set] = set
81
+ commands[:set] = set
103
82
  end
104
- opts.on('--get resource_type[:resource_name],property', Array,
83
+ opts.on('--get mbean_id[:resource_name],property', Array,
105
84
  'Gets a value to a resource that the monitor knows') do |get|
106
- resources[:get] = get
85
+ commands[:get] = get
107
86
  end
108
- opts.on('--invoke resource_type[:resource_name],method,[,args...]', Array,
87
+ opts.on('--invoke mbean_id[:resource_name],method,[,args...]', Array,
109
88
  'Invokes a resoruce method') do |invoke|
110
- resources[:invoke] = invoke
89
+ commands[:invoke] = invoke
111
90
  end
112
- opts.on('--list', 'Only lists the required info (datasources, queues, ...)') do
113
- list_only = true
91
+ opts.on("-l", "--list", "List the mbeans mappings") do
92
+ defaults.each do |mbean_id, mbean|
93
+ puts " - #{mbean_id}"
94
+ [:description, :pattern].each do |detail|
95
+ puts " - #{detail} : #{mbean[detail]}"
96
+ end
97
+ puts
98
+ end
99
+ exit
100
+ end
101
+ opts.on('--no-detail', 'Do not detail mbeans that needs a name') do
102
+ no_details = true
114
103
  end
115
104
  opts.on('-u', '--jmx-user USER', 'Defines the JMX User') do |user|
116
105
  params[:jmx_user] = user
@@ -126,38 +115,36 @@ opts.parse!(ARGV) rescue abort 'Invalid Option! Use --help or -h for usage help.
126
115
  twiddle = JBoss::Twiddle::Invoker::new params
127
116
  monitor = twiddle.monitor
128
117
 
129
- if resources.empty? and not (exec_file or eval_expression)
118
+ if mbeans.empty? and commands.empty? and not exec_file
130
119
  puts opts
131
120
  exit
132
121
  end
133
122
 
134
123
  eval File.read(exec_file), binding, exec_file if exec_file
135
124
 
136
- puts (eval eval_expression, binding) if eval_expression
137
-
138
125
  def extract resource
139
126
  mbean, name = resource.split(/:/)
140
127
  end
141
128
 
142
- if resources[:set]
143
- array = resources[:set]
129
+ if commands[:set]
130
+ array = commands[:set]
144
131
  raise "Wrong number of arguments" if array.size != 3
145
132
  mbean, name = extract array[0]
146
133
  puts twiddle.set :mbean => mbean.to_sym,
147
- :name => name,
148
- :property => array[1],
149
- :value => array[2]
134
+ :name => name,
135
+ :property => array[1],
136
+ :value => array[2]
150
137
  end
151
- if resources[:get]
152
- array = resources[:get]
138
+ if commands[:get]
139
+ array = commands[:get]
153
140
  raise "Wrong number of arguments" if array.size != 2
154
141
  mbean, name = extract array[0]
155
142
  puts twiddle.get :mbean => mbean.to_sym,
156
143
  :name => name,
157
144
  :property => array[1]
158
145
  end
159
- if resources[:invoke]
160
- array = resources[:invoke]
146
+ if commands[:invoke]
147
+ array = commands[:invoke]
161
148
  raise "Wrong number of arguments" if array.size < 2
162
149
  mbean, name = extract array[0]
163
150
  puts twiddle.invoke :mbean => mbean.to_sym,
@@ -166,108 +153,25 @@ if resources[:invoke]
166
153
  :args => array[2..-1]
167
154
  end
168
155
 
169
- if resources[:server_info]
170
- puts "Server Info:"
171
- monitor.properties[:server].each do |property|
172
- puts " - #{monitor.server[property]}"
173
- end
174
- monitor.properties[:server_info].each do |property|
175
- puts " - #{monitor.server_info[property]}"
176
- end
177
- end
178
- if resources[:system_properties]
179
- puts "System Properties:"
180
- properties = resources[:system_properties]
181
- if properties == :all
182
- properties = monitor.system_properties.showAll
183
- puts properties
184
- else
185
- properties.each do |property|
186
- puts " - #{property}=#{monitor.system_properties.get(property)}"
187
- end
188
- end
189
- end
190
- if resources[:deployments]
191
- puts "Deployments:"
192
- monitor.deployments.each do |deployment|
193
- puts " - #{deployment}"
194
- end
195
- end
196
- if resources[:connectors]
197
- puts "Connectors:"
198
- connectors = resources[:connectors]
199
- connectors = monitor.connectors if connectors == :all
200
- connectors.each do |connector|
201
- monitor.with connector do
202
- puts " - #{connector}"
203
- unless list_only
204
- monitor.properties[:connector].each do |property|
205
- puts " - #{monitor.connector[property]}"
206
- end
207
- monitor.properties[:request].each do |property|
208
- puts " - #{monitor.request[property]}"
209
- end
210
- end
156
+ mbeans.each do |mbean_id, resources|
157
+ puts " - #{defaults[mbean_id][:description]}"
158
+ if resources.is_a? TrueClass
159
+ details = monitor.mbean(mbean_id).detail
160
+ details.each do |name, value|
161
+ puts " - #{name}=#{value}"
211
162
  end
212
- end
213
- end
214
- if resources[:datasources]
215
- puts "Datasources:"
216
- datasources = resources[:datasources]
217
- datasources = monitor.datasources if datasources == :all
218
- datasources.each do |datasource|
219
- monitor.with datasource do
220
- puts " - #{datasource}"
221
- unless list_only
222
- monitor.properties[:datasource].each do |property|
223
- puts " - #{monitor.datasource[property]}"
224
- end
225
- end
163
+ elsif no_details
164
+ monitor.mbean(mbean_id).scan.each do |name|
165
+ puts " - #{name}"
226
166
  end
227
- end
228
- end
229
- if resources[:webapps]
230
- puts "Webapps:"
231
- webapps = resources[:webapps]
232
- webapps = monitor.webapps if webapps == :all
233
- webapps.each do |webapp|
234
- monitor.with webapp do
235
- puts " - #{webapp}"
236
- unless list_only
237
- monitor.properties[:webapp].each do |property|
238
- puts " - #{monitor.webapp[property]}"
239
- end
240
- end
241
- end
242
- end
243
- end
244
- if resources[:ejbs]
245
- puts "EJBs:"
246
- ejbs = resources[:ejbs]
247
- ejbs = monitor.ejbs if ejbs == :all
248
- ejbs.each do |ejb|
249
- monitor.with ejb do
250
- puts " - #{ejb}"
251
- unless list_only
252
- monitor.properties[:ejb].each do |property|
253
- puts " - #{monitor.ejb[property]}"
254
- end
255
- end
256
- end
257
- end
258
- end
259
- if resources[:queues]
260
- puts "Queues:"
261
- queues = resources[:queues]
262
- queues = monitor.queues if queues == :all
263
- queues.each do |queue|
264
- monitor.with queue do
265
- puts " - #{queue}"
266
- unless list_only
267
- monitor.properties[:queue].each do |property|
268
- puts " - #{monitor.queue[property]}"
269
- end
167
+ else
168
+ details = monitor.mbean(mbean_id).detail resources
169
+ details.each do |resource, detail|
170
+ puts " - #{resource}"
171
+ detail.each do |name, value|
172
+ puts " - #{name}=#{value}"
270
173
  end
271
174
  end
272
175
  end
273
176
  end
177
+
@@ -21,14 +21,13 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  require_relative 'monitor'
24
- require_relative 'scanner'
25
24
  require_relative 'twiddle'
26
25
 
27
26
  module JBoss
28
27
  module Twiddle
29
28
 
30
29
  class BaseMonitor
31
- include JBoss::Twiddle::Monitor, JBoss::Twiddle::Scanner
30
+ include JBoss::Twiddle::Monitor
32
31
 
33
32
  def initialize twiddle
34
33
  @twiddle = twiddle
@@ -26,12 +26,50 @@ module JBoss
26
26
  class MBean
27
27
 
28
28
  attr_reader :pattern
29
- attr_accessor :resource, :twiddle
29
+ attr_accessor :resource, :twiddle, :description
30
+
31
+ @@__default__detail__resource__ = proc do |resources|
32
+ resouces = _parse_resource_ resources
33
+ details = {}
34
+ resouces.each do |resource|
35
+ with resource do
36
+ details[resource] = {}
37
+ @properties.each do |property|
38
+ details[resource][property] = self[property].value
39
+ end
40
+ end
41
+ end
42
+ details
43
+ end
44
+
45
+ @@__default__detail__ = proc do
46
+ details = {}
47
+ @properties.each do |property|
48
+ details[property] = self[property].value
49
+ end
50
+ details
51
+ end
30
52
 
31
53
  def initialize params
32
54
  @pattern = params[:pattern]
33
55
  @twiddle = params[:twiddle]
34
- @env = @twiddle
56
+ @properties = params[:properties]
57
+ @description = params[:description]
58
+ if params[:scan]
59
+ (class << self
60
+ self
61
+ end).send :define_method, :scan, &params[:scan]
62
+ end
63
+ if params[:detail]
64
+ (class << self
65
+ self
66
+ end).send :define_method,
67
+ :detail,
68
+ &(params[:detail].is_a?(TrueClass) ?
69
+ (params[:scan] ?
70
+ @@__default__detail__resource__ : @@__default__detail__)
71
+ : params[:detail])
72
+ end
35
73
  end
36
74
 
37
75
  def with resource
@@ -43,20 +81,24 @@ module JBoss
43
81
  self
44
82
  end
45
83
 
84
+ def resourced?
85
+ @pattern['#{resource}']
86
+ end
87
+
46
88
  def [] property
47
89
  resource = @resource
48
- env = @env
49
90
  query = eval("\"#{pattern}\"")
50
91
  result = @twiddle.execute(:get, query, property)
92
+
51
93
  def result.value
52
94
  self.split(/=/)[1]
53
95
  end
96
+
54
97
  result
55
98
  end
56
99
 
57
100
  def []= property, value
58
101
  resource = @resource
59
- env = @env
60
102
  query = eval("\"#{pattern}\"")
61
103
  @twiddle.execute :set, query, property, value
62
104
  end
@@ -67,7 +109,6 @@ module JBoss
67
109
 
68
110
  def _invoke_ method, *args, &block
69
111
  resource = @resource
70
- env = @env
71
112
  query = eval("\"#{pattern} #{method}\"")
72
113
  return_value = @twiddle.execute :invoke, query, args
73
114
  if block_given?
@@ -76,6 +117,19 @@ module JBoss
76
117
  return_value
77
118
  end
78
119
 
120
+ def _query_ query, &block
121
+ result = @twiddle.execute(:query, query)
122
+ return [] unless result
123
+ result = result.split /\s+/
124
+ block ? result.collect(&block) : result
125
+ end
126
+
127
+ def _parse_resource_ resources
128
+ return scan if resources == :all
129
+ return [resources] unless resources.respond_to? :each
130
+ resources
131
+ end
132
+
79
133
  end
80
134
 
81
135
  end
@@ -28,50 +28,113 @@ module JBoss
28
28
  module Monitor
29
29
 
30
30
  def defaults
31
- {
31
+ @defaults ||= {
32
32
  :webapp => {
33
+ :description => 'Deployed webapps',
33
34
  :pattern => 'jboss.web:type=Manager,host=localhost,path=/#{resource}',
34
- :properties => %W(activeSessions maxActive)
35
+ :properties => %W(activeSessions maxActive),
36
+ :scan => proc do
37
+ _query_ "jboss.web:type=Manager,*" do |path|
38
+ path.gsub! "jboss.web:type=Manager,path=/", ""
39
+ path.gsub! /,host=.+/, ''
40
+ path
41
+ end
42
+ end,
43
+ :detail => true
35
44
  },
36
45
  :web_deployment => {
46
+ :description => 'Deployed webapp control',
37
47
  :pattern => 'jboss.web.deployment:war=/#{resource}'
38
48
  },
39
49
  :connector => {
50
+ :description => 'JBossWeb connector',
40
51
  :pattern => 'jboss.web:type=ThreadPool,name=#{resource}',
41
- :properties => %W(maxThreads currentThreadCount currentThreadsBusy)
52
+ :properties => %W(maxThreads currentThreadCount currentThreadsBusy),
53
+ :scan => proc do
54
+ _query_ "jboss.web:type=ThreadPool,*" do |path|
55
+ path.gsub "jboss.web:type=ThreadPool,name=", ""
56
+ end
57
+ end,
58
+ :detail => true
59
+ },
60
+ :engine => {
61
+ :description => 'JBossWeb engine',
62
+ :pattern => 'jboss.web:type=Engine',
63
+ :properties => %W(jvmRoute name defaultHost),
64
+ :detail => true
42
65
  },
43
66
  :server_info => {
67
+ :description => 'JBoss running info',
44
68
  :pattern => 'jboss.system:type=ServerInfo',
45
69
  :properties => %W(ActiveThreadCount MaxMemory FreeMemory AvailableProcessors
46
- HostAddress JavaVendor JavaVersion OSName OSArch)
70
+ HostAddress JavaVendor JavaVersion OSName OSArch),
71
+ :detail => true
47
72
  },
48
73
  :server => {
74
+ :description => 'JBoss specifications',
49
75
  :pattern => 'jboss.system:type=Server',
50
- :properties => %W(VersionNumber StartDate)
76
+ :properties => %W(VersionNumber StartDate),
77
+ :detail => true
51
78
  },
52
79
  :system_properties => {
80
+ :description => 'System properties',
53
81
  :pattern => 'jboss:name=SystemProperties,type=Service'
54
82
  },
55
83
  :request => {
84
+ :description => 'JBossWeb connector requests',
56
85
  :pattern => 'jboss.web:type=GlobalRequestProcessor,name=#{resource}',
57
- :properties => %W(requestCount errorCount maxTime)
86
+ :properties => %W(requestCount errorCount maxTime),
87
+ :scan => proc do
88
+ _query_ "jboss.web:type=ThreadPool,*" do |path|
89
+ path.gsub "jboss.web:type=ThreadPool,name=", ""
90
+ end
91
+ end,
92
+ :detail => true
58
93
  },
59
94
  :datasource => {
95
+ :description => 'Datasource',
60
96
  :pattern => 'jboss.jca:service=ManagedConnectionPool,name=#{resource}',
61
- :properties => %W(MinSize MaxSize AvailableConnectionCount InUseConnectionCount ConnectionCount)
97
+ :properties => %W(MinSize MaxSize AvailableConnectionCount
98
+ InUseConnectionCount ConnectionCount),
99
+ :scan => proc do
100
+ _query_ "jboss.jca:service=ManagedConnectionPool,*" do |path|
101
+ path.gsub "jboss.jca:service=ManagedConnectionPool,name=", ""
102
+ end
103
+ end,
104
+ :detail => true
62
105
  },
63
106
  :queue => {
107
+ :description => 'JMS Queue',
64
108
  :pattern => 'jboss.messaging.destination:service=Queue,name=#{resource}',
65
109
  :properties => %W(Name JNDIName MessageCount DeliveringCount
66
- ScheduledMessageCount MaxSize FullSize Clustered ConsumerCount)
110
+ ScheduledMessageCount MaxSize FullSize Clustered ConsumerCount),
111
+ :scan => proc do
112
+ _query_ "jboss.messaging.destination:service=Queue,*" do |path|
113
+ path.gsub "jboss.messaging.destination:service=Queue,name=", ""
114
+ end
115
+ end,
116
+ :detail => true
67
117
  },
68
118
  :ejb => {
119
+ :description => 'EJB',
69
120
  :pattern => 'jboss.j2ee:#{resource},service=EJB3',
70
- :properties => %W(CreateCount RemoveCount CurrentSize AvailableCount)
121
+ :properties => %W(CreateCount RemoveCount CurrentSize AvailableCount),
122
+ :scan => proc do
123
+ result = _query_ "jboss.j2ee:*"
124
+ (result.find_all do |path|
125
+ path["service=EJB3"] && path["name="] && path["jar="]
126
+ end).collect do |path|
127
+ path.gsub("jboss.j2ee:", '').gsub(/,?service=EJB3/, '')
128
+ end
129
+ end,
130
+ :detail => true
71
131
  }
72
132
  }
133
+ @defaults
73
134
  end
74
135
 
136
+ module_function :defaults
137
+
75
138
  def properties mbean_id = nil
76
139
  @properties ||= {}
77
140
  return properties[mbean_id] if mbean_id
@@ -97,8 +160,7 @@ module JBoss
97
160
  end
98
161
 
99
162
  def monitor mbean_id, params
100
- mbeans[mbean_id] = JBoss::MBean::new :pattern => params[:pattern], :twiddle => @twiddle
101
- properties[mbean_id] = params[:properties]
163
+ mbeans[mbean_id] = JBoss::MBean::new params.merge(:twiddle => @twiddle)
102
164
  end
103
165
 
104
166
  def with resource
@@ -126,7 +188,7 @@ module JBoss
126
188
  mbean
127
189
  end
128
190
 
129
- def method_missing(method, *args, &block)
191
+ def method_missing method, *args, &block
130
192
  mbean_id = method
131
193
  mbean = mbeans[mbean_id]
132
194
  resource = args[0] || @current_resource
@@ -58,7 +58,9 @@ module JBoss
58
58
  end
59
59
 
60
60
  def execute command, *arguments
61
- `#{shell command, arguments}`.chomp
61
+ result = `#{shell command, arguments}`.chomp
62
+ return nil if result["ERROR [Twiddle] Command failure"]
63
+ result
62
64
  end
63
65
 
64
66
  end
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module RBoss
24
- VERSION = "0.2.0"
24
+ VERSION = "0.2.1"
25
25
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rboss
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.0
5
+ version: 0.2.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ataxexe
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-13 00:00:00 Z
13
+ date: 2011-08-19 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: |-
@@ -67,7 +67,6 @@ files:
67
67
  - lib/rboss/twiddle/base_monitor.rb
68
68
  - lib/rboss/twiddle/mbean.rb
69
69
  - lib/rboss/twiddle/monitor.rb
70
- - lib/rboss/twiddle/scanner.rb
71
70
  - lib/rboss/twiddle/twiddle.rb
72
71
  - lib/rboss/utils.rb
73
72
  - lib/rboss/version.rb
@@ -1,92 +0,0 @@
1
- # The MIT License
2
- #
3
- # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
-
23
- require "set"
24
-
25
- module JBoss
26
- module Twiddle
27
- module Scanner
28
-
29
- def webapps
30
- _query_ "jboss.web:type=Manager,*" do |path|
31
- path.gsub! "jboss.web:type=Manager,path=/", ""
32
- path.gsub! /,host=.+/, ''
33
- path
34
- end
35
- end
36
-
37
- def datasources
38
- _query_ "jboss.jca:service=ManagedConnectionPool,*" do |path|
39
- path.gsub "jboss.jca:service=ManagedConnectionPool,name=", ""
40
- end
41
- end
42
-
43
- def connectors
44
- _query_ "jboss.web:type=ThreadPool,*" do |path|
45
- path.gsub "jboss.web:type=ThreadPool,name=", ""
46
- end
47
- end
48
-
49
- def queues
50
- _query_ "jboss.messaging.destination:service=Queue,*" do |path|
51
- path.gsub "jboss.messaging.destination:service=Queue,name=", ""
52
- end
53
- end
54
-
55
- def ejbs
56
- result = _query_ "jboss.j2ee:service=EJB3,*"
57
- (result.find_all {|path| path["name="] && path["jar="]}).collect do |path|
58
- path.gsub("jboss.j2ee:", '').gsub(/,?service=EJB3/, '')
59
- end
60
- end
61
-
62
- def deployments
63
- wars = _query_ "jboss.web.deployment:*" do |path|
64
- path.gsub("jboss.web.deployment:", "").split(/,/).find {|p| p.start_with? "war="}
65
- end
66
- ears = _query_ "jboss.j2ee:*"
67
- ears = (ears.find_all {|path| path["ear="] && path["jar="]}).collect do |path|
68
- path.gsub("jboss.j2ee:",'').split(/,/).find {|p| p.start_with? "ear="}
69
- end
70
- result = Set::new
71
- (wars + ears).each do |deployment|
72
- result << deployment
73
- end
74
- result
75
- end
76
-
77
- def can_scan? resource
78
- self.respond_to? resource.to_sym
79
- end
80
-
81
- private
82
-
83
- def _query_ query, &block
84
- result = @twiddle.execute(:query, query)
85
- return [] if result["No MBean matches for query"]
86
- result = result.split /\s+/
87
- block ? result.collect(&block) : result
88
- end
89
-
90
- end
91
- end
92
- end