rboss 0.6.1 → 0.6.2

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.
data/README.md CHANGED
@@ -142,8 +142,12 @@ limits by using a :health key:
142
142
  :properties => %W(activeCount currentFree maxAvailable),
143
143
  :header => ['Active Count', 'Current Free', 'Max Available'],
144
144
  :health => {
145
- :max => :max_available,
146
- :using => :active_count #or use :free if you have the number of free resources
145
+ :active_count => {
146
+ :percentage => { # uses a percentage based check
147
+ :max => :max_available,
148
+ :using => :active_count #or use :free if you have the number of free resources
149
+ }
150
+ }
147
151
  },
148
152
  :scan => proc do
149
153
  # queries and pass each result do the block
data/bin/rboss-cli CHANGED
@@ -32,8 +32,10 @@ require 'yummi'
32
32
  params = {}
33
33
  @conf_dir = File.expand_path "~/.rboss"
34
34
  servers_file = "#@conf_dir/jboss-cli-servers.yaml"
35
- @components = {}
35
+ @resources = {}
36
+ @parameters = {}
36
37
  @servers_file = File.expand_path(servers_file)
38
+ @operation = :read_resource
37
39
  save = false
38
40
  params[:jboss_home] = (ENV["JBOSS_HOME"] or ENV["RBOSS_CLI_JBOSS_HOME"] or Dir.pwd)
39
41
  params[:host] = '127.0.0.1'
@@ -68,7 +70,7 @@ end
68
70
  opts.on('--save SERVER_NAME', "Saves the server configuration in #{servers_file}") do |server|
69
71
  save = server
70
72
  end
71
- opts.on('--loop INTERVAL', Float, 'Runs the mbean inside a loop') do |interval|
73
+ opts.on('--loop INTERVAL', Float, 'Run inside a loop') do |interval|
72
74
  @loop = true
73
75
  @interval = interval
74
76
  end
@@ -86,21 +88,35 @@ opts.on('-v', '--verbose', 'Displays jboss-cli commands before execution') do
86
88
  params[:log_level] = Logger::DEBUG
87
89
  end
88
90
 
91
+ opts.on('-o', '--operation NAME',
92
+ 'Sets the operation to invoke (Defaults to "read-resource")') do |name|
93
+ @operation = name
94
+ end
95
+
96
+ opts.on('--skip-optional', 'Skips optional parameters while invoking a command ') do
97
+ params[:skip_optional] = true
98
+ end
99
+
100
+ opts.on('-a', '--args PARAMETERS', Array,
101
+ 'Specifies parameters in form of (name=value) for use with operation') do |parameters|
102
+ @parameters = Hash[(parameters.collect {|p| p.split(/=/,2)})]
103
+ end
104
+
89
105
  RBoss::Cli::Mappings.resource_mappings.each do |name, config|
90
106
  if config[:scan]
91
107
  opts.on("--#{name} [NAMES]", Array, config[:description]) do |resources|
92
- @components[name] = resources || :all
108
+ @resources[name] = resources
93
109
  end
94
110
  else
95
111
  opts.on("--#{name}", config[:description]) do
96
- @components[name] = true
112
+ @resources[name] = true
97
113
  end
98
114
  end
99
115
  end
100
116
 
101
117
  opts.on('--all', 'Display all available info') do
102
118
  RBoss::Cli::Mappings.resource_mappings.each do |name, config|
103
- @components[name] = :all unless config[:derived]
119
+ @resources[name] = nil unless config[:derived]
104
120
  end
105
121
  end
106
122
 
@@ -131,13 +147,17 @@ if save
131
147
  puts "Configuration saved!"
132
148
  end
133
149
 
134
- puts opts if @components.empty?
150
+ puts opts if @resources.empty?
135
151
 
136
152
  def execute_actions
