greenhat 0.2.0 → 0.3.3

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/lib/greenhat/accessors/disk.rb +13 -13
  3. data/lib/greenhat/accessors/gitlab.rb +75 -0
  4. data/lib/greenhat/accessors/memory.rb +10 -10
  5. data/lib/greenhat/accessors/process.rb +4 -0
  6. data/lib/greenhat/cli.rb +147 -58
  7. data/lib/greenhat/color.rb +27 -0
  8. data/lib/greenhat/logbot.rb +9 -9
  9. data/lib/greenhat/settings.rb +27 -7
  10. data/lib/greenhat/shell/args.rb +146 -0
  11. data/lib/greenhat/shell/cat.rb +25 -73
  12. data/lib/greenhat/shell/color_string.rb +8 -8
  13. data/lib/greenhat/shell/disk.rb +31 -4
  14. data/lib/greenhat/shell/faststats.rb +103 -56
  15. data/lib/greenhat/shell/field_helper.rb +75 -0
  16. data/lib/greenhat/shell/filter_help.rb +162 -0
  17. data/lib/greenhat/shell/gitlab.rb +61 -2
  18. data/lib/greenhat/shell/help.rb +98 -15
  19. data/lib/greenhat/shell/list.rb +46 -0
  20. data/lib/greenhat/shell/log.rb +118 -104
  21. data/lib/greenhat/shell/page.rb +11 -5
  22. data/lib/greenhat/shell/process.rb +29 -17
  23. data/lib/greenhat/shell/report.rb +37 -47
  24. data/lib/greenhat/shell/shell_helper.rb +661 -0
  25. data/lib/greenhat/shell.rb +23 -9
  26. data/lib/greenhat/thing/file_types.rb +31 -5
  27. data/lib/greenhat/thing/formatters/json_shellwords.rb +0 -3
  28. data/lib/greenhat/thing/formatters/nginx.rb +44 -0
  29. data/lib/greenhat/thing/helpers.rb +4 -4
  30. data/lib/greenhat/thing/kind.rb +9 -2
  31. data/lib/greenhat/thing/spinner.rb +3 -3
  32. data/lib/greenhat/thing.rb +25 -3
  33. data/lib/greenhat/tty/columns.rb +4 -0
  34. data/lib/greenhat/version.rb +1 -1
  35. data/lib/greenhat.rb +15 -14
  36. metadata +38 -18
  37. data/lib/greenhat/shell/filter.rb +0 -128
  38. data/lib/greenhat/shell/helper.rb +0 -584
@@ -2,7 +2,9 @@ module GreenHat
2
2
  # Root Level Shell
3
3
  module Shell
4
4
  def self.pry
5
+ # rubocop:disable Lint/Debugger
5
6
  binding.pry
7
+ # rubocop:enable Lint/Debugger
6
8
  end
7
9
 
8
10
  def self.df
@@ -34,7 +36,7 @@ module GreenHat
34
36
  file_list.each do |file|
35
37
  next if File.size(file).zero?
36
38
 
37
- puts "- Loading #{file.colorize(:green)}"
39
+ puts "- Loading #{file.pastel(:green)}"
38
40
 
39
41
  archive.things_create(file: file).setup
40
42
  end
@@ -42,14 +44,26 @@ module GreenHat
42
44
 
43
45
  def self.debug
44
46
  ENV['DEBUG'] = if ENV['DEBUG']
45
- puts "Debug #{'Off'.colorize(:red)}"
47
+ puts "GreenHat Debug Logging #{'Off'.pastel(:red)}"
46
48
  nil
47
49
  else
48
- puts "Debug #{'On'.colorize(:green)}"
50
+ puts "GreenHat Debug Logging #{'On'.pastel(:green)}"
49
51
  'true'
50
52
  end
51
53
  end
52
54
 
