rboss 0.5.6 → 0.6.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.
Files changed (53) hide show
  1. data/Gemfile +1 -1
  2. data/bin/jboss-profile +5 -1
  3. data/bin/rboss-cli +142 -0
  4. data/bin/twiddle +7 -3
  5. data/lib/rboss.rb +2 -1
  6. data/lib/rboss/bin/command_actions.rb +6 -7
  7. data/lib/rboss/cli.rb +22 -0
  8. data/lib/rboss/cli/colorizers.rb +22 -0
  9. data/lib/rboss/cli/formatters.rb +17 -0
  10. data/lib/rboss/cli/health_checkers.rb +43 -0
  11. data/lib/rboss/cli/jboss_cli.rb +93 -0
  12. data/lib/rboss/{table_builder.rb → cli/mappings.rb} +32 -47
  13. data/lib/rboss/cli/mappings/resources/connector.yaml +75 -0
  14. data/lib/rboss/cli/mappings/resources/datasource.yaml +113 -0
  15. data/lib/rboss/cli/mappings/resources/jdbc_driver.yaml +13 -0
  16. data/lib/rboss/cli/mappings/resources/server.yaml +74 -0
  17. data/lib/rboss/cli/resource.rb +112 -0
  18. data/lib/rboss/component_processor.rb +1 -1
  19. data/lib/rboss/components/component.rb +1 -1
  20. data/lib/rboss/components/datasource.rb +1 -1
  21. data/lib/rboss/components/deploy_folder.rb +1 -1
  22. data/lib/rboss/components/hypersonic_replacer.rb +1 -1
  23. data/lib/rboss/components/jbossweb.rb +1 -1
  24. data/lib/rboss/components/jmx.rb +1 -1
  25. data/lib/rboss/components/mod_cluster.rb +1 -1
  26. data/lib/rboss/components/org/6.0/deploy_folder.rb +1 -1
  27. data/lib/rboss/components/org/jmx.rb +1 -1
  28. data/lib/rboss/components/profile_folder.rb +1 -1
  29. data/lib/rboss/components/resource.rb +1 -1
  30. data/lib/rboss/components/restore_slimming.rb +1 -1
  31. data/lib/rboss/components/run_conf.rb +1 -1
  32. data/lib/rboss/components/service_script.rb +1 -1
  33. data/lib/rboss/components/slimming.rb +1 -1
  34. data/lib/rboss/components/soa-p/hypersonic_replacer.rb +1 -1
  35. data/lib/rboss/components/soa-p/jmx.rb +1 -1
  36. data/lib/rboss/components/xadatasource.rb +1 -1
  37. data/lib/rboss/file_processor.rb +1 -1
  38. data/lib/rboss/jboss_path.rb +1 -1
  39. data/lib/rboss/jboss_profile.rb +1 -1
  40. data/lib/rboss/twiddle.rb +1 -1
  41. data/lib/rboss/twiddle/base_monitor.rb +1 -1
  42. data/lib/rboss/twiddle/mbean.rb +1 -1
  43. data/lib/rboss/twiddle/monitor.rb +57 -39
  44. data/lib/rboss/twiddle/twiddle.rb +1 -1
  45. data/lib/rboss/utils.rb +80 -1
  46. data/lib/rboss/version.rb +2 -2
  47. data/test/datasource_test.rb +1 -1
  48. data/test/deploy_folder_test.rb +1 -1
  49. data/test/jbossweb_test.rb +1 -1
  50. data/test/mbean_test.rb +1 -1
  51. data/test/test_helper.rb +1 -1
  52. data/test/test_suite.rb +1 -1
  53. metadata +16 -4
@@ -1,6 +1,6 @@
1
1
  # The MIT License
2
2
  #
3
- # Copyright (c) 2011 Marcelo Guimarães <ataxexe@gmail.com>
3
+ # Copyright (c) 2011-2012 Marcelo Guimarães <ataxexe@gmail.com>
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the "Software"), to deal
@@ -20,60 +20,45 @@
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 'yummi'
23
+ require 'yaml'
24
24
 
25
- class TableBuilder
25
+ module JBoss
26
+ module Cli
27
+ module Mappings
26
28
 
