greenhat 0.3.4 → 0.5.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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/bin/greenhat +2 -6
  3. data/lib/greenhat/accessors/disk.rb +1 -3
  4. data/lib/greenhat/accessors/gitlab.rb +7 -2
  5. data/lib/greenhat/accessors/memory.rb +1 -1
  6. data/lib/greenhat/archive.rb +19 -8
  7. data/lib/greenhat/cli.rb +35 -135
  8. data/lib/greenhat/entrypoint.rb +170 -0
  9. data/lib/greenhat/host.rb +25 -37
  10. data/lib/greenhat/settings.rb +33 -5
  11. data/lib/greenhat/shell/args.rb +22 -9
  12. data/lib/greenhat/shell/faststats.rb +23 -3
  13. data/lib/greenhat/shell/field_helper.rb +1 -1
  14. data/lib/greenhat/shell/filter_help.rb +217 -162
  15. data/lib/greenhat/shell/gitlab.rb +1 -0
  16. data/lib/greenhat/shell/log.rb +150 -25
  17. data/lib/greenhat/shell/markdown.rb +21 -25
  18. data/lib/greenhat/shell/old_search_helper.rb +54 -0
  19. data/lib/greenhat/shell/page.rb +1 -1
  20. data/lib/greenhat/shell/pipe.rb +31 -0
  21. data/lib/greenhat/shell/platform.rb +28 -0
  22. data/lib/greenhat/shell/query.rb +378 -0
  23. data/lib/greenhat/shell/report.rb +76 -24
  24. data/lib/greenhat/shell/shell_helper.rb +42 -393
  25. data/lib/greenhat/shell.rb +19 -4
  26. data/lib/greenhat/thing/file_types.rb +51 -1
  27. data/lib/greenhat/thing/formatters/api_json.rb +4 -2
  28. data/lib/greenhat/thing/formatters/bracket_log.rb +1 -1
  29. data/lib/greenhat/thing/formatters/colon_split_strip.rb +2 -2
  30. data/lib/greenhat/thing/formatters/dotenv.rb +1 -1
  31. data/lib/greenhat/thing/formatters/format.rb +0 -11
  32. data/lib/greenhat/thing/formatters/free_m.rb +2 -2
  33. data/lib/greenhat/thing/formatters/json.rb +43 -15
  34. data/lib/greenhat/thing/formatters/json_shellwords.rb +3 -2
  35. data/lib/greenhat/thing/formatters/kube_json.rb +3 -2
  36. data/lib/greenhat/thing/formatters/multiline_json.rb +1 -1
  37. data/lib/greenhat/thing/formatters/nginx.rb +11 -3
  38. data/lib/greenhat/thing/formatters/table.rb +3 -3
  39. data/lib/greenhat/thing/formatters/time_space.rb +0 -16
  40. data/lib/greenhat/thing/helpers.rb +12 -11
  41. data/lib/greenhat/thing/info_format.rb +4 -4
  42. data/lib/greenhat/thing/kind.rb +5 -0
  43. data/lib/greenhat/thing/super_log.rb +0 -101
  44. data/lib/greenhat/thing.rb +31 -25
  45. data/lib/greenhat/version.rb +1 -1
  46. data/lib/greenhat/views/api.slim +55 -0
  47. data/lib/greenhat/views/chart.slim +42 -0
  48. data/lib/greenhat/views/chart_template.slim +31 -0
  49. data/lib/greenhat/views/chartkick.js +21 -0
  50. data/lib/greenhat/views/css.slim +47 -0
  51. data/lib/greenhat/views/gitaly.slim +53 -0
  52. data/lib/greenhat/views/headers.slim +16 -0
  53. data/lib/greenhat/views/index-old.slim +51 -0
  54. data/lib/greenhat/views/index.slim +14 -14
  55. data/lib/greenhat/views/info.slim +17 -18
  56. data/lib/greenhat/views/production.slim +55 -0
  57. data/lib/greenhat/views/sidekiq.slim +55 -0
  58. data/lib/greenhat/views/time.slim +63 -0
  59. data/lib/greenhat/views/workhorse.slim +16 -0
  60. data/lib/greenhat/web/api.rb +94 -0
  61. data/lib/greenhat/web/chartkick_shim.rb +14 -0
  62. data/lib/greenhat/web/faststats.rb +44 -0
  63. data/lib/greenhat/web/gitaly.rb +65 -0
  64. data/lib/greenhat/web/helpers.rb +198 -0
  65. data/lib/greenhat/web/production.rb +104 -0
  66. data/lib/greenhat/web/sidekiq.rb +73 -0
  67. data/lib/greenhat/web/stats_helpers.rb +74 -0
  68. data/lib/greenhat/web/time.rb +36 -0
  69. data/lib/greenhat/web/workhorse.rb +43 -0
  70. data/lib/greenhat/web.rb +63 -19
  71. data/lib/greenhat.rb +2 -0
  72. metadata +74 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c055abc7397135be9ca07e7965fc88d67f1d7d16099a5cc5db1977986490361