137
- content = @jboss_cli.content(@components)
138
- system "clear" if @loop
139
- puts Yummi.colorize(Time.now.strftime("At %H:%M:%S%n"), :white) if @loop
140
- puts content
153
+ begin
154
+ content = @jboss_cli.invoke(@operation, @resources, @parameters)
155
+ system "clear" if @loop
156
+ puts Yummi.colorize(Time.now.strftime("At %H:%M:%S%n"), :white) if @loop
157
+ puts content.chomp
158
+ rescue RBoss::Cli::InvocationFailed => e
159
+ puts Yummi::colorize e.message, :intense_red
160
+ end
141
161
  end
142
162
 
143
163
  while @loop
@@ -20,17 +20,21 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  # THE SOFTWARE.
22
22
 
23
+ require_relative 'result_parser'
23
24
  require_relative 'resource'
24
25
  require_relative 'mappings'
25
26
 
26
27
  require 'logger'
27
28
 
29
+ require 'yummi'
30
+ require 'yaml'
31
+
28
32
  module RBoss
29
33
 
30
34
  module Cli
31
35
 
32
36
  class Invoker
33
- include RBoss::Cli::Mappings, RBoss::Platform
37
+ include RBoss::Cli::Mappings, RBoss::Platform, RBoss::Cli::ResultParser
34
38
 
35
39
  attr_reader :server, :host, :port, :user, :password
36
40
 
@@ -58,6 +62,8 @@ module RBoss
58
62
  end
59
63
  @logger.formatter = formatter
60
64
  end
65
+
66
+ @skip_optional = params[:skip_optional]
61
67
  end
62
68
 
63
69
  def command
@@ -68,24 +74,74 @@ module RBoss
68
74
  command
69
75
  end
70
76
 
71
- def content(components)
77
+ def invoke(operation, resources, parameters)
72
78
  buff = ""
73
- components.each do |key, resources|
79
+ resources.each do |key, resource_names|
74
80
  if resource_mappings.has_key? key
75
81
  mapping = resource_mappings[key]
76
- component = RBoss::Cli::Resource::new(self, mapping)
77
- buff << component.content(resources)
82
+ resource = RBoss::Cli::Resource::new(self, mapping)
83
+ result = resource.invoke(operation, resource_names, parameters)
84
+ buff << result.to_s if result
78
85
  end
79
86
  end
80
87
  buff
81
88
  end
82
89
 
90
+ def gets_and_invoke(path, operation, parameters)
91
+ result = result("#{path}:read-operation-description(name=#{operation})")
92
+ result["request-properties"] ||= {}
93
+ puts Yummi::colorize("Please input the requested parameters", :yellow)
94
+ builder = CommandBuilder::new operation
95
+ result["request-properties"].each do |name, detail|
96
+ next if (@skip_optional and not detail['required'] or detail['default'])
97
+ input = parameters[name]
98
+ unless input
99
+ puts Yummi::colorize(name, :intense_blue)
100
+ puts "Enter parameter value (type --help to get the parameter description): "
101
+ while (input = gets.chomp) == '--help'
102
+ puts Yummi::colorize(detail['description'], :intense_gray)
103
+ required = detail['required']
104
+ default_value = detail['default']
105
+ puts RBoss::Colorizers.type(detail['type']).colorize(detail['type'])
106
+ puts Yummi::colorize("Required", :red) if required
107
+ puts Yummi::colorize("Default: #{default_value}", :brown) if default_value
108
+ end
109
+ end
110
+ next if input.empty?
111
+ builder << {:name => name, :value => detail['type'].convert(input)}
112
+ end
113
+ result = result("#{path}:#{builder}")
114
+ puts YAML::dump(result)
115
+ end
116
+
83
117
  def execute(*commands)
84
- exec = "#{command} --commands=\"#{commands.join ','}\""
118
+ exec = "#{command} --command#{commands.size > 1 ? 's' : ''}=\"#{commands.join ','}\""
85
119
  @logger.debug exec
86
120
  `#{exec}`.chomp
87
121
  end
88
122
 