55
+ def self.quiet
56
+ Cli.quiet!
57
+
58
+ if Cli.quiet
59
+ puts "GreenHat Quiet Logging #{'Off'.pastel(:red)}"
60
+ nil
61
+ else
62
+ puts "GreenHat Quiet Logging #{'On'.pastel(:green)}"
63
+ 'true'
64
+ end
65
+ end
66
+
53
67
  def self.uptime
54
68
  Shell::Cat.default ['uptime']
55
69
  end
@@ -68,21 +82,21 @@ module GreenHat
68
82
 
69
83
  def self.history
70
84
  Settings.cmd_history_clean.each_with_index do |line, i|
71
- puts "#{i.to_s.ljust(3).colorize(:magenta)} #{line}"
85
+ puts "#{i.to_s.ljust(3).pastel(:magenta)} #{line}"
72
86
  end
73
87
  end
74
88
 
75
89
  def self.ls
76
- GreenHat::Cli.help
90
+ GreenHat::Cli.help(false)
77
91
  end
78
92
 
79
93
  def self.ll
80
- GreenHat::Cli.help
94
+ GreenHat::Cli.help(false)
81
95
  end
82
96
 
83
- def self.about
84
- puts "#{'GreenHat'.colorize(:green)}: #{GreenHat::VERSION.colorize(:blue)}"
85
- puts ' - https://gitlab.com/gitlab-com/support/toolbox/greenhat'.colorize(:cyan)
97
+ def self.version
98
+ puts "#{'GreenHat'.pastel(:green)}: #{GreenHat::VERSION.pastel(:blue)}"
99
+ puts ' - https://gitlab.com/gitlab-com/support/toolbox/greenhat'.pastel(:cyan)
86
100
  end
87
101
  end
88
102
  end
@@ -43,6 +43,13 @@ module GreenHat
43
43
  /dmesg/
44
44
  ]
45
45
  },
46
+ 'repmgrd/current' => {
47
+ format: :bracket_log,
48
+ log: true,
49
+ pattern: [
50
+ %r{repmgrd/current}
51
+ ]
52
+ },
46
53
  'log/syslog' => {
47
54
  format: :syslog,
48
55
  log: true,
@@ -95,6 +102,13 @@ module GreenHat
95
102
  %r{consul/current}
96
103
  ]
97
104
  },
105
+ 'sentinel/current' => {
106
+ format: :time_space,
107
+ log: true,
108
+ pattern: [
109
+ %r{sentinel/current}
110
+ ]
111
+ },
98
112
  'consul/failover_pgbouncer.log' => {
99
113
  format: :raw,
100
114
  log: true,
@@ -323,14 +337,14 @@ module GreenHat
323
337
  ]
324
338
  },
325
339
  'nginx/gitlab_pages_access.log' => {
326
- format: :raw,
340
+ format: :nginx,
327
341
  log: true,
328
342
  pattern: [
329
343
  %r{nginx/gitlab_pages_access.log}
330
344
  ]
331
345
  },
332
346
  'nginx/gitlab_access.log' => {
333
- format: :raw,
347
+ format: :nginx,
334
348
  log: true,
335
349
  pattern: [
336
350
  %r{nginx/gitlab_access.log}
@@ -470,7 +484,13 @@ module GreenHat
470
484
  %r{redis/config},
471
485
  %r{redis-exporter/config},
472
486
  %r{registry/config},
473
- %r{sidekiq/config}
487
+ %r{sidekiq/config},
488
+ %r{pgbouncer/config},
489
+ %r{pgbouncer-exporter/config},
490
+ %r{repmgrd/config},
491
+ %r{sentinel/config},
492
+ %r{consul/config},
493
+ %r{mailroom/current}
474
494
  ]
475
495
  },
476
496
  'redis/current' => {
@@ -481,7 +501,6 @@ module GreenHat
481
501
  %r{redis/@.*}
482
502
  ]
483
503
  },