4
- data.tar.gz: 2e2f66a3bbc5bdc84e8b5bef9abfa28706f48841f25c7e642fe352c063745e22
3
+ metadata.gz: 98d1acd7b3c698127214711199399e78d7b72f4762d8beb575fb2ac1d3e2ae1b
4
+ data.tar.gz: 011d2f2e27b278a06f87605d13809f3472b5223f39937e6fed55ecc28476ea00
5
5
  SHA512:
6
- metadata.gz: d9fcd1274e4887fa332a053185ea1049e5db2f3d449714542a31084234326d48623e95e0fb8678b6cb67b20b636ec04c82db1555ff43aac09f158d6df4fc7dc0
7
- data.tar.gz: c6fe018479b7cc90f2e70b411761fe5e3b8da5d4237064e3bb450399f966cf00a0302adc433ebf39fad57565ca11efbd95fbd0601a15f2989bc1c6455029a4e8
6
+ metadata.gz: 2b253023196cc698fc9022455e1a43e6add8fae2e63512e946fb207619e7e29c83783e9b9a265e1f77ce3dcbcb81be270b7bb3896a0822c6bad06c51dec8571f
7
+ data.tar.gz: 850d05cc4ea5d95e53e289c4781232af8719286c9b3c1165cf9afeac25bf19122a79249bc290ddad9cc4b00767d4c5396052fe5c7e9c43b9b7742f9c15eb1c7f
data/bin/greenhat CHANGED
@@ -1,12 +1,8 @@
1
- #!/usr/bin/env ruby
2
-
1
+ #!/usr/bin/env -S RUBY_GC_OLDMALLOC_LIMIT_MAX=600000000 RUBY_GC_OLDMALLOC_LIMIT=256000000 RUBY_GC_MALLOC_LIMIT=16000000 RUBY_GC_MALLOC_LIMIT_MAX=600000000 ruby
3
2
  require 'greenhat'
4
3
 
5
- # DEV ONLY
6
- require 'pry'
7
-
8
4
  Dir.mktmpdir('greenhat-sauce') do |tmp|
9
5
  $TMP = tmp
10
6
  $STDOUT_CLONE = $stdout.clone
11
- GreenHat::Cli.start ARGV
7
+ GreenHat::Entrypoint.start ARGV
12
8
  end
@@ -30,7 +30,6 @@ module GreenHat
30
30
  end
31
31
 
32
32
  # Unified Output Handler
33
- # rubocop:disable Metrics/MethodLength
34
33
  def self.format_output(file, name = false, limit = nil, filter = %w[tmpfs loop])
35
34
  output = []
36
35
 
@@ -62,7 +61,7 @@ module GreenHat
62
61
  disk.use.rjust(5).ljust(5).pastel(:green),
63
62
  ' ['.pastel(:blue),
64
63
  ('=' * (disk.use.to_i / 2)).pastel(:green),
65
- ' ' * (50 - disk.use.to_i / 2),
64
+ ' ' * (50 - (disk.use.to_i / 2)),
66
65
  ']'.pastel(:blue)