123
+ def result(*commands)
124
+ eval_result(execute commands)
125
+ end
126
+
127
+ end
128
+
129
+ class CommandBuilder
130
+
131
+ def initialize (operation)
132
+ @operation = operation
133
+ @params = {}
134
+ end
135
+
136
+ def << (param)
137
+ @params[param[:name]] = param[:value]
138
+ end
139
+
140
+ def to_s
141
+ params = (@params.collect() { |k, v| "#{k}=#{v}" }).join ','
142
+ "#@operation(#{params})"
143
+ end
144
+
89
145
  end
90
146
 
91
147
  end
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Details Connectors
3
3
  path: /subsystem=web/connector=${NAME}
4
- scan: ls ${PATH}
4
+ scan: ls /subsystem=web/connector
5
5
  print:
6
6
  - title: Connectors
7
7
  layout: vertical
@@ -1,7 +1,7 @@
1
1
  ---
2
- description: Detail Datasource Information
2
+ description: Datasource Information
3
3
  path: /subsystem=datasources/data-source=${NAME}
4
- scan: ls ${PATH}
4
+ scan: ls /subsystem=datasources/data-source
5
5
  print:
6
6
  - id: config
7
7
  title: Datasource Details
@@ -39,7 +39,7 @@ print:
39
39
 
40
40
  - id: pool
41
41
  title: Datasource Pool Statistics
42
- command: ${PATH}/statistics=pool:${READ_RESOURCE}
42
+ path: ${PATH}/statistics=pool
43
43
  layout: vertical
44
44
  properties:
45
45
  - ActiveCount
@@ -76,7 +76,7 @@ print:
76
76
 
77
77
  - id: jdbc
78
78
  title: Datasource JDBC Statistics
79
- command: ${PATH}/statistics=jdbc:${READ_RESOURCE}
79
+ path: ${PATH}/statistics=jdbc
80
80
  properties:
81
81
  - PreparedStatementCacheCurrentSize
82
82
  - PreparedStatementCacheAccessCount
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Detail JDBC Drivers
3
3
  path: /subsystem=datasources/jdbc-driver=${NAME}
4
- scan: ls ${PATH}
4
+ scan: ls /subsystem=datasources/jdbc-driver
5
5
  print:
6
6
  - title: JDBC Drivers
7
7
  properties:
@@ -4,7 +4,7 @@ path: /core-service=
4
4
  print:
5
5
  - id: platform
6
6
  title: Operating System Information
7
- command: ${PATH}platform-mbean/type=operating-system:${READ_RESOURCE}
7
+ path: ${PATH}platform-mbean/type=operating-system
8
8
  properties:
9
9
  - name
10
10
  - arch
@@ -19,10 +19,19 @@ print:
19
19
  - System Load
20
20
  format:
21
21
  system_load: percentage
22
+ color:
23
+ name:
24
+ with: white
25
+ system_load:
26
+ threshold:
27
+ 0.8: intense_red
28
+ 0.7: red
29
+ 0.5: brown
30
+ 0: green
22
31
 
23
32
  - id: env
24
33
  title: Server Environment Information
25
- command: ${PATH}server-environment:${READ_RESOURCE}
34
+ path: ${PATH}server-environment
26
35
  properties:
27
36
  - server-name
28
37
  - node-name
@@ -54,7 +63,7 @@ print:
54
63
  - id: memory
55
64
  title: Server Memory Usage
56
65
  layout: vertical
57
- command: ${PATH}platform-mbean/type=memory:${READ_RESOURCE}
66
+ path: ${PATH}platform-mbean/type=memory
58
67
  properties:
59
68
  - heap-memory-usage -> init
60
69
  - heap-memory-usage -> used
@@ -111,7 +120,7 @@ print:
111
120
 
112
121
  - id: thread
113
122
  title: Server Thread Info
114
- command: ${PATH}platform-mbean/type=threading:${READ_RESOURCE}
123
+ path: ${PATH}platform-mbean/type=threading
115
124
  layout: vertical