27
- def initialize params = {}
28
- @params = params
29
- @table = Yummi::Table::new
30
- @table.title = params[:description]
31
- @table.header = params[:header]
32
- if params[:layout] == :vertical
33
- @table.layout = :vertical
34
- @table.default_align = :left
35
- end
36
- if params[:health]
37
- @table.row_colorizer HealthColorizer::new params[:health]
38
- end
39
- if params[:byte_formatter]
40
- params[:byte_formatter].each do |column|
41
- @table.format column, :using => Yummi::Formatters::byte
29
+ def resource_mappings
30
+ @resource_mappings ||= {}
31
+ load_default_resources if @resource_mappings.empty?
32
+ @resource_mappings
42
33
  end
43
- end
44
- end
45
34
 
46
- def no_details
47
- @table.header = @params[:header][0]
48
- end
49
-
50
- def data= data
51
- @table.data = data
52
- end
53
-
54
- def table
55
- @table
56
- end
57
-
58
- end
35
+ def load_resource(file)
36
+ name = File.basename(file, '.yaml').gsub('_', '-')
37
+ mapping = YAML::load_file(file).symbolize_keys
38
+ @resource_mappings[name.to_sym] = mapping
39
+ end
59
40
 
60
- class HealthColorizer
41
+ def load_resources(dir)
42
+ resource_files = Dir.entries(dir).find_all { |f| f.end_with?('.yaml') }
43
+ resource_files.each do |file|
44
+ load_resource File.join(dir, file)
45
+ end
46
+ end
61
47
 
62
- def initialize params
63
- @max = params[:max]
64
- @free = params[:free]
65
- @using = params[:using]
66
- end
48
+ def load_default_resources
49
+ load_resources File.join(File.dirname(__FILE__), 'mappings/resources')
50
+ file = File.expand_path("~/.rboss/rboss-cli/resources")
51
+ if File.exist? file
52
+ load_resources file
53
+ end
54
+ end
67
55
 
68
- def call data, index
69
- max = data[@max].to_f
70
- free = @using ? max - data[@using].to_f : data[@free].to_f
56
+ module_function :load_resources,
57
+ :load_resource,
58
+ :resource_mappings,
59
+ :load_default_resources
71
60
 
72
- percentage = free / max
61
+ end
73
62
 
74
- return :red if percentage <= 0.15
75
- return :brown if percentage <= 0.30
76
- :green
77
63
  end
78
-
79
64
  end
