kpm 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/kpm.rb +1 -0
- data/lib/kpm/formatter.rb +17 -14
- data/lib/kpm/plugins_directory.yml +2 -2
- data/lib/kpm/system.rb +344 -0
- data/lib/kpm/tasks.rb +28 -0
- data/lib/kpm/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d38b77f40a5cdb50c139255664892b3f463a44bf
|
4
|
+
data.tar.gz: 41019b6c0119626701a6a89823237585d7588bf6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0457be8ee32667355291e3b936ec9aeeaba943480a6006a5fe12f7cf7175d6445ca3663b8a4435b8cbabf0b9205f8ce8949f4dd5d535f8b64254e5cae04b4f4
|
7
|
+
data.tar.gz: 0a14351c90df0618a2013a1a12b43001b4e483228a5af3e7f8fb098028b30914081e13077c9db4c5e497ca0bd4d6e7b3a83b04759fd2b140d23882c188ea93b1
|
data/lib/kpm.rb
CHANGED
data/lib/kpm/formatter.rb
CHANGED
@@ -62,24 +62,27 @@ module KPM
|
|
62
62
|
end
|
63
63
|
|
64
64
|
|
65
|
-
def format(
|
66
|
-
if
|
65
|
+
def format(data, labels = nil)
|
66
|
+
if data.nil? || data.size == 0
|
67
67
|
return
|
68
68
|
end
|
69
69
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
70
|
+
if labels.nil?
|
71
|
+
|
72
|
+
# What we want to output
|
73
|
+
labels = [{:label => :plugin_name},
|
74
|
+
{:label => :plugin_key},
|
75
|
+
{:label => :type},
|
76
|
+
{:label => :group_id},
|
77
|
+
{:label => :artifact_id},
|
78
|
+
{:label => :packaging},
|
79
|
+
{:label => :versions, :formatter => VersionFormatter.name}]
|
80
|
+
end
|
78
81
|
|
79
82
|
# Compute label to print along with max size for each label
|
80
83
|
labels_format_argument = []
|
81
|
-
|
82
|
-
v =
|
84
|
+
data.keys.each do |key|
|
85
|
+
v = data[key]
|
83
86
|
labels.each do |e|
|
84
87
|
# sanitize entry at the same time
|
85
88
|
v[e[:label]] = v[e[:label]] || "???"
|
@@ -106,8 +109,8 @@ module KPM
|
|
106
109
|
puts "#{format}\n" % labels_format_argument
|
107
110
|
puts "#{border}\n"
|
108
111
|
|
109
|
-
|
110
|
-
v =
|
112
|
+
data.keys.each do |key|
|
113
|
+
v = data[key]
|
111
114
|
|
112
115
|
arguments = []
|
113
116
|
labels.inject(arguments) do |res, e|
|
@@ -157,7 +157,7 @@
|
|
157
157
|
:versions:
|
158
158
|
:0.16: 0.0.1
|
159
159
|
:0.17: 0.1.0
|
160
|
-
:0.18: 0.2.
|
160
|
+
:0.18: 0.2.1
|
161
161
|
:paypal:
|
162
162
|
:type: :ruby
|
163
163
|
:artifact_id: paypal-express-plugin
|
@@ -165,7 +165,7 @@
|
|
165
165
|
:0.14: 2.0.0
|
166
166
|
:0.15: 3.0.0
|
167
167
|
:0.16: 4.1.7
|
168
|
-
:0.18: 5.0.
|
168
|
+
:0.18: 5.0.3
|
169
169
|
:require:
|
170
170
|
- :signature
|
171
171
|
- :login
|
data/lib/kpm/system.rb
ADDED
@@ -0,0 +1,344 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module KPM
|
4
|
+
|
5
|
+
module OS
|
6
|
+
def OS.windows?
|
7
|
+
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RbConfig::CONFIG["host_os"]) != nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def OS.mac?
|
11
|
+
(/darwin/ =~ RbConfig::CONFIG["host_os"]) != nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def OS.unix?
|
15
|
+
!OS.windows?
|
16
|
+
end
|
17
|
+
|
18
|
+
def OS.linux?
|
19
|
+
OS.unix? and not OS.mac?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class System
|
24
|
+
|
25
|
+
MAX_VALUE_COLUMN_WIDTH = 60
|
26
|
+
DEFAULT_BUNDLE_DIR = Dir['/var' + File::SEPARATOR + 'lib' + File::SEPARATOR + 'killbill' + File::SEPARATOR + 'bundles'][0] || Dir['/var' + File::SEPARATOR + 'tmp' + File::SEPARATOR + 'bundles'][0]
|
27
|
+
DEFAULT_KAUI_SEARCH_BASE_DIR = '**' + File::SEPARATOR + 'kaui'
|
28
|
+
DEFAULT_KILLBILL_SEARCH_BASE_DIR = '**' + File::SEPARATOR + 'ROOT'
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@formatter = KPM::Formatter.new
|
32
|
+
end
|
33
|
+
|
34
|
+
def information(bundles_dir = nil, output_as_json = false, config_file = nil, kaui_web_path = nil, killbill_web_path = nil)
|
35
|
+
puts 'Retrieving system information'
|
36
|
+
set_config(config_file)
|
37
|
+
killbill_information = show_killbill_information(kaui_web_path,killbill_web_path,output_as_json)
|
38
|
+
|
39
|
+
java_version = `java -version 2>&1`.split("\n")[0].split('"')[1]
|
40
|
+
|
41
|
+
environment_information = show_environment_information(java_version, output_as_json)
|
42
|
+
os_information = show_os_information(output_as_json)
|
43
|
+
|
44
|
+
if not java_version.nil?
|
45
|
+
command = get_command
|
46
|
+
java_system_information = show_java_system_information(command,output_as_json)
|
47
|
+
end
|
48
|
+
|
49
|
+
plugin_information = show_plugin_information(get_plugin_path || bundles_dir || DEFAULT_BUNDLE_DIR, output_as_json)
|
50
|
+
|
51
|
+
if output_as_json
|
52
|
+
json_data = Hash.new
|
53
|
+
json_data[:killbill_information] = killbill_information
|
54
|
+
json_data[:environment_information] = environment_information
|
55
|
+
json_data[:os_information] = os_information
|
56
|
+
json_data[:java_system_information] = java_system_information
|
57
|
+
json_data[:plugin_information] = plugin_information
|
58
|
+
|
59
|
+
puts json_data.to_json
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def show_killbill_information(kaui_web_path, killbill_web_path, output_as_json)
|
64
|
+
|
65
|
+
kpm_version = KPM::VERSION
|
66
|
+
kaui_version = get_kaui_version(get_kaui_web_path || kaui_web_path)
|
67
|
+
killbill_version = get_killbill_version(get_killbill_web_path || killbill_web_path)
|
68
|
+
|
69
|
+
environment = Hash[:kpm => {:system=>'KPM',:version => kpm_version},
|
70
|
+
:kaui => {:system=>'Kaui',:version => kaui_version.nil? ? 'not found' : kaui_version},
|
71
|
+
:killbill => {:system=>'Killbill',:version => killbill_version.nil? ? 'not found' : killbill_version}]
|
72
|
+
|
73
|
+
labels = [{:label => :system},
|
74
|
+
{:label => :version}]
|
75
|
+
|
76
|
+
if not output_as_json
|
77
|
+
@formatter.format(environment,labels)
|
78
|
+
end
|
79
|
+
|
80
|
+
environment
|
81
|
+
end
|
82
|
+
|
83
|
+
def show_environment_information(java_version, output_as_json)
|
84
|
+
|
85
|
+
environment = Hash[:ruby => {:environment=>'Ruby',:version => RUBY_VERSION},
|
86
|
+
:java => {:environment=>'Java',:version => java_version.nil? ? 'no version found' : java_version}]
|
87
|
+
|
88
|
+
labels = [{:label => :environment},
|
89
|
+
{:label => :version}]
|
90
|
+
|
91
|
+
if not output_as_json
|
92
|
+
@formatter.format(environment,labels)
|
93
|
+
end
|
94
|
+
|
95
|
+
environment
|
96
|
+
end
|
97
|
+
|
98
|
+
def show_os_information(output_as_json)
|
99
|
+
os = Hash.new
|
100
|
+
os_data = nil
|
101
|
+
|
102
|
+
if OS.windows?
|
103
|
+
os_data = `systeminfo | findstr /C:"OS"`
|
104
|
+
|
105
|
+
elsif OS.linux?
|
106
|
+
os_data = `lsb_release -a 2>&1`
|
107
|
+
|
108
|
+
elsif OS.mac?
|
109
|
+
os_data = `sw_vers`
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
if os_data != nil
|
114
|
+
os_data.split("\n").each do |info|
|
115
|
+
|
116
|
+
infos = info.split(':')
|
117
|
+
os[infos[0]] = {:os_detail => infos[0], :value => infos[1].to_s.strip}
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
labels = [{:label => :os_detail},
|
123
|
+
{:label => :value}]
|
124
|
+
|
125
|
+
if not output_as_json
|
126
|
+
@formatter.format(os,labels)
|
127
|
+
end
|
128
|
+
|
129
|
+
os
|
130
|
+
end
|
131
|
+
|
132
|
+
def show_java_system_information(command, output_as_json)
|
133
|
+
java_system = Hash.new
|
134
|
+
property_count = 0;
|
135
|
+
last_key = ''
|
136
|
+
|
137
|
+
`#{command}`.split("\n").each do |prop|
|
138
|
+
|
139
|
+
if prop.to_s.strip.empty?
|
140
|
+
break;
|
141
|
+
end
|
142
|
+
|
143
|
+
if property_count > 0
|
144
|
+
props = prop.split('=')
|
145
|
+
|
146
|
+
if (not props[1].nil? && props[1].to_s.strip.size > MAX_VALUE_COLUMN_WIDTH) && output_as_json == false
|
147
|
+
|
148
|
+
chunks = ".{1,#{MAX_VALUE_COLUMN_WIDTH}}"
|
149
|
+
props[1].to_s.scan(/#{chunks}/).each_with_index do |p, index|
|
150
|
+
|
151
|
+
java_system[property_count] = {:java_property => index.equal?(0) ? props[0] : '', :value => p}
|
152
|
+
property_count += 1
|
153
|
+
|
154
|
+
end
|
155
|
+
elsif output_as_json
|
156
|
+
key = (props[1].nil? ? last_key : props[0]).to_s.strip
|
157
|
+
value = props[1].nil? ? props[0] : props[1]
|
158
|
+
|
159
|
+
if java_system.has_key?(key)
|
160
|
+
java_system[key][:value] = java_system[key][:value].to_s.concat(' ').concat(value)
|
161
|
+
else
|
162
|
+
java_system[key] = {:java_property => key, :value => value}
|
163
|
+
end
|
164
|
+
|
165
|
+
else
|
166
|
+
|
167
|
+
java_system[property_count] = {:java_property => props[1].nil? ? '' : props[0], :value => props[1].nil? ? props[0] : props[1]}
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
last_key = props[1].nil? ? last_key : props[0]
|
172
|
+
end
|
173
|
+
|
174
|
+
property_count += 1
|
175
|
+
|
176
|
+
end
|
177
|
+
labels = [{:label => :java_property},
|
178
|
+
{:label => :value}]
|
179
|
+
|
180
|
+
|
181
|
+
if not output_as_json
|
182
|
+
@formatter.format(java_system,labels)
|
183
|
+
end
|
184
|
+
|
185
|
+
java_system
|
186
|
+
|
187
|
+
end
|
188
|
+
|
189
|
+
def show_plugin_information(bundles_dir, output_as_json)
|
190
|
+
|
191
|
+
if bundles_dir.nil?
|
192
|
+
all_plugins = nil
|
193
|
+
else
|
194
|
+
inspector = KPM::Inspector.new
|
195
|
+
all_plugins = inspector.inspect(bundles_dir)
|
196
|
+
end
|
197
|
+
|
198
|
+
if not output_as_json
|
199
|
+
if all_plugins.nil? || all_plugins.size == 0
|
200
|
+
puts "\e[91;1mNo KB plugin information available\e[0m\n\n"
|
201
|
+
else
|
202
|
+
@formatter.format(all_plugins)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
if output_as_json && (all_plugins.nil? || all_plugins.size == 0)
|
207
|
+
all_plugins = 'No KB plugin information available'
|
208
|
+
end
|
209
|
+
all_plugins
|
210
|
+
end
|
211
|
+
|
212
|
+
def get_kaui_version(kaui_web_path = nil)
|
213
|
+
puts kaui_web_path
|
214
|
+
kaui_search_default_dir = Dir[kaui_web_path.nil? ? '' : kaui_web_path][0] || DEFAULT_KAUI_SEARCH_BASE_DIR
|
215
|
+
version = nil
|
216
|
+
|
217
|
+
gemfile = Dir[kaui_search_default_dir + File::SEPARATOR + 'WEB-INF' + File::SEPARATOR + 'Gemfile']
|
218
|
+
|
219
|
+
if not gemfile[0].nil?
|
220
|
+
absolute_gemfile_path = File.absolute_path(gemfile[0])
|
221
|
+
|
222
|
+
version = open(absolute_gemfile_path) do |f|
|
223
|
+
f.each_line.detect do |line|
|
224
|
+
if /kaui/.match(line)
|
225
|
+
version = /(\d+)\.(\d+)\.(\d+)/.match(line)
|
226
|
+
|
227
|
+
if not version.nil?
|
228
|
+
break;
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
version
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
|
237
|
+
version
|
238
|
+
end
|
239
|
+
|
240
|
+
def get_killbill_version(killbill_web_path = nil)
|
241
|
+
killbill_search_default_dir = Dir[killbill_web_path.nil? ? '' : killbill_web_path][0] || DEFAULT_KILLBILL_SEARCH_BASE_DIR
|
242
|
+
|
243
|
+
file = Dir[killbill_search_default_dir + File::SEPARATOR + 'META-INF' + File::SEPARATOR + '**' + File::SEPARATOR + 'pom.properties']
|
244
|
+
version = nil
|
245
|
+
if not file[0].nil?
|
246
|
+
absolute_file_path = File.absolute_path(file[0])
|
247
|
+
|
248
|
+
version = open(absolute_file_path) do |f|
|
249
|
+
f.each_line.detect do |line|
|
250
|
+
version = /(\d+)\.(\d+)\.(\d+)/.match(line)
|
251
|
+
|
252
|
+
if not version.nil?
|
253
|
+
break;
|
254
|
+
end
|
255
|
+
end
|
256
|
+
version
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
version
|
262
|
+
end
|
263
|
+
|
264
|
+
def get_command
|
265
|
+
command = 'java -XshowSettings:properties -version 2>&1'
|
266
|
+
apache_tomcat_pid = get_apache_tomcat_pid
|
267
|
+
|
268
|
+
if not apache_tomcat_pid.nil?
|
269
|
+
command = "jcmd #{apache_tomcat_pid} VM.system_properties"
|
270
|
+
end
|
271
|
+
|
272
|
+
command
|
273
|
+
end
|
274
|
+
|
275
|
+
def get_apache_tomcat_pid
|
276
|
+
apache_tomcat_pid = nil;
|
277
|
+
`jcmd -l 2>&1`.split("\n").each do |line|
|
278
|
+
|
279
|
+
if /org.apache.catalina/.match(line)
|
280
|
+
words = line.split(' ')
|
281
|
+
apache_tomcat_pid = words[0]
|
282
|
+
end
|
283
|
+
|
284
|
+
end
|
285
|
+
|
286
|
+
apache_tomcat_pid
|
287
|
+
end
|
288
|
+
|
289
|
+
def set_config(config_file = nil)
|
290
|
+
@config = nil
|
291
|
+
|
292
|
+
if not config_file.nil?
|
293
|
+
if not Dir[config_file][0].nil?
|
294
|
+
@config = YAML::load_file(config_file)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
def get_kaui_web_path
|
301
|
+
kaui_web_path = nil;
|
302
|
+
|
303
|
+
if not @config.nil?
|
304
|
+
config_kaui = @config['kaui']
|
305
|
+
|
306
|
+
if not config_kaui.nil?
|
307
|
+
kaui_web_path = Dir[config_kaui['webapp_path']][0]
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
kaui_web_path
|
312
|
+
end
|
313
|
+
|
314
|
+
def get_killbill_web_path
|
315
|
+
killbill_web_path = nil;
|
316
|
+
|
317
|
+
if not @config.nil?
|
318
|
+
config_killbill = @config['killbill']
|
319
|
+
|
320
|
+
if not config_killbill.nil?
|
321
|
+
killbill_web_path = Dir[config_killbill['webapp_path']][0]
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
killbill_web_path
|
326
|
+
end
|
327
|
+
|
328
|
+
def get_plugin_path
|
329
|
+
plugin_path = nil;
|
330
|
+
|
331
|
+
if not @config.nil?
|
332
|
+
config_killbill = @config['killbill']
|
333
|
+
|
334
|
+
if not config_killbill.nil?
|
335
|
+
plugin_path = Dir[config_killbill['plugins_dir']][0]
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
plugin_path
|
340
|
+
end
|
341
|
+
|
342
|
+
end
|
343
|
+
|
344
|
+
end
|
data/lib/kpm/tasks.rb
CHANGED
@@ -399,11 +399,39 @@ module KPM
|
|
399
399
|
desc 'inspect', 'Inspect current deployment'
|
400
400
|
def inspect
|
401
401
|
inspector = KPM::Inspector.new
|
402
|
+
puts options[:destination]
|
402
403
|
all_plugins = inspector.inspect(options[:destination])
|
403
404
|
#puts all_plugins.to_json
|
404
405
|
inspector.format(all_plugins)
|
405
406
|
end
|
406
407
|
|
408
|
+
method_option :bundles_dir,
|
409
|
+
:type => :string,
|
410
|
+
:default => nil,
|
411
|
+
:desc => 'A different folder other than the default bundles directory.'
|
412
|
+
method_option :config_file,
|
413
|
+
:type => :string,
|
414
|
+
:default => nil,
|
415
|
+
:desc => 'KPM configuration file (yml file)'
|
416
|
+
method_option :as_json,
|
417
|
+
:type => :boolean,
|
418
|
+
:default => false,
|
419
|
+
:desc => 'Set the output format as JSON when true'
|
420
|
+
method_option :kaui_web_path,
|
421
|
+
:type => :string,
|
422
|
+
:default => nil,
|
423
|
+
:desc => 'Path for the KAUI web app'
|
424
|
+
method_option :killbill_web_path,
|
425
|
+
:type => :string,
|
426
|
+
:default => nil,
|
427
|
+
:desc => 'Path for the killbill web app'
|
428
|
+
desc 'system', 'Gather information about the system'
|
429
|
+
def system
|
430
|
+
system = KPM::System.new
|
431
|
+
system.information(options[:bundles_dir], options[:as_json], options[:config_file], options[:kaui_web_path],
|
432
|
+
options[:killbill_web_path])
|
433
|
+
end
|
434
|
+
|
407
435
|
map :pull_ruby_plugin => :install_ruby_plugin,
|
408
436
|
:pull_java_plugin => :install_java_plugin
|
409
437
|
|
data/lib/kpm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kpm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kill Bill core team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/kpm/plugins_directory.yml
|
132
132
|
- lib/kpm/plugins_manager.rb
|
133
133
|
- lib/kpm/sha1_checker.rb
|
134
|
+
- lib/kpm/system.rb
|
134
135
|
- lib/kpm/tasks.rb
|
135
136
|
- lib/kpm/tomcat_manager.rb
|
136
137
|
- lib/kpm/uninstaller.rb
|