116
125
  properties:
117
126
  - thread-contention-monitoring-supported
@@ -162,7 +171,7 @@ print:
162
171
 
163
172
  - id: config
164
173
  title: Server Configuration Resources
165
- command: ${PATH}server-environment:${READ_RESOURCE}
174
+ path: ${PATH}server-environment
166
175
  layout: vertical
167
176
  properties:
168
177
  - server-name
@@ -42,6 +42,10 @@ module RBoss
42
42
  new_mapping[:print] = [table]
43
43
  new_mapping[:description] = table[:title]
44
44
  new_mapping[:derived] = true
45
+ if table[:path]
46
+ new_mapping[:path] = table[:path].gsub '${PATH}', mapping[:path]
47
+ table[:path] = new_mapping[:path]
48
+ end
45
49
  new_key = "#{name}-#{table[:id]}"
46
50
  @resource_mappings[new_key] = new_mapping
47
51
  end
@@ -20,6 +20,7 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  # THE SOFTWARE.
22
22
 
23
+
23
24
  module RBoss
24
25
  module Cli
25
26
  class Resource
@@ -36,22 +37,27 @@ module RBoss
36
37
  @count = 0
37
38
  end
38
39
 
39
- def content(resources)
40
- if :all == resources and scannable?
41
- resources = scan
40
+ def invoke(operation, resource_names, arguments)
41
+ if respond_to? operation.to_key
42
+ send operation.to_key, resource_names, arguments
43
+ else
44
+ interact_to_invoke operation, resource_names, arguments
45
+ Yummi.colorize('Operation Executed!', :green)
42
46
  end
43
- resources = [resources] unless resources.is_a? Array
47
+ end
48
+
49
+ def read_resource(resources, arguments)
50
+ resources ||= scan
44
51
  params = @config[:print]
45
52
  params.each do |p|
46
53
  table_builder = RBoss::TableBuilder::new p
47
54
  table_builder.add_name_column if scannable?
48
55
  @tables << table_builder.build_table
49
56
  end
50
- resources.each do |resource|
51
- @context[:name] = resource
52
- @context[:path] = parse(@config[:path])
53
-
57
+ with resources do
54
58
  params.each do |p|
59
+ @context[:path] = parse(@config[:path])
60
+ @context[:path] = parse(p[:path]) if p[:path]
55
61
  add_row(p)
56
62
  end
57
63
  end
@@ -63,6 +69,112 @@ module RBoss
63
69
  result
64
70
  end
65
71
 
