greenhat 0.2.0 → 0.3.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/lib/greenhat/accessors/disk.rb +13 -13
- data/lib/greenhat/accessors/gitlab.rb +75 -0
- data/lib/greenhat/accessors/memory.rb +10 -10
- data/lib/greenhat/accessors/process.rb +4 -0
- data/lib/greenhat/cli.rb +127 -52
- data/lib/greenhat/color.rb +27 -0
- data/lib/greenhat/logbot.rb +9 -9
- data/lib/greenhat/settings.rb +27 -7
- data/lib/greenhat/shell/args.rb +146 -0
- data/lib/greenhat/shell/cat.rb +25 -73
- data/lib/greenhat/shell/color_string.rb +8 -8
- data/lib/greenhat/shell/disk.rb +31 -4
- data/lib/greenhat/shell/faststats.rb +79 -59
- data/lib/greenhat/shell/{filter.rb → filter_help.rb} +48 -33
- data/lib/greenhat/shell/gitlab.rb +61 -2
- data/lib/greenhat/shell/help.rb +96 -15
- data/lib/greenhat/shell/list.rb +46 -0
- data/lib/greenhat/shell/log.rb +77 -104
- data/lib/greenhat/shell/page.rb +11 -5
- data/lib/greenhat/shell/process.rb +29 -17
- data/lib/greenhat/shell/report.rb +27 -43
- data/lib/greenhat/shell/{helper.rb → shell_helper.rb} +204 -187
- data/lib/greenhat/shell.rb +23 -9
- data/lib/greenhat/thing/file_types.rb +20 -1
- data/lib/greenhat/thing/formatters/json_shellwords.rb +0 -3
- data/lib/greenhat/thing/helpers.rb +4 -4
- data/lib/greenhat/thing/kind.rb +9 -2
- data/lib/greenhat/thing/spinner.rb +3 -3
- data/lib/greenhat/thing.rb +3 -3
- data/lib/greenhat/tty/columns.rb +4 -0
- data/lib/greenhat/version.rb +1 -1
- data/lib/greenhat.rb +14 -14
- metadata +22 -18
data/lib/greenhat/shell/disk.rb
CHANGED
@@ -8,15 +8,42 @@ module GreenHat
|
|
8
8
|
Cli.help
|
9
9
|
end
|
10
10
|
|
11
|
+
def self.help
|
12
|
+
puts "\u2500".pastel(:cyan) * 22
|
13
|
+
puts "#{'Disk'.pastel(:yellow)} - Storage Helper"
|
14
|
+
puts "\u2500".pastel(:cyan) * 22
|
15
|
+
|
16
|
+
ShellHelper.common_opts
|
17
|
+
|
18
|
+
puts 'Command Summary'.pastel(:blue)
|
19
|
+
puts ' df'.pastel(:green)
|
20
|
+
puts " Raw #{'df'.pastel(:cyan)} output"
|
21
|
+
puts
|
22
|
+
puts ' free'.pastel(:green)
|
23
|
+
puts ' Formatted / Bar Output'
|
24
|
+
puts
|
25
|
+
end
|
26
|
+
|
11
27
|
# Easy Show All
|
12
|
-
def self.df
|
13
|
-
|
28
|
+
def self.df(raw = {})
|
29
|
+
# Extract Args
|
30
|
+
files_list, flags, _args = Args.parse(raw)
|
31
|
+
|
32
|
+
# Collect Files
|
33
|
+
files = ShellHelper.files(files_list, GreenHat::Disk.df, flags)
|
34
|
+
|
35
|
+
# Output
|
36
|
+
ShellHelper.file_output(files, flags)
|
14
37
|
end
|
15
38
|
|
16
39
|
def self.free(raw = {})
|
17
|
-
|
40
|
+
# Extract Args
|
41
|
+
files_list, flags, _args = Args.parse(raw)
|
42
|
+
|
43
|
+
# Collect Files
|
44
|
+
files = ShellHelper.files(files_list, GreenHat::Disk.df, flags)
|
18
45
|
|
19
|
-
|
46
|
+
files.each do |file|
|
20
47
|
puts GreenHat::Disk.format_output(file, true)
|
21
48
|
|
22
49
|
# File End Loop / Break
|
@@ -5,47 +5,65 @@ module GreenHat
|
|
5
5
|
module Faststats
|
6
6
|
# rubocop:disable Metrics/MethodLength)
|
7
7
|
def self.help
|
8
|
-
puts "\u2500".
|
9
|
-
puts "Gimme #{'Performance Stats'.
|
10
|
-
puts "\u2500".
|
8
|
+
puts "\u2500".pastel(:cyan) * 25
|
9
|
+
puts "Gimme #{'Performance Stats'.pastel(:yellow)}"
|
10
|
+
puts "\u2500".pastel(:cyan) * 25
|
11
11
|
|
12
|
-
puts 'General'.
|
13
|
-
puts " Any double dash arguments (e.g. #{'--color-output'.
|
14
|
-
puts " See #{'`fast-stats --help`'.
|
12
|
+
puts 'General'.pastel(:blue)
|
13
|
+
puts " Any double dash arguments (e.g. #{'--color-output'.pastel(:green)}) are passed directly to fast-stats"
|
14
|
+
puts " See #{'`fast-stats --help`'.pastel(:bright_black)} for all available options"
|
15
15
|
puts
|
16
16
|
|
17
|
-
puts 'Common Options'.
|
18
|
-
puts ' --raw'.
|
17
|
+
puts 'Common Options'.pastel(:blue)
|
18
|
+
puts ' --raw'.pastel(:green)
|
19
19
|
puts ' Do not use less/paging'
|
20
|
-
puts ' --
|
21
|
-
puts '
|
22
|
-
puts ' --sort'.
|
20
|
+
puts ' --search'.pastel(:green)
|
21
|
+
puts ' Case-insensitive search of controller/method/worker field'
|
22
|
+
puts ' --sort'.pastel(:green)
|
23
23
|
puts ' count,fail,max,median,min,p95,p99,rps,score'
|
24
|
-
puts ' --limit'.
|
24
|
+
puts ' --limit'.pastel(:green)
|
25
25
|
puts ' The number of rows to print'
|
26
|
-
puts ' --verbose'.
|
26
|
+
puts ' --verbose'.pastel(:green)
|
27
27
|
puts ' Prints the component details of the maximum, P99, P95, and median events by total duration for each'
|
28
28
|
puts
|
29
29
|
|
30
|
-
puts 'Commands'.
|
31
|
-
puts 'ls'.
|
30
|
+
puts 'Commands'.pastel(:blue)
|
31
|
+
puts 'ls'.pastel(:green)
|
32
32
|
puts ' List available files'
|
33
33
|
puts ' Options'
|
34
34
|
puts ' -a, --all, show all files including source'
|
35
35
|
puts
|
36
36
|
|
37
|
-
puts '<file names+>'.
|
37
|
+
puts '<file names+>'.pastel(:green)
|
38
38
|
puts ' Print any file names'
|
39
39
|
puts ' Ex: `gitaly/current`'
|
40
40
|
puts ' Ex: `gitlab-rails/api_json.log gitlab-rails/production_json.log --raw`'
|
41
41
|
puts
|
42
42
|
|
43
|
-
puts 'top'.
|
43
|
+
puts 'top'.pastel(:green)
|
44
44
|
puts ' Print a summary of top items in a category'
|
45
45
|
puts
|
46
46
|
|
47
|
-
puts 'errors'.
|
47
|
+
puts 'errors'.pastel(:green)
|
48
48
|
puts ' Show summary of errors captured in log'
|
49
|
+
puts
|
50
|
+
|
51
|
+
puts 'Examples'.pastel(:blue)
|
52
|
+
puts ' Default'.pastel(:bright_white)
|
53
|
+
puts ' gitaly/current'
|
54
|
+
puts ' --raw gitlab-rails/production_json.log'
|
55
|
+
puts ' gitlab-rails/api_json.log --sort=count'
|
56
|
+
puts ' --search=pipeline sidekiq/current'
|
57
|
+
puts
|
58
|
+
|
59
|
+
puts ' Top'.pastel(:bright_white)
|
60
|
+
puts ' top gitaly/current'
|
61
|
+
puts ' top --limit=5 sidekiq/current'
|
62
|
+
puts
|
63
|
+
|
64
|
+
puts ' Errors'.pastel(:bright_white)
|
65
|
+
puts ' errors gitaly/current'
|
66
|
+
puts ' errors gitaly/current --no-border'
|
49
67
|
end
|
50
68
|
# rubocop:enable Metrics/MethodLength)
|
51
69
|
|
@@ -67,7 +85,7 @@ module GreenHat
|
|
67
85
|
if all
|
68
86
|
puts "- #{log.friendly_name}"
|
69
87
|
else
|
70
|
-
puts "- #{log.name.
|
88
|
+
puts "- #{log.name.pastel(:yellow)}"
|
71
89
|
end
|
72
90
|
end
|
73
91
|
end
|
@@ -77,18 +95,10 @@ module GreenHat
|
|
77
95
|
end
|
78
96
|
|
79
97
|
# Vanilla Fast Stats
|
80
|
-
def self.default(
|
81
|
-
|
82
|
-
file_list, opts, args = ShellHelper.param_parse(file_list)
|
83
|
-
|
84
|
-
cmd = opts.map { |opt| "--#{opt.field}=#{opt.value}" }.join(' ')
|
85
|
-
cmd += args.keys.map { |arg| "--#{arg}" }.join(' ')
|
98
|
+
def self.default(raw, _other = nil)
|
99
|
+
files, flags, cmd = ShellHelper::Faststats.parse(raw)
|
86
100
|
|
87
|
-
|
88
|
-
file_list = ShellHelper.prepare_list(file_list, ShellHelper::Faststats.things)
|
89
|
-
|
90
|
-
# Convert to Things
|
91
|
-
files = ShellHelper.find_things(file_list)
|
101
|
+
LogBot.debug('FastStats CMD', cmd) if ENV['DEBUG']
|
92
102
|
|
93
103
|
results = ShellHelper.file_process(files) do |file|
|
94
104
|
[
|
@@ -98,7 +108,7 @@ module GreenHat
|
|
98
108
|
]
|
99
109
|
end
|
100
110
|
|
101
|
-
ShellHelper.show(results.flatten,
|
111
|
+
ShellHelper.show(results.flatten, flags)
|
102
112
|
end
|
103
113
|
|
104
114
|
# ========================================================================
|
@@ -110,18 +120,10 @@ module GreenHat
|
|
110
120
|
# --limit=X
|
111
121
|
# --sort=count,fail,max,median,min,p95,p99,rps,score
|
112
122
|
# ========================================================================
|
113
|
-
def self.top(
|
114
|
-
|
115
|
-
log_list, opts, args = ShellHelper.param_parse(log_list, %i[page round truncate])
|
116
|
-
|
117
|
-
cmd = opts.map { |opt| "--#{opt.field}=#{opt.value}" }.join(' ')
|
118
|
-
cmd += args.keys.map { |arg| "--#{arg}" }.join(' ')
|
119
|
-
|
120
|
-
# Prepare Log List
|
121
|
-
log_list = ShellHelper.prepare_list(log_list, ShellHelper::Faststats.things)
|
123
|
+
def self.top(raw)
|
124
|
+
files, flags, cmd = ShellHelper::Faststats.parse(raw)
|
122
125
|
|
123
|
-
|
124
|
-
files = ShellHelper.find_things(log_list)
|
126
|
+
LogBot.debug('FastStats CMD', cmd) if ENV['DEBUG']
|
125
127
|
|
126
128
|
results = ShellHelper.file_process(files) do |file|
|
127
129
|
[
|
@@ -131,28 +133,17 @@ module GreenHat
|
|
131
133
|
]
|
132
134
|
end
|
133
135
|
|
134
|
-
ShellHelper.show(results.flatten,
|
136
|
+
ShellHelper.show(results.flatten, flags)
|
135
137
|
end
|
136
138
|
# ========================================================================
|
137
139
|
|
138
140
|
# ========================================================================
|
139
141
|
# ===== [ Fast Stats - Errors ] ====================
|
140
142
|
# ========================================================================
|
141
|
-
def self.errors(
|
142
|
-
#
|
143
|
-
|
144
|
-
|
145
|
-
# Default to color output
|
146
|
-
args['color-output'] ||= true
|
147
|
-
|
148
|
-
cmd = opts.map { |opt| "--#{opt.field}=#{opt.value}" }.join(' ')
|
149
|
-
cmd += args.keys.map { |arg| "--#{arg}" }.join(' ')
|
150
|
-
|
151
|
-
# Prepare Log List
|
152
|
-
log_list = ShellHelper.prepare_list(log_list, ShellHelper::Faststats.things)
|
153
|
-
|
154
|
-
# Convert to Things
|
155
|
-
files = ShellHelper.find_things(log_list)
|
143
|
+
def self.errors(raw)
|
144
|
+
# Add Color Output
|
145
|
+
raw.push '--color-output'
|
146
|
+
files, flags, cmd = ShellHelper::Faststats.parse(raw)
|
156
147
|
|
157
148
|
LogBot.debug('FastStats CMD', cmd) if ENV['DEBUG']
|
158
149
|
|
@@ -164,7 +155,7 @@ module GreenHat
|
|
164
155
|
]
|
165
156
|
end
|
166
157
|
|
167
|
-
ShellHelper.show(results.flatten,
|
158
|
+
ShellHelper.show(results.flatten, flags)
|
168
159
|
end
|
169
160
|
# ========================================================================
|
170
161
|
end
|
@@ -175,6 +166,35 @@ module GreenHat
|
|
175
166
|
module ShellHelper
|
176
167
|
# Hide from Commands
|
177
168
|
module Faststats
|
169
|
+
# Default Settings from arg parse that won't work
|
170
|
+
def self.invalid_settings
|
171
|
+
%i[page round truncate logic fuzzy_file_match]
|
172
|
+
end
|
173
|
+
|
174
|
+
def self.parse(raw)
|
175
|
+
file_list, flags, args = Args.parse(raw, invalid_settings)
|
176
|
+
cmd = args.map { |opt| "--#{opt.field}=#{opt.value}" }.join(' ')
|
177
|
+
cmd += flags.map do |flag, value|
|
178
|
+
# Don't Include Raw
|
179
|
+
next if flag == :raw
|
180
|
+
|
181
|
+
case value
|
182
|
+
when true then "--#{flag}"
|
183
|
+
when Array then "--#{flag}=#{value.join}"
|
184
|
+
else
|
185
|
+
"--#{flag}=#{value}"
|
186
|
+
end
|
187
|
+
end.join(' ')
|
188
|
+
|
189
|
+
# Prepare Log List
|
190
|
+
file_list = ShellHelper.prepare_list(file_list, ShellHelper::Faststats.things, flags)
|
191
|
+
|
192
|
+
# Convert to Things
|
193
|
+
files = ShellHelper.find_things(file_list)
|
194
|
+
|
195
|
+
[files, flags, cmd]
|
196
|
+
end
|
197
|
+
|
178
198
|
def self.files
|
179
199
|
%w[
|
180
200
|
production_json
|
@@ -5,118 +5,133 @@ module GreenHat
|
|
5
5
|
module Filter
|
6
6
|
# rubocop:disable Metrics/MethodLength
|
7
7
|
def self.help
|
8
|
-
puts "\u2500".
|
9
|
-
puts 'Filter'.
|
10
|
-
puts "\u2500".
|
8
|
+
puts "\u2500".pastel(:cyan) * 20
|
9
|
+
puts 'Filter'.pastel(:yellow)
|
10
|
+
puts "\u2500".pastel(:cyan) * 20
|
11
11
|
|
12
|
-
puts 'Options'.
|
13
|
-
puts '--raw'.
|
12
|
+
puts 'Options'.pastel(:blue)
|
13
|
+
puts '--raw'.pastel(:green)
|
14
14
|
puts ' Do not use less/paging'
|
15
15
|
puts
|
16
16
|
|
17
|
-
puts '--page'.
|
17
|
+
puts '--page'.pastel(:green)
|
18
18
|
puts ' Specifically enable or disable paging'
|
19
19
|
puts ' E.g. --page (default to true), --page=true, --page=false'
|
20
20
|
puts
|
21
21
|
|
22
|
-
puts '--round'.
|
22
|
+
puts '--round'.pastel(:green)
|
23
23
|
puts ' Attempt to round all integers. Default: 2.'
|
24
24
|
puts ' E.g. --round, --round=3, --round=0'
|
25
25
|
puts
|
26
26
|
|
27
|
-
puts '--
|
28
|
-
puts ' Limit output
|
29
|
-
puts ' E.g. --
|
27
|
+
puts '--limit'.pastel(:green)
|
28
|
+
puts ' Limit total output lines. Disabled by default. Default without value is based on screen height'
|
29
|
+
puts ' E.g. --limit, --limit=5'
|
30
30
|
puts
|
31
31
|
|
32
|
-
puts '--json'.
|
32
|
+
puts '--json'.pastel(:green)
|
33
33
|
puts ' Print output back into JSON'
|
34
34
|
puts
|
35
35
|
|
36
|
-
puts '--or'.
|
37
|
-
puts ' Filters will use OR instead of AND'
|
36
|
+
puts '--or'.pastel(:green)
|
37
|
+
puts ' Filters will use OR instead of AND (all match vs any match)'
|
38
38
|
puts
|
39
39
|
|
40
|
-
puts '--total'.
|
40
|
+
puts '--total'.pastel(:green)
|
41
41
|
puts ' Print only total count of matching entries'
|
42
42
|
puts
|
43
43
|
|
44
|
-
puts '--slice'.
|
44
|
+
puts '--slice'.pastel(:green)
|
45
45
|
puts ' Extract specific fields from entries (slice multiple with comma)'
|
46
46
|
puts ' Ex: --slice=path or --slice=path,params'
|
47
47
|
puts
|
48
48
|
|
49
|
-
puts '--except'.
|
49
|
+
puts '--except'.pastel(:green)
|
50
50
|
puts ' Exclude specific fields (except multiple with comma)'
|
51
51
|
puts ' Ex: --except=params --except=params,path'
|
52
52
|
puts
|
53
53
|
|
54
|
-
puts '--
|
54
|
+
puts '--exists'.pastel(:green)
|
55
|
+
puts ' Ensure field exists regardless of contents'
|
56
|
+
puts ' Ex: --exists=params --exists=params,path'
|
57
|
+
puts
|
58
|
+
|
59
|
+
puts '--stats'.pastel(:green)
|
55
60
|
puts ' Order/Count occurrances by field'
|
56
61
|
puts ' Ex: --stats=params --except=params,path'
|
57
62
|
puts
|
58
63
|
|
59
|
-
puts '--uniq'.
|
64
|
+
puts '--uniq'.pastel(:green)
|
60
65
|
puts ' Show unique values only'
|
61
66
|
puts ' Ex: --uniq=params --uniq=params,path'
|
62
67
|
puts
|
63
68
|
|
64
|
-
puts '--pluck'.
|
69
|
+
puts '--pluck'.pastel(:green)
|
65
70
|
puts ' Extract values from entries'
|
66
71
|
puts ' Ex: --pluck=params --pluck=params,path'
|
67
72
|
puts
|
68
73
|
|
69
|
-
puts '--archive'.
|
70
|
-
puts ' Limit to specific archvie name (inclusive). Matching SOS tar.gz name'
|
74
|
+
puts '--archive'.pastel(:green)
|
75
|
+
puts ' Limit to specific archvie name (partial matching /inclusive). Matching SOS tar.gz name'
|
71
76
|
puts ' Ex: --archive=dev-gitlab_20210622154626, --archive=202106,202107'
|
72
77
|
puts
|
73
78
|
|
74
|
-
puts '--sort'.
|
79
|
+
puts '--sort'.pastel(:green)
|
75
80
|
puts ' Sort by multiple fields'
|
76
81
|
puts ' Ex: --sort=duration_s,db_duration_s'
|
77
82
|
puts
|
78
83
|
|
79
|
-
puts '--reverse'.
|
84
|
+
puts '--reverse'.pastel(:green)
|
80
85
|
puts ' Reverse all results'
|
81
86
|
puts ' Ex: --reverse'
|
82
87
|
puts
|
83
88
|
|
84
|
-
puts '--combine'.
|
89
|
+
puts '--combine'.pastel(:green)
|
85
90
|
puts ' Omit archive identifier dividers. Useful with sort or time filters'
|
86
91
|
puts ' Ex: --combine'
|
87
92
|
puts
|
88
93
|
|
89
|
-
puts '--
|
94
|
+
puts '--case'.pastel(:green)
|
95
|
+
puts ' Exact case match. Defaults to case insensitive'
|
96
|
+
puts ' Ex: --case; --name=Jon, --name=jane --case'
|
97
|
+
puts
|
98
|
+
|
99
|
+
puts '--exact'.pastel(:green)
|
100
|
+
puts ' Exact parameter/value match. Defaults to partial match'
|
101
|
+
puts ' Ex: --field=CommonPartial --exact'
|
102
|
+
puts
|
103
|
+
|
104
|
+
puts '--start'.pastel(:green)
|
90
105
|
puts ' Show events after specified time. Filtered by the `time` field'
|
91
106
|
puts ' Use with `--end` for between selections'
|
92
107
|
puts ' Ex: log filter --start="2021-06-22 14:44 UTC" --end="2021-06-22 14:45 UTC"'
|
93
108
|
puts
|
94
109
|
|
95
|
-
puts '--end'.
|
110
|
+
puts '--end'.pastel(:green)
|
96
111
|
puts ' Show events before specified time. Filtered by the `time` field'
|
97
112
|
puts ' Use with `--start` for between selections'
|
98
113
|
puts ' Ex: log filter --end="2021-06-22"'
|
99
114
|
puts
|
100
115
|
|
101
|
-
puts '--truncate'.
|
116
|
+
puts '--truncate'.pastel(:green)
|
102
117
|
puts ' Truncate field length. On by default (4 rows). Performance issues!'
|
103
|
-
puts ' Disable with --truncate=0'.
|
118
|
+
puts ' Disable with --truncate=0'.pastel(:bright_red)
|
104
119
|
puts ' Ex: --truncate=200, --truncate=2048"'
|
105
120
|
puts
|
106
121
|
|
107
|
-
puts 'Field Searching'.
|
122
|
+
puts 'Field Searching'.pastel(:blue)
|
108
123
|
puts ' --[key]=[value]'
|
109
124
|
puts ' Search in key for value'
|
110
125
|
puts ' Example: --path=mirror/pull'
|
111
126
|
puts
|
112
127
|
|
113
|
-
puts 'Search specific logs'.
|
128
|
+
puts 'Search specific logs'.pastel(:blue)
|
114
129
|
puts ' Any non dash parameters will be the log list to search from'
|
115
|
-
puts " Ex: log filter --path=api sidekiq/current (hint: use `#{'ls'.
|
130
|
+
puts " Ex: log filter --path=api sidekiq/current (hint: use `#{'ls'.pastel(:yellow)}` for log names"
|
116
131
|
puts
|
117
132
|
|
118
|
-
puts 'Example Queries'.
|
119
|
-
puts " Also see #{'examples'.
|
133
|
+
puts 'Example Queries'.pastel(:blue)
|
134
|
+
puts " Also see #{'examples'.pastel(:bright_blue)} for even more examples"
|
120
135
|
puts ' log filter --class=BuildFinishedWorker sidekiq/current --slice=time,message'
|
121
136
|
puts ' log filter gitlab-rails/api_json.log --slice=ua --uniq=ua --ua=gitlab-runner'
|
122
137
|
|
@@ -3,16 +3,75 @@ module GreenHat
|
|
3
3
|
module Shell
|
4
4
|
# Logs
|
5
5
|
module Gitlab
|
6
|
+
def self.ls
|
7
|
+
help
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.help
|
11
|
+
puts "\u2500".pastel(:cyan) * 20
|
12
|
+
puts "#{'GitLab'.pastel(:yellow)} - Tanuki power"
|
13
|
+
puts "\u2500".pastel(:cyan) * 20
|
14
|
+
|
15
|
+
puts 'Command Summary'.pastel(:blue)
|
16
|
+
|
17
|
+
puts ' services'.pastel(:green)
|
18
|
+
puts ' Show services status and version'
|
19
|
+
puts
|
20
|
+
|
21
|
+
puts ' status'.pastel(:green)
|
22
|
+
puts ' Show gitlab-ctl status'
|
23
|
+
puts
|
24
|
+
|
25
|
+
puts ' architecture'.pastel(:green)
|
26
|
+
puts ' Show node responsibility. E.g. Webservice, Gitaly, and etc'
|
27
|
+
puts
|
28
|
+
|
29
|
+
puts ' version'.pastel(:green)
|
30
|
+
puts ' Show GitLab software version'
|
31
|
+
puts
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.architecture
|
35
|
+
results = Archive.all.map { |x| GitLab.identify_node(x) }
|
36
|
+
|
37
|
+
GitLab.node_types.each do |entry|
|
38
|
+
list = results.select { |x| (x.services & entry.pattern).any? }.map(&:host).join(', ')
|
39
|
+
next if list.blank?
|
40
|
+
|
41
|
+
puts entry.name.pastel(:bright_green)
|
42
|
+
puts list
|
43
|
+
puts
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
6
47
|
def self.version
|
7
48
|
Thing.where(type: 'gitlab/version-manifest.json').each do |file|
|
8
49
|
next unless file.data
|
9
50
|
|
10
51
|
puts file.friendly_name
|
11
|
-
puts Semantic::Version.new(file.data.build_version).to_s.
|
52
|
+
puts Semantic::Version.new(file.data.build_version).to_s.pastel(:yellow)
|
12
53
|
puts
|
13
54
|
end
|
14
55
|
end
|
15
56
|
|
57
|
+
# Print service info / shared report method
|
58
|
+
def self.services(raw = {})
|
59
|
+
_files, flags, _args = Args.parse(raw, [:truncate])
|
60
|
+
|
61
|
+
results = {}
|
62
|
+
|
63
|
+
Archive.all.each do |archive|
|
64
|
+
result = GitLab.services(archive)
|
65
|
+
next unless result
|
66
|
+
|
67
|
+
# Generated Output
|
68
|
+
results[archive.friendly_name.pastel(:blue)] = result
|
69
|
+
end
|
70
|
+
|
71
|
+
# Print
|
72
|
+
ShellHelper.show(results, flags)
|
73
|
+
end
|
74
|
+
|
16
75
|
def self.status
|
17
76
|
Thing.where(type: 'gitlab_status').each do |file|
|
18
77
|
next unless file.data
|
@@ -27,7 +86,7 @@ module GreenHat
|
|
27
86
|
|
28
87
|
[
|
29
88
|
"#{service.status}:",
|
30
|
-
service.name.ljust(pad).
|
89
|
+
service.name.ljust(pad).pastel(color),
|
31
90
|
"#{service.pid_uptime};".ljust(pad)
|
32
91
|
|
33
92
|
]
|