67
66
  ].join
68
67
 
@@ -78,7 +77,6 @@ module GreenHat
78
77
 
79
78
  output
80
79
  end
81
- # rubocop:enable Metrics/MethodLength
82
80
 
83
81
  # Unified Output Handler
84
82
  def self.markdown_format(file, name = false, limit = nil, filter = %w[tmpfs loop])
@@ -35,14 +35,18 @@ module GreenHat
35
35
  end
36
36
 
37
37
  # Show GitLab Services in a grid / include versions
38
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
38
39
  def self.services(archive, indent = 0)
39
40
  manifest = archive.things.find { |x| x.type == 'gitlab/version-manifest.json' }
40
41
  gitlab_status = archive.things.find { |x| x.name == 'gitlab_status' }
41
42
 
43
+ # Dont' show invalid
44
+ return nil if gitlab_status.data.to_s.include? "Could not find 'bundler'"
42
45
  return nil unless gitlab_status
43
46
 
44
47
  list = gitlab_status.data.keys.sort.map do |service|
45
48
  color = gitlab_status.data.dig(service, 0, :status) == 'run' ? :green : :red
49
+ status = gitlab_status.data.dig(service, 0, :status) == 'run' ? '↑' : '↓'
46
50
 
47
51
  # Collect Service version from manifest
48
52
  version = manifest.data.software[service.to_sym]&.display_version
@@ -50,7 +54,7 @@ module GreenHat
50
54
  # If able to identify version use / fallback
51
55
  if version
52
56
  [
53
- service.pastel(color),
57
+ "#{service}#{status}".pastel(color),
54
58
  "(#{version})".pastel(:bright_black)
55
59
  ].join(' ')
56
60
  else
@@ -71,13 +75,14 @@ module GreenHat
71
75
 
72
76
  table.render(:unicode, padding: [0, 1, 0, 1], indent: indent)
73
77
  end
78
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
74
79
 
75
80
  def self.services_markdown(archive)
76
81
  # manifest = archive.things.find { |x| x.type == 'gitlab/version-manifest.json' }
77
82
  gitlab_status = archive.things.find { |x| x.name == 'gitlab_status' }
78
83
 
79
84
  list = gitlab_status.data.keys.sort.map do |service|
80
- status = gitlab_status.data.dig(service, 0, :status) == 'run' ? '↑' : '!'
85
+ status = gitlab_status.data.dig(service, 0, :status) == 'run' ? '↑' : ''
81
86
 
82
87
  "#{service}#{status}"
83
88
  end
@@ -6,7 +6,7 @@ module GreenHat
6
6
  end
7
7
 
8
8
  def self.percentage(used, total)
9
- return 0 if used.to_i.zero?
9
+ return 0 if used.to_i.zero? || total.to_i.zero?
10
10
 
11
11
  # Show at least one bar if below 1%
12
12
  [1, ((used.to_i / total.to_f).round(1) * 100).round].max
@@ -7,7 +7,7 @@ module GreenHat
7
7
  Dir.mkdir path
8
8
 
9
9
  # Initially Copy file into tmpdir
10
- FileUtils.cp(archive_path, "#{path}/")
10
+ FileUtils.cp_r(archive_path.to_s, "#{path}/")
11
11
 
12
12
  # Extract Everything
13
13
  loop do
@@ -28,9 +28,6 @@ module GreenHat
28
28
 
29
29
  archive = Archive.new(name: archive_path, path: path)
30
30
  archive.save
31
- # file = list[2]
32
- # thing = archive.things_create(file: file)
33
- # thing.setup
34
31
 
35
32
  list.each do |file|
36
33
  # Ensure Valid Content
@@ -54,11 +51,20 @@ module GreenHat
54
51
  # Handle Different Types of Archives
55
52
  def self.unpack(archive_path, path)
56
53
  case File.extname archive_path
54
+ when '.tgz'
55
+ base_path = archive_path.gsub(File.basename(archive_path), '')
56
+ `bsdtar -xzf "#{archive_path}" -C #{base_path}`
57
+ FileUtils.rm(archive_path)
57
58
  when '.tar'