72
+ def read_operation_names(resource_name, arguments)
73
+ operations = Yummi::colorize('Operations:', :yellow)
74
+ operations << $/
75
+ with resource_name do
76
+ result = @invoker.result("#{@context[:path]}:read-operation-names")
77
+ result.each do |operation|
78
+ operations << Yummi::colorize('- ', :intense_purple)
79
+ operations << Yummi::colorize(operation, :intense_blue) << $/
80
+ end
81
+ end
82
+ operations
83
+ end
84
+
85
+ def read_operation_description (resource_name, arguments)
86
+ buff = ''
87
+ with resource_name do
88
+ operation_name = arguments['name']
89
+ table = Yummi::Table::new
90
+ buff << Yummi::colorize(operation_name, :intense_green) << $/
91
+ result = @invoker.result(
92
+ "#{@context[:path]}:read-operation-description(name=#{operation_name})"
93
+ )
94
+ buff << Yummi::colorize(result['description'], :intense_gray) << $/ * 2
95
+ table.title = 'Request'
96
+ table.header = %w(Parameter Type Required Default)
97
+ table.aliases = %w(name type required default)
98
+ table.colorize('name', :with => :white)
99
+
100
+ table.using_row do
101
+ table.colorize %w(type default) do |value|
102
+ RBoss::Colorizers.type(value['type']).color_for(value)
103
+ end
104
+ end
105
+
106
+ table.format 'required', :using => RBoss::Formatters.yes_or_no
107
+ table.colorize 'required', :using => RBoss::Colorizers.boolean
108
+ result["request-properties"] ||= {}
109
+ unless result["request-properties"].empty?
110
+ result["request-properties"].each do |name, detail|
111
+ detail['name'] = name
112
+ table << detail
113
+ end
114
+ buff << table.to_s << $/
115
+ end
116
+
117
+ table = Yummi::Table::new
118
+ table.title = 'Response'
119
+ table.header = %w(Parameter Type Nilable Unit)
120
+ table.aliases = %w(name type nilable unit)
121
+
122
+ table.colorize 'name', :with => :white
123
+
124
+ table.using_row do
125
+ table.colorize 'type' do |value|
126
+ RBoss::Colorizers.type(value['type']).color_for(value)
127
+ end
128
+ end
129
+
130
+ table.format 'nilable', :using => RBoss::Formatters.yes_or_no
131
+ table.colorize 'nilable', :using => RBoss::Colorizers.boolean
132
+ result["reply-properties"] ||= {}
133
+ unless result["reply-properties"].empty?
134
+ result = result["reply-properties"]
135
+ table.description = result['description']
136
+ table << result
137
+ build_nested(result).each do |nested|
138
+ table << nested
139
+ end
140
+ buff << table.to_s << $/
141
+ end
142
+ end
143
+ buff
144
+ end
145
+
146
+ alias_method :list_operations, :read_operation_names
147
+ alias_method :detail_operation, :read_operation_description
148
+
149
+ private
150
+
151
+ def build_nested(detail, parent_name = '', result = [])
152
+ if detail['value-type']
153
+ detail['value-type'].each do |name, _detail|
154
+ name = "#{parent_name}#{name}"
155
+ _detail['name'] = name
156
+ result << _detail
157
+ build_nested(_detail, "#{name} => ", result)
158
+ end
159
+ end
160
+ result
161
+ end
162
+
163
+ def interact_to_invoke(operation, resource_name, arguments)
164
+ with resource_name do
165
+ @invoker.gets_and_invoke(@context[:path], operation, arguments)
166
+ end
167
+ end
168
+
169
+ def with(resources)
170
+ resources ||= ''
171
+ [*resources].each do |resource|
172
+ @context[:name] = resource
173
+ @context[:path] = parse(@config[:path])
174
+ yield
175
+ end
176
+ end
177
+
66
178
  def add_row(params)
67
179
  data = get_data(params)
68
180
  return unless data
@@ -76,12 +188,13 @@ module RBoss
76
188
  result = value.scan /\$\{\w+\}/
77
189
  result.each do |matched|
78
190
  key = matched[2...-1].downcase.to_sym
79
- value = value.gsub(matched, @context[key])
191
+ value = value.gsub(matched, @context[key].to_s)
80
192
  end
81
193
  value
82
194
  end
83
195
 
84
196
  def scan
197
+ return '' unless scannable?
85
198
  result = @invoker.execute(parse @config[:scan])
86
199
  result.split "\n"
87
200
  end
@@ -91,30 +204,27 @@ module RBoss
91
204
  end
92
205
 
93
206
  def get_data(config)
94
- command = (config[:command] or '${PATH}:${READ_RESOURCE}')
95
- result = @invoker.execute(parse command)
96
- result = eval_result(result)
97
- data = []
98
- config[:properties].each do |prop|
99
- data << get_property(prop, result)
207
+ command = parse((config[:command] or '${PATH}:read-resource(include-runtime=true)'))
208
+ begin
209
+ result = @invoker.result(command)
210
+ data = []
211
+ config[:properties].each do |prop|
212
+ data << get_property(prop, result)
213
+ end
214
+ data
215
+ rescue
216
+ nil
100
217
  end
101
- data
102
218
  end
103
219
 
104
220
  def get_property(prop, result)
105
- value = result["result"]
221
+ value = result
106
222
  prop.split(/\s*->\s*/).each do |p|