484
-
485
504
  'nginx/gitlab_error.log' => {
486
505
  format: :time_space,
487
506
  log: true,
@@ -489,6 +508,13 @@ module GreenHat
489
508
  %r{nginx/gitlab_error.log}
490
509
  ]
491
510
  },
511
+ 'nginx/error.log' => {
512
+ format: :raw,
513
+ log: false,
514
+ pattern: [
515
+ %r{nginx/error.log}
516
+ ]
517
+ },
492
518
  'nginx/gitlab_registry_error.log' => {
493
519
  format: :time_space,
494
520
  log: true,
@@ -510,7 +536,7 @@ module GreenHat
510
536
  ]
511
537
  },
512
538
  'nginx/gitlab_registry_access.log' => {
513
- format: :raw,
539
+ format: :nginx,
514
540
  log: true,
515
541
  pattern: [
516
542
  %r{nginx/gitlab_registry_access.log}
@@ -18,9 +18,6 @@ module GreenHat
18
18
 
19
19
  result.sort.to_h
20
20
  rescue StandardError => e
21
- binding.pry
22
- # TODO: Background Logger?
23
- e.message
24
21
  LogBot.warn('JSON Parse', e.message)
25
22
  next
26
23
  end
@@ -0,0 +1,44 @@
1
+ # Top
2
+ module GreenHat
3
+ # Log
4
+ module Formatters
5
+ # ==========================================================================
6
+ # Formatters
7
+ # ==========================================================================
8
+ def format_nginx
9
+ self.result = raw.map do |row|
10
+ ip, _sym, remote_user, rest = row.split(' ', 4)
11
+
12
+ time, rest = rest.split(']', 2)
13
+ time = Time.strptime(time, '[%d/%b/%Y:%H:%M:%S %z')
14
+
15
+ verb, status, bytes, http_referer, http_user_agent, gzip_ratio = Shellwords.split(rest)
16
+
17
+ method, path, http_version = verb.split
18
+
19
+ {
20
+ remote_addr: ip,
21
+ remote_user: remote_user,
22
+ method: method,
23
+ path: path,
24
+ status: status,
25
+ bytes: bytes,
26
+ http_version: http_version,
27
+ http_referer: http_referer,
28
+ http_user_agent: http_user_agent,
29
+ gzip_ratio: gzip_ratio,
30
+ time: time
31
+ }
32
+ end
33
+
34
+ :ok
35
+ end
36
+
37
+ # rubocop:disable Layout/LineLength
38
+ # NGINX Conf: /var/opt/gitlab/nginx/conf/nginx.conf
39
+ # log_format gitlab_access '$remote_addr - $remote_user [$time_local] "$request_method $filtered_request_uri $server_protocol" $status $body_bytes_sent "$filtered_http_referer" "$http_user_agent" $gzip_ratio';
40
+ # rubocop:enable Layout/LineLength
41
+
42
+ # ==========================================================================
43
+ end
44
+ end
@@ -5,10 +5,10 @@ module GreenHat
5
5
  # Console Helper
6
6
  def inspect
7
7
  [
8
- 'Thing'.colorize(:light_black),
9
- kind&.to_s&.colorize(:blue),
10
- type&.colorize(:light_yellow),
11
- name&.colorize(:cyan)
8
+ 'Thing'.pastel(:bright_black),
9
+ kind&.to_s&.pastel(:blue),
10
+ type&.pastel(:bright_yellow),
11
+ name&.pastel(:cyan)
12
12
  ].compact.join(' ')
13
13
  end
14
14
 
@@ -52,7 +52,9 @@ module GreenHat
52
52
 
53
53
  # rubocop:disable Style/SymbolProc
54
54
  def prompt_for_kind
55
+ # rubocop:disable Lint/Debugger
55
56
  binding.pry if ENV['DEBUG']
57
+ # rubocop:enable Lint/Debugger
56
58
 
57
59
  # Default to everything
58
60
  prompt_list = types.clone
@@ -61,13 +63,18 @@ module GreenHat
61
63
  json = check_oj_parse?(first_line)
62
64
 
63
65
  if json
66
+ if Settings.assume_json?
67
+ self.type = 'json'
68
+ return true
69
+ end
70
+
64
71
  prompt_list.select! do |_k, v|
65
72
  v.to_s.include? 'json'
66
73
  end
67
74
  end
68
75
 
69
- puts "Unable to determine file type for #{name.colorize(:yellow)}"
70
- puts "Use '#{'json'.colorize(:cyan)}' or '#{'raw'.colorize(:cyan)}' if there are no matches (see file_types.rb)"
76
+ puts "Unable to determine file type for #{name.pastel(:yellow)}"
77
+ puts "Use '#{'json'.pastel(:cyan)}' or '#{'raw'.pastel(:cyan)}' if there are no matches (see file_types.rb)"
71
78
 
72
79
  option = prompt.select('Wat is this?', prompt_list.keys.sort_by(&:length), filter: true)
73
80
 
@@ -7,7 +7,7 @@ module GreenHat
7
7
 
8
8
  @spin_time = Time.now
9
9
  @spinner = TTY::Spinner.new(
10
- "#{time.colorize(:light_black)} - [:spinner] :title", hide_cursor: true, success_mark: '✔'.colorize(:green)
10
+ "#{time.pastel(:bright_black)} - [:spinner] :title", hide_cursor: true, success_mark: '✔'.pastel(:green)
11
11
  )
12
12
  @spinner.update(title: title)
13
13
 
@@ -25,7 +25,7 @@ module GreenHat
25
25
  title_update = if spin_end.blank?
26
26
  title
27
27
  else
28
- "#{title} (#{spin_end.colorize(:blue)})"
28
+ "#{title} (#{spin_end.pastel(:blue)})"
29
29
  end
30
30
 
31
31
  @spinner.update(title: title_update)
@@ -33,7 +33,7 @@ module GreenHat
33
33
  end
34
34
 
35
35
  def time
36
- Time.now.strftime('%I:%M:%S').colorize(:light_black)
36
+ Time.now.strftime('%I:%M:%S').pastel(:bright_black)
37
37
  end
38
38
 
39
39
  # Replace TimeDifference with https://stackoverflow.com/a/4136485/1678507
@@ -26,9 +26,10 @@ class Thing < Teron
26
26
  field :parsed # Flag for Parsing
27
27
  field :result # Processed Data
28
28
  field :raw_result # Flag for reading raw data
29
+ field :result_fields # All available fields
29
30
 
30
31
  def friendly_name
31
- "#{archive.friendly_name.colorize(:blue)} #{name.colorize(:green)} #{id.colorize(:black)}"
32
+ "#{archive.friendly_name.pastel(:blue)} #{name.pastel(:green)}"
32
33
  end
33
34
 
34
35
  def setup
@@ -49,6 +50,13 @@ class Thing < Teron
49
50
  result
50
51
  end
51
52
 
53
+ # Processor
54
+ def fields
55
+ process unless parsed
56
+
57
+ result_fields
58
+ end
59
+
52
60
  def raw
53
61
  raw_read if raw_result.nil?
54
62
 
@@ -66,7 +74,7 @@ class Thing < Teron
66
74
  end
67
75
 
68
76
  def raw_read
69
- spin_start("Read #{name.colorize(:blue)} #{size.colorize(:light_black)}")
77
+ spin_start("Read #{name.pastel(:blue)} #{size.pastel(:bright_black)}")
70
78
  self.raw_result = File.read(file).split("\n")
71
79
  rescue StandardError => e
72
80
  LogBot.fatal('Raw Read', message: e.message, backtrace: e.backtrace.first)
@@ -103,7 +111,7 @@ class Thing < Teron
103
111
  raw_read if raw_result.nil?
104
112
 
105
113
  if methods.include? formatter
106
- spin_start("Parse #{name.colorize(:blue)} #{kind.to_s.colorize(:light_black)} ")
114
+ spin_start("Parse #{name.pastel(:blue)} #{kind.to_s.pastel(:bright_black)} ")
107
115
  begin
108
116
  send(formatter)
109
117
  rescue StandardError => e
@@ -116,6 +124,20 @@ class Thing < Teron
116
124
 
117
125
  self.parsed = true
118
126
 
127
+ self.result_fields = field_processing
128
+
119
129
  save!
120
130
  end
131
+
132
+ def field_processing
133
+ if data.instance_of?(Array)
134
+ data.select { |x| x.instance_of?(Hash) }.map(&:keys).flatten.uniq
135
+ else
136
+ []
137
+ end
138
+ rescue StandardError => e
139
+ LogBot.fatal('Process', message: e.message, backtrace: e.backtrace.first)
140
+
141
+ []
142
+ end
121
143
  end
@@ -28,6 +28,10 @@ module TTY
28
28
  # THE SHIM! Strings that are too large fail to render correctly to do an empty result
29
29
  # Set the maximum table width to half the screen size. Can't be full size due to the table headers
30
30
  LogBot.debug('TTY Column Width') if ENV['DEBUG']
31
+
32
+ # TODO: Check Empty Results
33
+ return [0] if table.data.empty?
34
+
31
35
  extract_widths(table.data).map { |x| x >= TTY::Screen.width ? (TTY::Screen.width * 3 / 4) : x }
32
36
 
33
37
  else
@@ -1,3 +1,3 @@
1
1
  module GreenHat
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.3'.freeze
3
3
  end
data/lib/greenhat.rb CHANGED
@@ -1,27 +1,28 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'action_view'
4
+ require 'active_support'
5
+ require 'active_support/core_ext'
6
+ require 'amazing_print'
4
7
  require 'benchmark'
8
+ require 'dotenv'
5
9
  require 'find'
6
- require 'tty-prompt'
7
- require 'tty-spinner'
8
- require 'tty-table'
9
- require 'tty-pager'
10
- require 'tty-cursor'
11
- require 'tty-reader'
12
10
  require 'hash_dot'
13
11
  require 'oj'
14
- require 'slim'
15
- require 'active_support'
16
- require 'active_support/core_ext'
12
+ require 'pastel'
17
13
  require 'pry'
18
- require 'amazing_print'
19
- require 'colorize'
14
+ require 'require_all'
20
15
  require 'semantic'
16
+ require 'slim'
17
+ require 'tty-cursor'
18
+ require 'tty-pager'
21
19
  require 'tty-progressbar'
22
- require 'require_all'
20
+ require 'tty-prompt'
21
+ require 'tty-reader'
22
+ require 'tty-spinner'
23
+ require 'tty-table'
24
+ require 'tty-which'
23
25
  require 'warning'
24
- require 'dotenv'
25
26
 
26
27
  # Custom Gem
27
28
  require 'teron'
@@ -49,6 +50,7 @@ require 'greenhat/archive'
49
50
  require 'greenhat/host'
50
51
  require 'greenhat/logbot'
51
52
  require 'greenhat/settings'
53
+ require 'greenhat/color'
52
54
 
53
55
  # Formatters - Loads Required Files Automatically
54
56
  require 'greenhat/thing/super_log'
@@ -65,7 +67,6 @@ require 'greenhat/thing'
65
67
  require 'greenhat/shell'
66
68
 
67
69
  # TODO: Confirm
68
- # require 'greenhat/thing/log_format'
69
70
  # require 'greenhat/host'
70
71
  # require 'greenhat/web'
71
72
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: greenhat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Davin Walker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-13 00:00:00.000000000 Z
11
+ date: 2021-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: amazing_print
@@ -53,49 +53,49 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.14'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: minitest-reporters
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '13.0'
61
+ version: '1.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '13.0'
68
+ version: '1.4'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubocop
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.12'
75
+ version: '13.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.12'
82
+ version: '13.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: actionview
84
+ name: rubocop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '6.1'
90
- type: :runtime
89
+ version: '1.12'
90
+ type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '6.1'
96
+ version: '1.12'
97
97
  - !ruby/object:Gem::Dependency
98
- name: activesupport
98
+ name: actionview
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
@@ -109,19 +109,19 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '6.1'
111
111
  - !ruby/object:Gem::Dependency
112
- name: colorize
112
+ name: activesupport
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0.8'
117
+ version: '6.1'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0.8'
124
+ version: '6.1'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: did_you_mean
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -360,6 +360,20 @@ dependencies:
360
360
  - - "~>"
361
361
  - !ruby/object:Gem::Version
362
362
  version: '0.12'
363
+ - !ruby/object:Gem::Dependency
364
+ name: tty-which
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - "~>"
368
+ - !ruby/object:Gem::Version
369
+ version: '0.5'
370
+ type: :runtime
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - "~>"
375
+ - !ruby/object:Gem::Version
376
+ version: '0.5'
363
377
  - !ruby/object:Gem::Dependency
364
378
  name: warning
365
379
  requirement: !ruby/object:Gem::Requirement
@@ -386,6 +400,7 @@ files:
386
400
  - bin/greenhat
387
401
  - lib/greenhat.rb
388
402
  - lib/greenhat/accessors/disk.rb
403
+ - lib/greenhat/accessors/gitlab.rb
389
404
  - lib/greenhat/accessors/logs/production.rb
390
405
  - lib/greenhat/accessors/logs/sidekiq.rb
391
406
  - lib/greenhat/accessors/memory.rb
@@ -393,25 +408,29 @@ files:
393
408
  - lib/greenhat/accessors/process.rb
394
409
  - lib/greenhat/archive.rb
395
410
  - lib/greenhat/cli.rb
411
+ - lib/greenhat/color.rb
396
412
  - lib/greenhat/host.rb
397
413
  - lib/greenhat/logbot.rb
398
414
  - lib/greenhat/pry_helpers.rb
399
415
  - lib/greenhat/settings.rb
400
416
  - lib/greenhat/shell.rb
417
+ - lib/greenhat/shell/args.rb
401
418
  - lib/greenhat/shell/cat.rb
402
419
  - lib/greenhat/shell/color_string.rb
403
420
  - lib/greenhat/shell/disk.rb
404
421
  - lib/greenhat/shell/faststats.rb
405
- - lib/greenhat/shell/filter.rb
422
+ - lib/greenhat/shell/field_helper.rb
423
+ - lib/greenhat/shell/filter_help.rb
406
424
  - lib/greenhat/shell/gitlab.rb
407
425
  - lib/greenhat/shell/help.rb
408
- - lib/greenhat/shell/helper.rb
426
+ - lib/greenhat/shell/list.rb
409
427
  - lib/greenhat/shell/log.rb
410
428
  - lib/greenhat/shell/memory.rb
411
429
  - lib/greenhat/shell/network.rb
412
430
  - lib/greenhat/shell/page.rb
413
431
  - lib/greenhat/shell/process.rb
414
432
  - lib/greenhat/shell/report.rb
433
+ - lib/greenhat/shell/shell_helper.rb
415
434
  - lib/greenhat/thing.rb
416
435
  - lib/greenhat/thing/file_types.rb
417
436
  - lib/greenhat/thing/formatters/api_json.rb
@@ -426,6 +445,7 @@ files:
426
445
  - lib/greenhat/thing/formatters/json.rb
427
446
  - lib/greenhat/thing/formatters/json_shellwords.rb
428
447
  - lib/greenhat/thing/formatters/multiline_json.rb
448
+ - lib/greenhat/thing/formatters/nginx.rb
429
449
  - lib/greenhat/thing/formatters/raw.rb
430
450
  - lib/greenhat/thing/formatters/shellwords.rb
431
451
  - lib/greenhat/thing/formatters/syslog.rb