58
- `bsdtar -xf "#{archive_path}" -C #{path}`
59
+ base_path = archive_path.gsub(File.basename(archive_path), '')
60
+ `bsdtar -xf "#{archive_path}" -C #{base_path}`
59
61
  FileUtils.rm(archive_path)
60
62
  when '.gz'
61
63
  `gzip -d "#{archive_path}"`
64
+ when '.zip'
65
+ `unzip -o -d "#{base_path}" #{archive_path}`
66
+ when '.bz2'
67
+ `bzip2 -d #{archive_path}`
62
68
  when '.s'
63
69
  # Find Original Directory, Split Path, Rename to .gz
64
70
  base_path = archive_path.gsub(File.basename(archive_path), '')
@@ -75,7 +81,7 @@ module GreenHat
75
81
  end
76
82
 
77
83
  def self.archive_types
78
- %w[s gz tar]
84
+ %w[s gz tar tgz zip bz2]
79
85
  end
80
86
  # -- Archive Loader ----------------------------------------------
81
87
  end
@@ -102,11 +108,16 @@ class Archive < Teron
102
108
  "#<Archive name: '#{name}'>"
103
109
  end
104
110
 
105
- def report
106
- GreenHat::Report.new(self)
111
+ def report(flags)
112
+ GreenHat::Report.new(self, flags)
107
113
  end
108
114
 
109
115
  def report_markdown
110
116
  GreenHat::ReportMarkdown.new(self)
111
117
  end
118
+
119
+ # Helper for finding thing
120
+ def thing?(thing_name = 'gitlab-workhorse/current')
121
+ things.find { |x| x.name == thing_name }
122
+ end
112
123
  end
data/lib/greenhat/cli.rb CHANGED
@@ -1,8 +1,31 @@
1
1
  # Top level namespace
2
2
  module GreenHat
3
- # CLI Methods
3
+ # CLI Methods / Shell Specific COmmands
4
4
  # rubocop:disable Metrics/ModuleLength
5
5
  module Cli
6
+ # CLI Start
7
+ def self.start
8
+ value ||= '' # Empty Start
9
+
10
+ loop do
11
+ line = reader.read_line(readline_notch, value: value)
12
+ value = '' # Remove Afterwards
13
+
14
+ if reader.breaker
15
+ value = line
16
+ puts ''
17
+ next
18
+ end
19
+
20
+ break if line =~ /^exit/i
21
+
22
+ Settings.cmd_add(line) unless line.blank?
23
+
24
+ process
25
+ run
26
+ end
27
+ end
28
+
6
29
  def self.cursor
7
30
  @cursor = TTY::Cursor
8
31
  end
@@ -86,19 +109,19 @@ module GreenHat
86
109
  if submodule?
87
110
  submodule!
88
111
  reader.breaker = true
89
- # Only one Match!
112
+ # Only one Match!
90
113
  elsif matches.count == 1
91
114
  auto_update(matches.first, word)
92
115
 
93
- # Print List of Options
116
+ # Print List of Options
94
117
  elsif matches.count > 1
95
118
  puts matches.join("\t").pastel(:bright_green)
96
119
 
97
- # General Filename Matching
120
+ # General Filename Matching
98
121
  elsif !file_matches(word).empty?
99
122
  auto_files(file_matches(word), word)
100
123
 
101
- # Submodule Autocompletion
124
+ # Submodule Autocompletion
102
125
  elsif current_methods.include?('auto_complete')
103
126
  update_text = current_location.auto_complete(@list, word)
104
127
  auto_update(update_text, word) unless update_text.blank?
@@ -110,7 +133,7 @@ module GreenHat
110
133
  if matches.count == 1
111
134
  auto_update(matches.first, word)
112
135
 
113
- # Print List of Options
136
+ # Print List of Options
114
137
  elsif matches.count > 1
115
138
  auto_update(common_substr(matches), word)
116
139
  puts matches.join("\t").pastel(:bright_green)