107
223
  value = value[p]
108
224
  end
109
225
  value
110
226
  end
111
227
 
112
- def eval_result(result)
113
- undefined = nil #prevents error because undefined means nil in result object
114
- result = result.gsub /(\d+)L/, '\1' #removes the long type mark
115
- eval(result)
116
- end
117
-
118
228
  end
119
229
  end
120
230
  end
@@ -0,0 +1,80 @@
1
+ # The MIT License
2
+ #
3
+ # Copyright (c) 2011-2012 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
+ module RBoss
24
+ module Cli
25
+
26
+ class InvocationFailed < Exception
27
+
28
+ def initialize(message)
29
+ super(message)
30
+ end
31
+
32
+ end
33
+
34
+ module ResultParser
35
+
36
+ class Type
37
+
38
+ attr_reader :name
39
+
40
+ def initialize (name, &block)
41
+ @name = name
42
+ @converter_block = block
43
+ end
44
+
45
+ def convert (value)
46
+ @converter_block.call value
47
+ end
48
+
49
+ def to_s
50
+ @name
51
+ end
52
+
53
+ end
54
+
55
+ STRING = Type::new 'STRING' do |string|
56
+ "\"#{string}\""
57
+ end
58
+ BOOLEAN = Type::new 'BOOLEAN' do |string|
59
+ 'true' == string.downcase
60
+ end
61
+ INT = Type::new 'INT' do |string|
62
+ string.to_i
63
+ end
64
+ LONG = Type::new 'LONG' do |string|
65
+ string.to_i
66
+ end
67
+ LIST = Type::new 'LIST'
68
+ OBJECT = Type::new 'OBJECT'
69
+
70
+ def eval_result(result)
71
+ undefined = nil #prevents error because undefined means nil in result object
72
+ result = result.gsub /(\d+)L/, '\1' #removes the long type mark
73
+ result = eval(result)
74
+ raise InvocationFailed::new(result["failure-description"]) if result["outcome"] == "failed"
75
+ result["result"]
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -40,8 +40,7 @@ module RBoss
40
40
  def process
41
41
  @logger.info "Including resources..."
42
42
  @config.each do |to_path, resources|
43
- resources = [resources] unless resources.is_a? Array
44
- resources.each do |resource|
43
+ [*resources].each do |resource|
45
44
  to_path = "#{@jboss.profile}/#{to_path}" unless to_path.to_s.start_with? '/'
46
45
  cp_r File.expand_path(resource), to_path
47
46
  end
@@ -63,7 +63,7 @@ module RBoss
63
63
  include Component, FileUtils
64
64
 
65
65
  def configure services_to_remove
66
- @services_to_remove = services_to_remove.is_a?(Array) ? services_to_remove : [services_to_remove]
66
+ @services_to_remove = [*services_to_remove]
67
67
  @mapping = {}
68
68
  load_yaml('slimming').each do |key, values|
69
69
  @mapping[key.to_sym] = values
@@ -91,7 +91,7 @@ module RBoss
91
91
 
92
92
  def name
93
93
  if pattern['#{resource}'] and not @resource
94
- domain,name = pattern.split ':'
94
+ domain, name = pattern.split ':'
95
95
  name.gsub! /[^,]+\{resource\}/, ''
96
96
  name << "," if name.empty?
97
97
  name << "*"
@@ -107,7 +107,7 @@ module RBoss
107
107
  result = @twiddle.execute(:get, query, property)
108
108
 
109
109
  def result.value
110
- self.split(/=/)[1..-1].join "="
110
+ self.split(/=/, 2)[1]
111
111
  end
112
112
 
113
113
  result
data/lib/rboss/utils.rb CHANGED
@@ -30,6 +30,18 @@ class String
30
30
  self[0, 1].downcase + self[1..-1]
31
31
  end
32
32
 
33
+ def to_key
34
+ self.gsub('-', '_').to_sym
35
+ end
36
+
37
+ end
38
+
39
+ class Symbol
40
+
41
+ def to_key
42
+ self
43
+ end
44
+
33
45
  end
