kpm 0.5.3 → 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.
- checksums.yaml +4 -4
- data/kpm.gemspec +0 -1
- data/lib/kpm.rb +4 -1
- data/lib/kpm/base_artifact.rb +24 -8
- data/lib/kpm/base_installer.rb +35 -3
- data/lib/kpm/diagnostic_file.rb +187 -0
- data/lib/kpm/installer.rb +10 -3
- data/lib/kpm/kaui_artifact.rb +1 -1
- data/lib/kpm/killbill_plugin_artifact.rb +1 -1
- data/lib/kpm/killbill_server_artifact.rb +1 -1
- data/lib/kpm/nexus_helper/actions.rb +34 -0
- data/lib/kpm/nexus_helper/nexus_api_calls_v2.rb +188 -0
- data/lib/kpm/nexus_helper/nexus_facade.rb +20 -0
- data/lib/kpm/plugins_directory.yml +6 -1
- data/lib/kpm/system.rb +80 -53
- data/lib/kpm/system_helpers/cpu_information.rb +72 -0
- data/lib/kpm/system_helpers/disk_space_information.rb +84 -0
- data/lib/kpm/system_helpers/entropy_available.rb +52 -0
- data/lib/kpm/system_helpers/memory_information.rb +71 -0
- data/lib/kpm/system_helpers/os_information.rb +66 -0
- data/lib/kpm/system_helpers/system_proxy.rb +28 -0
- data/lib/kpm/tasks.rb +101 -2
- data/lib/kpm/trace_logger.rb +70 -0
- data/lib/kpm/utils.rb +42 -0
- data/lib/kpm/version.rb +1 -1
- data/pom.xml +1 -1
- data/spec/kpm/remote/base_artifact_spec.rb +20 -0
- data/spec/kpm/remote/base_installer_spec.rb +15 -0
- data/spec/kpm/remote/installer_spec.rb +10 -2
- data/spec/kpm/remote/migrations_spec.rb +1 -1
- data/spec/kpm/remote/nexus_facade_spec.rb +60 -0
- data/spec/spec_helper.rb +1 -0
- metadata +14 -16
@@ -0,0 +1,72 @@
|
|
1
|
+
module KPM
|
2
|
+
module SystemProxy
|
3
|
+
module CpuInformation
|
4
|
+
class << self
|
5
|
+
def fetch
|
6
|
+
cpu_info = nil
|
7
|
+
if OS.windows?
|
8
|
+
cpu_info = fetch_windows
|
9
|
+
elsif OS.linux?
|
10
|
+
cpu_info = fetch_linux
|
11
|
+
elsif OS.mac?
|
12
|
+
cpu_info = fetch_mac
|
13
|
+
end
|
14
|
+
|
15
|
+
cpu_info
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_labels
|
19
|
+
labels = [{:label => :cpu_detail},
|
20
|
+
{:label => :value}]
|
21
|
+
labels
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def fetch_linux
|
26
|
+
cpu_data = `cat /proc/cpuinfo 2>&1`.gsub("\t",'')
|
27
|
+
cpu = get_hash(cpu_data)
|
28
|
+
cpu
|
29
|
+
end
|
30
|
+
|
31
|
+
def fetch_mac
|
32
|
+
cpu_data = `system_profiler SPHardwareDataType | grep -e "Processor" -e "Cores" -e "Cache" 2>&1`
|
33
|
+
cpu = get_hash(cpu_data)
|
34
|
+
cpu
|
35
|
+
end
|
36
|
+
|
37
|
+
def fetch_windows
|
38
|
+
cpu_name = `wmic cpu get Name`.split("\n\n")
|
39
|
+
cpu_caption = `wmic cpu get Caption`.split("\n\n")
|
40
|
+
cpu_max_clock_speed = `wmic cpu get MaxClockSpeed`.split("\n\n")
|
41
|
+
cpu_device_id = `wmic cpu get DeviceId`.split("\n\n")
|
42
|
+
cpu_status = `wmic cpu get Status`.split("\n\n")
|
43
|
+
|
44
|
+
cpu = Hash.new
|
45
|
+
cpu[cpu_name[0].to_s.strip] = {:cpu_detail => cpu_name[0].to_s.strip, :value => cpu_name[1].to_s.strip}
|
46
|
+
cpu[cpu_caption[0].to_s.strip] = {:cpu_detail => cpu_caption[0].to_s.strip, :value => cpu_caption[1].to_s.strip}
|
47
|
+
cpu[cpu_max_clock_speed[0].to_s.strip] = {:cpu_detail => cpu_max_clock_speed[0].to_s.strip, :value => cpu_max_clock_speed[1].to_s.strip}
|
48
|
+
cpu[cpu_device_id[0].to_s.strip] = {:cpu_detail => cpu_device_id[0].to_s.strip, :value => cpu_device_id[1].to_s.strip}
|
49
|
+
cpu[cpu_status[0].to_s.strip] = {:cpu_detail => cpu_status[0].to_s.strip, :value => cpu_status[1].to_s.strip}
|
50
|
+
|
51
|
+
cpu
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_hash(data)
|
55
|
+
cpu = Hash.new
|
56
|
+
|
57
|
+
unless data.nil?
|
58
|
+
data.split("\n").each do |info|
|
59
|
+
infos = info.split(':')
|
60
|
+
|
61
|
+
unless infos[0].to_s.strip.eql?('flags')
|
62
|
+
cpu[infos[0].to_s.strip] = {:cpu_detail => infos[0].to_s.strip, :value => infos[1].to_s.strip}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
cpu
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module KPM
|
2
|
+
module SystemProxy
|
3
|
+
module DiskSpaceInformation
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def fetch
|
7
|
+
disk_space_info = nil
|
8
|
+
if OS.windows?
|
9
|
+
disk_space_info = fetch_windows
|
10
|
+
elsif OS.linux?
|
11
|
+
disk_space_info = fetch_linux_mac(5)
|
12
|
+
elsif OS.mac?
|
13
|
+
disk_space_info = fetch_linux_mac(8)
|
14
|
+
end
|
15
|
+
|
16
|
+
disk_space_info
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_labels
|
20
|
+
labels = []
|
21
|
+
@@data_keys.each { |key| labels.push({:label => key.gsub(' ','_').to_sym})}
|
22
|
+
labels
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def fetch_linux_mac(cols_count)
|
27
|
+
disk_space_info = `df 2>&1`
|
28
|
+
disk_space = get_hash(disk_space_info,cols_count,true)
|
29
|
+
disk_space
|
30
|
+
end
|
31
|
+
|
32
|
+
def fetch_windows
|
33
|
+
disk_space_info = `wmic logicaldisk get size,freespace,caption 2>&1`
|
34
|
+
disk_space = get_hash(disk_space_info,3,false)
|
35
|
+
disk_space
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_hash(data, cols_count, merge_last_two_columns)
|
39
|
+
disk_space = Hash.new
|
40
|
+
|
41
|
+
unless data.nil?
|
42
|
+
|
43
|
+
data_table = data.split("\n")
|
44
|
+
|
45
|
+
@@data_keys = data_table[0].split(' ')
|
46
|
+
|
47
|
+
if merge_last_two_columns
|
48
|
+
@@data_keys[@@data_keys.length - 2] = @@data_keys[@@data_keys.length - 2] + ' ' + @@data_keys[@@data_keys.length - 1]
|
49
|
+
@@data_keys.delete_at(@@data_keys.length - 1)
|
50
|
+
end
|
51
|
+
|
52
|
+
row_num = 0
|
53
|
+
data_table.each do |row|
|
54
|
+
cols = row.split(' ')
|
55
|
+
row_num += 1
|
56
|
+
unless cols[0].to_s.eql?(@@data_keys[0])
|
57
|
+
key = 'DiskInfo_'+row_num.to_s
|
58
|
+
disk_space[key] = Hash.new
|
59
|
+
cols.each_index do |idx|
|
60
|
+
if idx > cols_count
|
61
|
+
break
|
62
|
+
end
|
63
|
+
|
64
|
+
value = cols[idx].to_s.strip
|
65
|
+
if idx == cols_count && cols.length - 1 > idx
|
66
|
+
for i in cols_count+1..cols.length
|
67
|
+
value += ' ' + cols[i].to_s.strip
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
disk_space[key][@@data_keys[idx].gsub(' ','_').to_sym] = value
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
disk_space
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module KPM
|
2
|
+
module SystemProxy
|
3
|
+
module EntropyAvailable
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def fetch
|
7
|
+
entropy_available = nil
|
8
|
+
if OS.windows?
|
9
|
+
entropy_available = fetch_windows
|
10
|
+
elsif OS.linux?
|
11
|
+
entropy_available = fetch_linux
|
12
|
+
elsif OS.mac?
|
13
|
+
entropy_available = fetch_mac
|
14
|
+
end
|
15
|
+
|
16
|
+
entropy_available
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_labels
|
20
|
+
labels = [{:label => :entropy},
|
21
|
+
{:label => :value}]
|
22
|
+
labels
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def fetch_linux
|
27
|
+
entropy_available_data = `cat /proc/sys/kernel/random/entropy_avail 2>&1`.gsub("\n",'')
|
28
|
+
entropy_available = get_hash(entropy_available_data)
|
29
|
+
entropy_available
|
30
|
+
end
|
31
|
+
|
32
|
+
def fetch_mac
|
33
|
+
entropy_available = get_hash('-')
|
34
|
+
entropy_available
|
35
|
+
end
|
36
|
+
|
37
|
+
def fetch_windows
|
38
|
+
entropy_available = get_hash('-')
|
39
|
+
entropy_available
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_hash(data)
|
43
|
+
entropy_available = Hash.new
|
44
|
+
entropy_available['entropy_available'] = {:entropy => 'available', :value => data}
|
45
|
+
|
46
|
+
entropy_available
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module KPM
|
2
|
+
module SystemProxy
|
3
|
+
module MemoryInformation
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def fetch
|
7
|
+
memory_info = nil
|
8
|
+
if OS.windows?
|
9
|
+
memory_info = fetch_windows
|
10
|
+
elsif OS.linux?
|
11
|
+
memory_info = fetch_linux
|
12
|
+
elsif OS.mac?
|
13
|
+
memory_info = fetch_mac
|
14
|
+
end
|
15
|
+
|
16
|
+
memory_info
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_labels
|
20
|
+
labels = [{:label => :memory_detail},
|
21
|
+
{:label => :value}]
|
22
|
+
labels
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def fetch_linux
|
27
|
+
mem_data = `cat /proc/meminfo 2>&1`.gsub("\t",'')
|
28
|
+
mem = get_hash(mem_data)
|
29
|
+
mem
|
30
|
+
end
|
31
|
+
|
32
|
+
def fetch_mac
|
33
|
+
mem_data = `vm_stat 2>&1`.gsub(".",'')
|
34
|
+
mem = get_hash(mem_data)
|
35
|
+
|
36
|
+
mem.each_key do |key|
|
37
|
+
mem[key][:value] = ((mem[key][:value].to_i * 4096) / 1024 / 1024).to_s + 'MB'
|
38
|
+
mem[key][:memory_detail] = mem[key][:memory_detail].gsub('Pages','Memory')
|
39
|
+
end
|
40
|
+
|
41
|
+
mem_total_data = `system_profiler SPHardwareDataType | grep " Memory:" 2>&1`
|
42
|
+
mem_total = get_hash(mem_total_data)
|
43
|
+
|
44
|
+
mem = mem_total.merge(mem)
|
45
|
+
|
46
|
+
mem
|
47
|
+
end
|
48
|
+
|
49
|
+
def fetch_windows
|
50
|
+
mem_data = `systeminfo | findstr /C:"Total Physical Memory" /C:"Available Physical Memory"`
|
51
|
+
mem = get_hash(mem_data)
|
52
|
+
mem
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_hash(data)
|
56
|
+
mem = Hash.new
|
57
|
+
|
58
|
+
unless data.nil?
|
59
|
+
data.split("\n").each do |info|
|
60
|
+
infos = info.split(':')
|
61
|
+
mem[infos[0].to_s.strip] = {:memory_detail => infos[0].to_s.strip, :value => infos[1].to_s.strip}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
mem
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module KPM
|
2
|
+
module SystemProxy
|
3
|
+
module OsInformation
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def fetch
|
7
|
+
os_information = nil
|
8
|
+
if OS.windows?
|
9
|
+
os_information = fetch_windows
|
10
|
+
elsif OS.linux?
|
11
|
+
os_information = fetch_linux
|
12
|
+
elsif OS.mac?
|
13
|
+
os_information = fetch_mac
|
14
|
+
end
|
15
|
+
|
16
|
+
os_information
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_labels
|
20
|
+
labels = [{:label => :os_detail},
|
21
|
+
{:label => :value}]
|
22
|
+
labels
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def fetch_linux
|
27
|
+
os_data = `lsb_release -a 2>&1`
|
28
|
+
|
29
|
+
if os_data.nil? || os_data.include?('lsb_release: not found')
|
30
|
+
os_data = `cat /etc/issue 2>&1`
|
31
|
+
os_data = 'Description:'+os_data.gsub('\n \l','')
|
32
|
+
end
|
33
|
+
|
34
|
+
os = get_hash(os_data)
|
35
|
+
os
|
36
|
+
end
|
37
|
+
|
38
|
+
def fetch_mac
|
39
|
+
os_data = `sw_vers`
|
40
|
+
os = get_hash(os_data)
|
41
|
+
os
|
42
|
+
end
|
43
|
+
|
44
|
+
def fetch_windows
|
45
|
+
os_data = `systeminfo | findstr /C:"OS"`
|
46
|
+
os = get_hash(os_data)
|
47
|
+
os
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_hash(data)
|
51
|
+
os = Hash.new
|
52
|
+
|
53
|
+
unless data.nil?
|
54
|
+
data.split("\n").each do |info|
|
55
|
+
infos = info.split(':')
|
56
|
+
os[infos[0].to_s.strip] = {:os_detail => infos[0].to_s.strip, :value => infos[1].to_s.strip}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
os
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative 'cpu_information'
|
2
|
+
require_relative 'memory_information'
|
3
|
+
require_relative 'disk_space_information'
|
4
|
+
require_relative 'entropy_available'
|
5
|
+
require_relative 'os_information'
|
6
|
+
module KPM
|
7
|
+
module SystemProxy
|
8
|
+
|
9
|
+
module OS
|
10
|
+
def OS.windows?
|
11
|
+
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RbConfig::CONFIG["host_os"]) != nil
|
12
|
+
end
|
13
|
+
|
14
|
+
def OS.mac?
|
15
|
+
(/darwin/ =~ RbConfig::CONFIG["host_os"]) != nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def OS.unix?
|
19
|
+
!OS.windows?
|
20
|
+
end
|
21
|
+
|
22
|
+
def OS.linux?
|
23
|
+
OS.unix? and not OS.mac?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/lib/kpm/tasks.rb
CHANGED
@@ -38,7 +38,8 @@ module KPM
|
|
38
38
|
desc 'install config_file', 'Install Kill Bill server and plugins according to the specified YAML configuration file.'
|
39
39
|
def install(config_file=nil)
|
40
40
|
help = Installer.from_file(config_file).install(options[:force_download], options[:verify_sha1])
|
41
|
-
|
41
|
+
help = JSON(help)
|
42
|
+
say help['help'], :green unless help['help'].nil?
|
42
43
|
end
|
43
44
|
|
44
45
|
method_option :destination,
|
@@ -428,8 +429,13 @@ module KPM
|
|
428
429
|
desc 'system', 'Gather information about the system'
|
429
430
|
def system
|
430
431
|
system = KPM::System.new
|
431
|
-
system.information(options[:bundles_dir], options[:as_json], options[:config_file], options[:kaui_web_path],
|
432
|
+
information = system.information(options[:bundles_dir], options[:as_json], options[:config_file], options[:kaui_web_path],
|
432
433
|
options[:killbill_web_path])
|
434
|
+
|
435
|
+
if options[:as_json]
|
436
|
+
puts information
|
437
|
+
end
|
438
|
+
|
433
439
|
end
|
434
440
|
|
435
441
|
method_option :export,
|
@@ -593,6 +599,99 @@ module KPM
|
|
593
599
|
end
|
594
600
|
|
595
601
|
|
602
|
+
method_option :account_export,
|
603
|
+
:type => :string,
|
604
|
+
:default => nil,
|
605
|
+
:desc => 'export account for a provided id.'
|
606
|
+
method_option :log_dir,
|
607
|
+
:type => :string,
|
608
|
+
:default => nil,
|
609
|
+
:desc => '(Optional) Log directory if the default tomcat location has changed'
|
610
|
+
method_option :config_file,
|
611
|
+
:type => :string,
|
612
|
+
:default => nil,
|
613
|
+
:desc => 'Yml that contains killbill api connection and DB connection'
|
614
|
+
method_option :killbill_api_credentials,
|
615
|
+
:type => :array,
|
616
|
+
:default => nil,
|
617
|
+
:desc => 'Killbill api credentials <api_key> <api_secrets>'
|
618
|
+
method_option :killbill_credentials,
|
619
|
+
:type => :array,
|
620
|
+
:default => nil,
|
621
|
+
:desc => 'Killbill credentials <user> <password>'
|
622
|
+
method_option :killbill_url,
|
623
|
+
:type => :string,
|
624
|
+
:default => nil,
|
625
|
+
:desc => 'Killbill URL ex. http://127.0.0.1:8080'
|
626
|
+
method_option :database_name,
|
627
|
+
:type => :string,
|
628
|
+
:default => nil,
|
629
|
+
:desc => 'DB name to connect'
|
630
|
+
method_option :database_credentials,
|
631
|
+
:type => :array,
|
632
|
+
:default => nil,
|
633
|
+
:desc => 'DB credentials <user> <password>'
|
634
|
+
method_option :database_host,
|
635
|
+
:type => :string,
|
636
|
+
:default => nil,
|
637
|
+
:desc => 'Database Host name'
|
638
|
+
method_option :kaui_web_path,
|
639
|
+
:type => :string,
|
640
|
+
:default => nil,
|
641
|
+
:desc => 'Path for the KAUI web app'
|
642
|
+
method_option :killbill_web_path,
|
643
|
+
:type => :string,
|
644
|
+
:default => nil,
|
645
|
+
:desc => 'Path for the killbill web app'
|
646
|
+
desc 'diagnostic', 'exports and \'zips\' the account data, system, logs and tenant configurations'
|
647
|
+
def diagnostic
|
648
|
+
logger.info 'Please wait processing the request!!!'
|
649
|
+
begin
|
650
|
+
if options[:account_export] && options[:account_export] == 'account_export'
|
651
|
+
raise Interrupt,'--account_export, please provide a valid account id'
|
652
|
+
end
|
653
|
+
|
654
|
+
if options[:killbill_url] && /https?:\/\/[\S]+/.match(options[:killbill_url]).nil?
|
655
|
+
raise Interrupt,'--killbill_url, required format -> http(s)://something'
|
656
|
+
end
|
657
|
+
|
658
|
+
if options[:killbill_api_credentials] && options[:killbill_api_credentials].size != 2
|
659
|
+
raise Interrupt,'--killbill_api_credentials, required format -> <api_key> <api_secrets>'
|
660
|
+
end
|
661
|
+
|
662
|
+
if options[:killbill_credentials] && options[:killbill_credentials].size != 2
|
663
|
+
raise Interrupt,'--killbill_credentials, required format -> <user> <password>'
|
664
|
+
end
|
665
|
+
|
666
|
+
if options[:database_credentials] && options[:database_credentials].size != 2
|
667
|
+
raise Interrupt,'--database_credentials, required format -> <user> <password>'
|
668
|
+
end
|
669
|
+
|
670
|
+
if options[:database_name] && options[:database_name] == :database_name.to_s
|
671
|
+
raise Interrupt,'--database_credentials, please provide a valid database name'
|
672
|
+
end
|
673
|
+
|
674
|
+
if options[:kaui_web_path] && options[:kaui_web_path] == :kaui_web_path.to_s
|
675
|
+
raise Interrupt,'--kaui_web_path, please provide a valid kaui web path '
|
676
|
+
end
|
677
|
+
|
678
|
+
if options[:killbill_web_path] && options[:killbill_web_path] == :killbill_web_path.to_s
|
679
|
+
raise Interrupt,'--killbill_web_path, please provide a valid killbill web path'
|
680
|
+
end
|
681
|
+
|
682
|
+
diagnostic = KPM::DiagnosticFile.new(options[:config_file],options[:killbill_api_credentials],options[:killbill_credentials],
|
683
|
+
options[:killbill_url],options[:database_name],options[:database_credentials],
|
684
|
+
options[:database_host], options[:kaui_web_path], options[:killbill_web_path],logger)
|
685
|
+
diagnostic.export_data(options[:account_export], options[:log_dir])
|
686
|
+
|
687
|
+
rescue Exception => e
|
688
|
+
logger.error "\e[91;1m#{e.message}\e[0m"
|
689
|
+
if not e.is_a?(Interrupt)
|
690
|
+
logger.error e.backtrace.join("\n")
|
691
|
+
end
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
596
695
|
map :pull_ruby_plugin => :install_ruby_plugin,
|
597
696
|
:pull_java_plugin => :install_java_plugin
|
598
697
|
|