@@ -222,12 +245,11 @@ module GreenHat
222
245
  run!
223
246
 
224
247
  return true # End Early
225
-
226
248
  elsif current_submodule?
227
249
  @list.shift
228
250
  elsif submodule?
229
251
  submodule!
230
- # Prepend Default if exists
252
+ # Prepend Default if exists
231
253
  elsif default?
232
254
  @list.unshift 'default'
233
255
  else
@@ -261,7 +283,6 @@ module GreenHat
261
283
 
262
284
  puts "=> #{item.to_s.pastel(:blue)}"
263
285
  end
264
-
265
286
  end
266
287
 
267
288
  puts ''
@@ -343,121 +364,13 @@ module GreenHat
343
364
  @quiet
344
365
  end
345
366
 
346
- # Toggle Quiet Settings
347
367
  def self.quiet!
348
- @quiet = !@quiet
349
- end
350
-
351
- def self.cli_help
352
- Shell.version
353
- puts
354
- puts 'Usage'.pastel(:yellow)
355
- puts ' greenhat <sos-archive.tgz> <sos-archive2.tgz> '
356
- puts ' greenhat <sos-archive.tgz> -q --command=df'
357
- puts
358
-
359
- puts 'Options'.pastel(:yellow)
360
- puts ' --report, -r'.pastel(:green)
361
- puts ' Run `report` against archives and exit'
362
- puts
363
-
364
- puts ' --quiet, -r'.pastel(:green)
365
- puts ' Surpress GreenHat logging output'
366
- puts
367
-
368
- puts ' --load, -l'.pastel(:green)
369
- puts ' Automatically attempt to read/parse/preload all included files'
370
- puts
371
-
372
- puts ' --command, -c'.pastel(:green)
373
- puts ' Run and then exit a GreenHat Shell command'
374
- puts
375
-
376
- puts ' --version, -v'.pastel(:green)
377
- puts ' Print version and exit'
378
- puts
379
- end
380
-
381
- # Arguments before general processing
382
- def self.pre_args(flags, files)
383
- # Help
384
- if flags?(%i[help h], flags)
385
- cli_help
386
- exit 0
387
- end
388
-
389
- # Version
390
- if flags?(%i[version v], flags)
391
- Shell.version
392
- exit 0
393
- end
394
-
395
- # Quiet Flag
396
- @quiet = true if flags?(%i[quiet q], flags)
397
-
398
- # rubocop:disable Style/GuardClause
399
- # MIA Files
400
- if files.empty? || files.count { |x| File.exist? x }.zero?
401
- puts "No arguments or files don't exist".pastel(:red)
402
- puts 'Usage: greenhat <sos-archive.tgz> <sos-archive2.tgz>'
403
- cli_help
404
- Shell.version
405
- end
406
- # rubocop:enable Style/GuardClause
407
- end
408
-
409
- # Arguments to be handled after general processing
410
- def self.post_args(flags)
411
- # Run report and exit / Don't Clear for reports
412
- if flags?(%i[report r], flags)
413
- @quiet = true
414
- # Don't Use Pagination
415
- GreenHat::Shell.report(['--raw'])
416
- exit 0
417
- else
418
- clear_screen
419
- end
420
-
421
- # CTL Tails need to be parsed for new 'things'
422
- Thing.where(kind: :gitlab_tail)&.map(&:process)
423
- Thing.where(kind: :kube_webservice)&.map(&:process)
424
-
425
- Thing.all.each(&:process) if flags?(%i[load l], flags)
426
- end
427
-
428
- # Helper to Simplify checking flags
429
- def self.flags?(list = [], flags = {})
430
- list.any? { |x| flags.key? x }
368
+ @quiet = true
431
369
  end
432
370
 