34
46
 
35
47
  class Hash
@@ -43,7 +55,8 @@ class Hash
43
55
  end
44
56
  end
45
57
  end
46
- h[k.to_sym] = v
58
+ k = k.to_sym if k.respond_to? :to_sym
59
+ h[k] = v
47
60
  h
48
61
  end)
49
62
  end
data/lib/rboss/version.rb CHANGED
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module RBoss
24
- VERSION = "0.6.1"
24
+ VERSION = "0.6.2"
25
25
  end
@@ -4,14 +4,38 @@ module RBoss
4
4
  module Colorizers
5
5
 
6
6
  def self.boolean params = {}
7
- lambda do |value|
8
- return (params[:if_true] or :green) if value
9
- params[:if_false] or :brown
7
+ Yummi::to_colorize do |value|
8
+ value ? (params[:if_true] or :green) : (params[:if_false] or :brown)
9
+ end
10
+ end
11
+
12
+ def self.threshold params
13
+ colorize = lambda do |value|
14
+ params.sort.reverse_each do |limit, color|
15
+ return color if value > limit
16
+ end
17
+ end
18
+ Yummi::to_colorize &colorize
19
+ end
20
+
21
+ def self.type type
22
+ Yummi::to_colorize do |value|
23
+ case type
24
+ when RBoss::Cli::ResultParser::STRING then
25
+ :green
26
+ when RBoss::Cli::ResultParser::INT,
27
+ RBoss::Cli::ResultParser::LONG then
28
+ :blue
29
+ when RBoss::Cli::ResultParser::BOOLEAN then
30
+ :purple
31
+ else
32
+ :cyan
33
+ end
10
34
  end
11
35
  end
12
36
 
13
37
  def self.with color
14
- lambda do |value|
38
+ Yummi::to_colorize do |value|
15
39
  color
16
40
  end
17
41
  end
data/lib/rboss.rb CHANGED
@@ -22,11 +22,11 @@
22
22
 
23
23
  require_relative "rboss/version"
24
24
  require_relative "rboss/plaftorm"
25
- require_relative "rboss/jboss_profile"
26
- require_relative "rboss/twiddle"
27
- require_relative "rboss/cli/jboss_cli"
28
- require_relative "rboss/bin/command_actions"
29
25
  require_relative "rboss/view/colorizers"
30
26
  require_relative "rboss/view/formatters"
31
27
  require_relative "rboss/view/health_checkers"
32
28
  require_relative "rboss/view/table_builder"
29
+ require_relative "rboss/jboss_profile"
30
+ require_relative "rboss/twiddle"
31
+ require_relative "rboss/cli/invoker"
32
+ require_relative "rboss/bin/command_actions"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rboss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-15 00:00:00.000000000 Z
12
+ date: 2012-07-19 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! "A tool to create profiles for JBoss Application Server and use\n twiddle
15
15
  to manage a running JBoss AS."
@@ -31,13 +31,14 @@ files:
31
31
  - bin/twiddle
32
32
  - lib/rboss.rb
33
33
  - lib/rboss/bin/command_actions.rb
34
- - lib/rboss/cli/jboss_cli.rb
34
+ - lib/rboss/cli/invoker.rb
35
35
  - lib/rboss/cli/mappings.rb
36
36
  - lib/rboss/cli/mappings/resources/connector.yaml
37
37
  - lib/rboss/cli/mappings/resources/datasource.yaml
38
38
  - lib/rboss/cli/mappings/resources/jdbc_driver.yaml
39
39
  - lib/rboss/cli/mappings/resources/server.yaml
40
40
  - lib/rboss/cli/resource.rb
41
+ - lib/rboss/cli/result_parser.rb
41
42
  - lib/rboss/component_processor.rb
42
43
  - lib/rboss/components/component.rb
43
44
  - lib/rboss/components/datasource.rb