@@ -0,0 +1,75 @@
1
+ ---
2
+ description: Details Connectors
3
+ path: /subsystem=web/connector=${NAME}
4
+ scan: ls ${PATH}
5
+ print:
6
+ - title: Connectors
7
+ command: ${PATH}:read-resource(include-runtime=true)
8
+ layout: vertical
9
+ properties:
10
+ - scheme
11
+ - socket-binding
12
+ - protocol
13
+ - bytesReceived
14
+ - bytesSent
15
+ - secure
16
+ - processingTime
17
+ - requestCount
18
+ - errorCount
19
+ - max-connections
20
+ - max-post-size
21
+ - max-save-post-size
22
+ - enabled
23
+
24
+ header:
25
+ - Scheme
26
+ - Socket
27
+ - Protocol
28
+ - Bytes Received
29
+ - Bytes Sent
30
+ - Secure
31
+ - Processing
32
+ - Requests
33
+ - Errors
34
+ - Max Connnections
35
+ - Max Post Size
36
+ - Max Save Post Size
37
+ - Enabled
38
+
39
+ format:
40
+ - column: bytes_received
41
+ component: byte
42
+
43
+ - column: bytes_sent
44
+ component: byte
45
+
46
+ - column: max_post_size
47
+ component: byte
48
+
49
+ - column: max_save_post_size
50
+ component: byte
51
+
52
+ - column: enabled
53
+ component: yes_or_no
54
+
55
+ - column: secure
56
+ component: yes_or_no
57
+
58
+ color:
59
+ - column: scheme
60
+ component: with
61
+ params:
62
+ color: purple
63
+
64
+ - column: enabled
65
+ component: boolean
66
+ params:
67
+ if_true: green
68
+ if_false: red
69
+
70
+ - column: secure
71
+ component: boolean
72
+ params:
73
+ if_true: green
74
+ if_false: brown
75
+
@@ -0,0 +1,113 @@
1
+ ---
2
+ description: Detail Datasource Information
3
+ path: /subsystem=datasources/data-source=${NAME}
4
+ scan: ls ${PATH}
5
+ print:
6
+ - title: Datasource Details
7
+ command: ${PATH}:read-resource(include-runtime=true)
8
+ layout: vertical
9
+ properties:
10
+ - jndi-name
11
+ - connection-url
12
+ - driver-name
13
+ - user-name
14
+ - password
15
+ - jta
16
+ - min-pool-size
17
+ - max-pool-size
18
+ - enabled
19
+ header:
20
+ - JNDI Name
21
+ - Connection URL
22
+ - Driver Name
23
+ - User Name
24
+ - Password
25
+ - Using JTA
26
+ - Min Pool Size
27
+ - Max Pool Size
28
+ - Enabled
29
+ format:
30
+ - column: enabled
31
+ component: yes_or_no
32
+
33
+ - column: using_jta
34
+ component: yes_or_no
35
+
36
+ color:
37
+ - column: jndi_name
38
+ component: with
39
+ params:
40
+ color: purple
41
+
42
+ - column: enabled
43
+ component: boolean
44
+ params:
45
+ if_true: green
46
+ if_false: red
47
+
48
+ - title: Datasource Pool Statistics
49
+ command: ${PATH}/statistics=pool:read-resource(include-runtime=true)
50
+ layout: vertical
51
+ properties:
52
+ - ActiveCount
53
+ - AvailableCount
54
+ - AverageBlockingTime
55
+ - AverageCreationTime
56
+ - CreatedCount
57
+ - DestroyedCount
58
+ - MaxCreationTime
59
+ - MaxUsedCount
60
+ - MaxWaitTime
61
+ - TimedOut
62
+ - TotalBlockingTime
63
+ - TotalCreationTime
64
+
65
+ header:
66
+ - Active
67
+ - Available
68
+ - Average Blocking
69
+ - Average Creation
70
+ - Created
71
+ - Destroyed
72
+ - Max Creation
73
+ - Max Wait
74
+ - Timed Out
75
+ - Total Blocking
76
+ - Total Creation
77
+
78
+ health:
79
+ - column: active
80
+ component: percentage
81
+ params:
82
+ max: available
83
+ using: active
84
+
85
+ - title: Datasource JDBC Statistics
86
+ command: ${PATH}/statistics=jdbc:read-resource(include-runtime=true)
87
+ properties:
88
+ - PreparedStatementCacheCurrentSize
89
+ - PreparedStatementCacheAccessCount
90
+ - PreparedStatementCacheAddCount
91
+ - PreparedStatementCacheDeleteCount
92
+ - PreparedStatementCacheHitCount
93
+ - PreparedStatementCacheMissCount
94
+ header:
95
+ - Current
96
+
97
+ Size
98
+ - Access
99
+
100
+ Count
101
+
102
+ - Add
103
+
104
+ Count
105
+ - Delete
106
+
107
+ Count
108
+ - Hit
109
+
110
+ Count
111
+ - Miss
112
+
113
+ Count
@@ -0,0 +1,13 @@
1
+ ---
2
+ description: Detail JDBC Drivers
3
+ path: /subsystem=datasources/jdbc-driver=${NAME}
4
+ scan: ls ${PATH}
5
+ print:
6
+ - title: JDBC Drivers
7
+ command: ${PATH}:read-resource
8
+ properties:
9
+ - driver-module-name
10
+ - driver-xa-datasource-class-name
11
+ header:
12
+ - Module Name
13
+ - XA Datasource Class
@@ -0,0 +1,74 @@
1
+ ---
2
+ description: Detail Server Information
3
+ path:
4
+ print:
5
+ - title: Server Runtime Information
6
+ command: /core-service=server-environment:read-resource(include-runtime=true)
7
+ properties:
8
+ - server-name
9
+ - node-name
10
+ - host-name
11
+ - initial-running-mode
12
+ - launch-type
13
+ header:
14
+ - Server Name
15
+ - Node Name
16
+ - Host Name
17
+ - Initial Running Mode
18
+ - Launch Type
19
+ color:
20
+ - column: server_name
21
+ component: with
22
+ params:
23
+ color: white
24
+
25
+ - column: node_name
26
+ component: with
27
+ params:
28
+ color: blue
29
+
30
+ - column: host_name
31
+ component: with
32
+ params:
33
+ color: brown
34
+
35
+ - column: initial_running_mode
36
+ component: with
37
+ params:
38
+ color: purple
39
+
40
+ - column: launch_type
41
+ component: with
42
+ params:
43
+ color: cyan
44
+
45
+ - title: Server Configuration Resources
46
+ command: /core-service=server-environment:read-resource(include-runtime=true)
47
+ layout: vertical
48
+ properties:
49
+ - server-name
50
+ - home-dir
51
+ - base-dir
52
+ - config-dir
53
+ - config-file
54
+ - data-dir
55
+ - deploy-dir
56
+ - modules-dir
57
+ - log-dir
58
+ - temp-dir
59
+ header:
60
+ - Server Name
61
+ - Home Directory
62
+ - Base Directory
63
+ - Config Directory
64
+ - Config File
65
+ - Data Directory
66
+ - Deploy Directory
67
+ - Modules Directory
68
+ - Log Directory
69
+ - Temp Directory
70
+ color:
71
+ - column: server_name
72
+ component: with
73
+ params:
74
+ color: white
@@ -0,0 +1,112 @@
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
+ require_relative 'formatters'
24
+ require_relative 'colorizers'
25
+ require_relative 'health_checkers'
26
+
27
+ module JBoss
28
+ module Cli
29
+ class Resource
30
+
31
+ def initialize(invoker, config)
32
+ @config = config
33
+ @invoker = invoker
34
+ @context = {
35
+ :name => ''
36
+ }
37
+ @context[:path] = parse(@config[:path])
38
+ @tables = []
39
+ @count = 0
40
+ end
41
+
42
+ def content(resources)
43
+ if :all == resources
44
+ resources = scan
45
+ end
46
+ resources = [resources] unless resources.is_a? Array
47
+ params = @config[:print]
48
+ params.each do |p|
49
+ table_builder = TableBuilder::new p
50
+ table_builder.add_name_column if scannable?
51
+ @tables << table_builder.build_table
52
+ end
53
+ resources.each do |resource|
54
+ @context[:name] = resource
55
+ @context[:path] = parse(@config[:path])
56
+
57
+ params.each do |p|
58
+ add_row(p)
59
+ end
60
+ end
61
+ result = ""
62
+ @tables.each do |table|
63
+ result << table.to_s
64
+ end
65
+ result
66
+ end
67
+
68
+ def add_row(params)
69
+ data = get_data(params)
70
+ return unless data
71
+ data = [@context[:name]] + data if scannable?
72
+ @tables[@count % @tables.size].data << data
73
+ @count += 1
74
+ end
75
+
76
+ def parse(value)
77
+ return nil unless value
78
+ result = value.scan /\$\{\w+\}/
79
+ result.each do |matched|
80
+ key = matched[2...-1].downcase.to_sym
81
+ value = value.gsub(matched, @context[key])
82
+ end
83
+ value
84
+ end
85
+
86
+ def scan
87
+ result = @invoker.execute(parse @config[:scan])
88
+ result.split "\n"
89
+ end
90
+
91
+ def scannable?
92
+ @config[:scan]
93
+ end
94
+
95
+ def get_data(config)
96
+ result = @invoker.execute(parse config[:command])
97
+ result = eval_result(result)
98
+ data = []
99
+ config[:properties].each do |prop|
100
+ data << result["result"][prop]
101
+ end
102
+ data
103
+ end
104
+
105
+ def eval_result(result)
106
+ undefined = nil #prevents error because undefined means nil in result object
107
+ eval(result)
108
+ end
109
+
110
+ end
111
+ end
112
+ end