433
- # If no arguments Supplied Print and quit - rather than nasty exception
434
- def self.start(raw)
435
- Settings.start
436
- files, flags, args = Args.parse(raw)
437
- pre_args(flags, files)
438
- load_files files
439
- run_command(args) if args.any? { |arg| run_command?(arg) }
440
- post_args(flags)
441
-
442
- value ||= '' # Empty Start
443
-
444
- loop do
445
- line = reader.read_line(readline_notch, value: value)
446
- value = '' # Remove Afterwards
447
-
448
- if reader.breaker
449
- value = line
450
- puts ''
451
- next
452
- end
453
-
454
- break if line =~ /^exit/i
455
-
456
- Settings.cmd_add(line) unless line.blank?
457
-
458
- process
459
- run
460
- end
371
+ # Toggle Quiet Settings
372
+ def self.quiet_toggle
373
+ @quiet = !@quiet
461
374
  end
462
375
 
463
376
  def self.run_command?(arg)
@@ -479,20 +392,6 @@ module GreenHat
479
392
  exit 0
480
393
  end
481
394
 
482
- def self.load_files(files)
483
- # TODO: Web Helpers?
484
- # suppress_output { GreenHat::Web.start }
485
-
486
- # Don't double up on archives / Only Existing files
487
- puts 'Loading Archives'.pastel(:blue) unless Cli.quiet
488
- files.uniq.each do |file|
489
- next unless File.exist?(file)
490
-
491
- puts "- #{file}".pastel(:magenta) unless Cli.quiet
492
- ArchiveLoader.load file
493
- end
494
- end
495
-
496
395
  def self.suppress_output
497
396
  original_stderr = $stderr.clone
498
397
  original_stdout = $stdout.clone
@@ -530,5 +429,6 @@ module GreenHat
530
429
  exit 1
531
430
  end
532
431
  end
432
+
533
433
  # rubocop:enable Metrics/ModuleLength
534
434
  end
