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 +6 -2
- data/bin/rboss-cli +30 -10
- data/lib/rboss/cli/{jboss_cli.rb → invoker.rb} +62 -6
- data/lib/rboss/cli/mappings/resources/connector.yaml +1 -1
- data/lib/rboss/cli/mappings/resources/datasource.yaml +4 -4
- data/lib/rboss/cli/mappings/resources/jdbc_driver.yaml +1 -1
- data/lib/rboss/cli/mappings/resources/server.yaml +14 -5
- data/lib/rboss/cli/mappings.rb +4 -0
- data/lib/rboss/cli/resource.rb +133 -23
- data/lib/rboss/cli/result_parser.rb +80 -0
- data/lib/rboss/components/resource.rb +1 -2
- data/lib/rboss/components/slimming.rb +1 -1
- data/lib/rboss/twiddle/mbean.rb +2 -2
- data/lib/rboss/utils.rb +14 -1
- data/lib/rboss/version.rb +1 -1
- data/lib/rboss/view/colorizers.rb +28 -4
- data/lib/rboss.rb +4 -4
- metadata +4 -3
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
|
-
:
|
146
|
-
|
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
|
-
@
|
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, '
|
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
|
-
@
|
108
|
+
@resources[name] = resources
|
93
109
|
end
|
94
110
|
else
|
95
111
|
opts.on("--#{name}", config[:description]) do
|
96
|
-
@
|
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
|
-
@
|
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 @
|
150
|
+
puts opts if @resources.empty?
|
135
151
|
|
136
152
|
def execute_actions
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|
77
|
+
def invoke(operation, resources, parameters)
|
72
78
|
buff = ""
|
73
|
-
|
79
|
+
resources.each do |key, resource_names|
|
74
80
|
if resource_mappings.has_key? key
|
75
81
|
mapping = resource_mappings[key]
|
76
|
-
|
77
|
-
|
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
|
-
description:
|
2
|
+
description: Datasource Information
|
3
3
|
path: /subsystem=datasources/data-source=${NAME}
|
4
|
-
scan: ls
|
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
|
-
|
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
|
-
|
79
|
+
path: ${PATH}/statistics=jdbc
|
80
80
|
properties:
|
81
81
|
- PreparedStatementCacheCurrentSize
|
82
82
|
- PreparedStatementCacheAccessCount
|
@@ -4,7 +4,7 @@ path: /core-service=
|
|
4
4
|
print:
|
5
5
|
- id: platform
|
6
6
|
title: Operating System Information
|
7
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
174
|
+
path: ${PATH}server-environment
|
166
175
|
layout: vertical
|
167
176
|
properties:
|
168
177
|
- server-name
|
data/lib/rboss/cli/mappings.rb
CHANGED
@@ -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
|
data/lib/rboss/cli/resource.rb
CHANGED
@@ -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
|
40
|
-
if
|
41
|
-
|
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
|
-
|
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
|
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}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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
|
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
|
-
|
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 =
|
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
|
data/lib/rboss/twiddle/mbean.rb
CHANGED
@@ -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(
|
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
|
-
|
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
@@ -4,14 +4,38 @@ module RBoss
|
|
4
4
|
module Colorizers
|
5
5
|
|
6
6
|
def self.boolean params = {}
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
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.
|
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-
|
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/
|
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
|