greenhat 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
]
|