@@ -0,0 +1,170 @@
1
+ # Top level namespace
2
+ module GreenHat
3
+ # Entrypoint Methods
4
+ # Command Line Args / File Parsing etc
5
+ module Entrypoint
6
+ # If no arguments Supplied Print and quit - rather than nasty exception
7
+ def self.start(raw)
8
+ @clear = true # Reset screen by default
9
+ Settings.start
10
+ files, flags, args = Args.parse(raw)
11
+ pre_args(flags, files)
12
+ load_files files
13
+ Cli.run_command(args) if args.any? { |arg| Cli.run_command?(arg) }
14
+ post_args(flags)
15
+ post_setup(flags)
16
+
17
+ Cli.start # Kick over to CLI
18
+ end
19
+
20
+ # Arguments before general processing
21
+ def self.pre_args(flags, files)
22
+ # Help
23
+ if flags?(%i[help h], flags)
24
+ cli_help
25
+ exit 0
26
+ end
27
+
28
+ # Version
29
+ if flags?(%i[version v], flags)
30
+ Shell.version
31
+ exit 0
32
+ end
33
+
34
+ # Assume Raw Setting
35
+ Settings.settings[:assume_raw] = true if flags?(%i[no-prompt np], flags)
36
+ Settings.settings[:assume_raw] = false if flags?(%i[prompt p], flags)
37
+
38
+ # Quiet Flag
39
+ Cli.quiet! if flags?(%i[quiet q], flags)
40
+
41
+ if flags?(%i[load-local ll], flags)
42
+ # Hook in loading local
43
+ Shell.load_local(false)
44
+ elsif files.empty? || files.count { |x| File.exist? x }.zero?
45
+ # MIA Files
46
+ puts "No arguments or files don't exist".pastel(:red)
47
+ puts 'Usage: greenhat <sos-archive.tgz> <sos-archive2.tgz>'
48
+ puts 'See `--help`'
49
+
50
+ @clear = false # Don't hide messages
51
+
52
+ Shell.version
53
+ end
54
+ end
55
+
56
+ # Arguments to be handled after general processing
57
+ def self.post_args(flags)
58
+ # Supress Color
59
+ GreenHat::Settings.settings[:color] = false if flags?(%i[no-color n], flags)
60
+
61
+ # Run report and exit / Don't Clear for reports
62
+ if flags?(%i[report r], flags)
63
+ Cli.quiet!
64
+ # Don't Use Pagination
65
+ GreenHat::Shell.report(['--raw'])
66
+ exit 0
67
+ elsif flags?(%i[full-report f], flags)
68
+ Cli.quiet!
69
+ # Don't Use Pagination
70
+ GreenHat::Shell.report(['--raw', '--full'])
71
+ exit 0
72
+ elsif flags?(%i[markdown m], flags)
73
+ Cli.quiet!
74
+ # Don't Use Pagination
75
+ GreenHat::Shell.markdown_report(['--raw'])
76
+ exit 0
77
+ elsif @clear
78
+ Cli.clear_screen
79
+ end
80
+ end
81
+
82
+ def self.post_setup(flags)
83
+ # CTL Tails need to be parsed for new 'things'
84
+ Thing.where(kind: :gitlab_tail)&.map(&:process)
85
+ Thing.where(kind: :kube_webservice)&.map(&:process)
86
+
87
+ Thing.all.each(&:process) if flags?(%i[load l], flags)
88
+
89
+ Shell.web if flags?(%i[web w], flags)
90
+ end
91
+
92
+ # Helper to Simplify checking flags
93
+ def self.flags?(list = [], flags = {})
94
+ list.any? { |x| flags.key? x }
95
+ end
96
+
97
+ def self.load_files(files)
98
+ # Don't double up on archives / Only Existing files
99
+ puts 'Loading Archives'.pastel(:blue) unless Cli.quiet
100
+ files.uniq.each do |file|
101
+ next unless File.exist?(file)
102
+
103
+ puts "- #{file}".pastel(:magenta) unless Cli.quiet
104
+ ArchiveLoader.load file
105
+ end
106
+ end
107
+
108
+ # rubocop:disable Metrics/MethodLength
109
+ def self.cli_help
110
+ Shell.version
111
+ puts
112
+ puts 'Usage'.pastel(:yellow)
113
+ puts ' greenhat <sos-archive.tgz> <sos-archive2.tgz> '
114
+ puts ' greenhat <sos-archive.tgz> -q --command=df'
115
+ puts
116
+
117
+ puts 'Options'.pastel(:yellow)
118
+ puts ' --report, -r'.pastel(:green)
119
+ puts ' Run `report` against archives and exit'
120
+ puts
121
+
122
+ puts ' --full-report, -f'.pastel(:green)
123
+ puts ' Run `report` with all details. e.g. include fast-stats top/errors'
124
+ puts
125
+
126
+ puts ' --markdown, -m'.pastel(:green)
127
+ puts ' Run `markdown_report` against archives and exit'
128
+ puts
129
+
130
+ puts ' --quiet, -r'.pastel(:green)
131
+ puts ' Surpress GreenHat logging output'
132
+ puts
133
+
134
+ puts ' --load, -l'.pastel(:green)
135
+ puts ' Automatically attempt to read/parse/preload all included files'
136
+ puts
137
+
138
+ puts ' --load-local, -ll'.pastel(:green)
139
+ puts ' Load log files from locations on an Omnibus install'
140
+ puts
141
+
142
+ puts ' --prompt, -p'.pastel(:green)
143
+ puts ' Override settings / Assume Prompt'
144
+ puts
145
+
146
+ puts ' --no-prompt, -np'.pastel(:green)
147
+ puts ' Do not prompt for file types / Assume Raw or JSON'
148
+ puts
149
+
150
+ puts ' --command, -c'.pastel(:green)
151
+ puts ' Run and then exit a GreenHat Shell command'
152
+ puts
153
+
154
+ puts ' --web, -w'.pastel(:green)
155
+ puts ' Start Sinatra Webservice on load (4567)'
156
+ puts
157
+
158
+ puts ' --no-color, -n'.pastel(:green)
159
+ puts ' Disable color output'
160
+ puts
161
+
162
+ puts ' --version, -v'.pastel(:green)
163
+ puts ' Print version and exit'
164
+ puts
165
+ end
166
+ # rubocop:enable Metrics/MethodLength
167
+
168
+ # ==========================================================
169
+ end
170
+ end