greenhat 0.3.0 → 0.3.4
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 +41 -0
- data/lib/greenhat/accessors/gitlab.rb +26 -0
- data/lib/greenhat/archive.rb +4 -0
- data/lib/greenhat/cli.rb +21 -6
- data/lib/greenhat/shell/args.rb +2 -2
- data/lib/greenhat/shell/faststats.rb +27 -0
- data/lib/greenhat/shell/field_helper.rb +75 -0
- data/lib/greenhat/shell/filter_help.rb +224 -4
- data/lib/greenhat/shell/help.rb +2 -0
- data/lib/greenhat/shell/log.rb +52 -2
- data/lib/greenhat/shell/markdown.rb +356 -0
- data/lib/greenhat/shell/report.rb +44 -7
- data/lib/greenhat/shell/shell_helper.rb +88 -18
- data/lib/greenhat/thing/file_types.rb +104 -12
- data/lib/greenhat/thing/formatters/kube_json.rb +36 -0
- data/lib/greenhat/thing/formatters/kube_nginx.rb +48 -0
- data/lib/greenhat/thing/formatters/kube_webservice.rb +51 -0
- data/lib/greenhat/thing/formatters/nginx.rb +44 -0
- data/lib/greenhat/thing/formatters/registry.rb +47 -0
- data/lib/greenhat/thing.rb +22 -0
- data/lib/greenhat/version.rb +1 -1
- data/lib/greenhat.rb +1 -0
- metadata +23 -2
@@ -43,6 +43,13 @@ module GreenHat
|
|
43
43
|
/dmesg/
|
44
44
|
]
|
45
45
|
},
|
46
|
+
'lets-encrypt/renewal' => {
|
47
|
+
format: :bracket_log,
|
48
|
+
log: true,
|
49
|
+
pattern: [
|
50
|
+
%r{lets-encrypt/renewal}
|
51
|
+
]
|
52
|
+
},
|
46
53
|
'repmgrd/current' => {
|
47
54
|
format: :bracket_log,
|
48
55
|
log: true,
|
@@ -225,7 +232,8 @@ module GreenHat
|
|
225
232
|
format: :json,
|
226
233
|
log: true,
|
227
234
|
pattern: [
|
228
|
-
%r{gitlab-rails/audit_json.log}
|
235
|
+
%r{gitlab-rails/audit_json.log},
|
236
|
+
%r{webservice.log/audit_json.log}
|
229
237
|
]
|
230
238
|
},
|
231
239
|
'gitlab-rails/auth.log' => {
|
@@ -336,15 +344,22 @@ module GreenHat
|
|
336
344
|
%r{nginx/current}
|
337
345
|
]
|
338
346
|
},
|
347
|
+
'nginx-ingress.log' => {
|
348
|
+
format: :kube_nginx,
|
349
|
+
log: true,
|
350
|
+
pattern: [
|
351
|
+
/nginx-ingress.log/
|
352
|
+
]
|
353
|
+
},
|
339
354
|
'nginx/gitlab_pages_access.log' => {
|
340
|
-
format: :
|
355
|
+
format: :nginx,
|
341
356
|
log: true,
|
342
357
|
pattern: [
|
343
358
|
%r{nginx/gitlab_pages_access.log}
|
344
359
|
]
|
345
360
|
},
|
346
361
|
'nginx/gitlab_access.log' => {
|
347
|
-
format: :
|
362
|
+
format: :nginx,
|
348
363
|
log: true,
|
349
364
|
pattern: [
|
350
365
|
%r{nginx/gitlab_access.log}
|
@@ -422,7 +437,7 @@ module GreenHat
|
|
422
437
|
]
|
423
438
|
},
|
424
439
|
'registry/current' => {
|
425
|
-
format: :
|
440
|
+
format: :time_registry,
|
426
441
|
log: true,
|
427
442
|
pattern: [
|
428
443
|
%r{registry/current},
|
@@ -444,16 +459,18 @@ module GreenHat
|
|
444
459
|
},
|
445
460
|
'puma/puma_stderr.log' => {
|
446
461
|
format: :raw,
|
447
|
-
log:
|
462
|
+
log: false,
|
448
463
|
pattern: [
|
449
|
-
%r{puma/puma_stderr.log}
|
464
|
+
%r{puma/puma_stderr.log},
|
465
|
+
%r{webservice.log/puma.stderr.log}
|
450
466
|
]
|
451
467
|
},
|
452
468
|
'puma/puma_stdout.log' => {
|
453
469
|
format: :json,
|
454
470
|
log: true,
|
455
471
|
pattern: [
|
456
|
-
%r{puma/puma_stdout.log}
|
472
|
+
%r{puma/puma_stdout.log},
|
473
|
+
%r{webservice.log/puma.stdout.log}
|
457
474
|
]
|
458
475
|
},
|
459
476
|
'gitlab-pages/current' => {
|
@@ -489,7 +506,8 @@ module GreenHat
|
|
489
506
|
%r{pgbouncer-exporter/config},
|
490
507
|
%r{repmgrd/config},
|
491
508
|
%r{sentinel/config},
|
492
|
-
%r{consul/config}
|
509
|
+
%r{consul/config},
|
510
|
+
%r{mailroom/current}
|
493
511
|
]
|
494
512
|
},
|
495
513
|
'redis/current' => {
|
@@ -500,7 +518,6 @@ module GreenHat
|
|
500
518
|
%r{redis/@.*}
|
501
519
|
]
|
502
520
|
},
|
503
|
-
|
504
521
|
'nginx/gitlab_error.log' => {
|
505
522
|
format: :time_space,
|
506
523
|
log: true,
|
@@ -508,6 +525,13 @@ module GreenHat
|
|
508
525
|
%r{nginx/gitlab_error.log}
|
509
526
|
]
|
510
527
|
},
|
528
|
+
'nginx/error.log' => {
|
529
|
+
format: :raw,
|
530
|
+
log: false,
|
531
|
+
pattern: [
|
532
|
+
%r{nginx/error.log}
|
533
|
+
]
|
534
|
+
},
|
511
535
|
'nginx/gitlab_registry_error.log' => {
|
512
536
|
format: :time_space,
|
513
537
|
log: true,
|
@@ -529,7 +553,7 @@ module GreenHat
|
|
529
553
|
]
|
530
554
|
},
|
531
555
|
'nginx/gitlab_registry_access.log' => {
|
532
|
-
format: :
|
556
|
+
format: :nginx,
|
533
557
|
log: true,
|
534
558
|
pattern: [
|
535
559
|
%r{nginx/gitlab_registry_access.log}
|
@@ -738,13 +762,15 @@ module GreenHat
|
|
738
762
|
'gitlab-rails/application.log' => {
|
739
763
|
format: :raw,
|
740
764
|
pattern: [
|
741
|
-
%r{gitlab-rails/application.log}
|
765
|
+
%r{gitlab-rails/application.log},
|
766
|
+
%r{webservice.log/application.log}
|
742
767
|
]
|
743
768
|
},
|
744
769
|
'gitlab-rails/production.log' => {
|
745
770
|
format: :raw,
|
746
771
|
pattern: [
|
747
|
-
%r{gitlab-rails/production.log}
|
772
|
+
%r{gitlab-rails/production.log},
|
773
|
+
%r{webservice.log/production.log}
|
748
774
|
]
|
749
775
|
},
|
750
776
|
'gitlab/version-manifest.txt' => {
|
@@ -758,6 +784,72 @@ module GreenHat
|
|
758
784
|
pattern: [
|
759
785
|
%r{sidekiq/perf.data}
|
760
786
|
]
|
787
|
+
},
|
788
|
+
|
789
|
+
# ======================================================================
|
790
|
+
# KubeSoS TODO Section
|
791
|
+
# Things I am going to shortcut and set to raw for now
|
792
|
+
# ======================================================================
|
793
|
+
# Attempted Parsing
|
794
|
+
'kubesos_json' => {
|
795
|
+
log: true,
|
796
|
+
format: :kube_json,
|
797
|
+
pattern: [
|
798
|
+
/gitaly.log/
|
799
|
+
]
|
800
|
+
},
|
801
|
+
|
802
|
+
'kube_webservice' => {
|
803
|
+
log: false,
|
804
|
+
format: :kube_webservice,
|
805
|
+
pattern: [
|
806
|
+
/^webservice\.log$/
|
807
|
+
]
|
808
|
+
},
|
809
|
+
|
810
|
+
'kubesos' => {
|
811
|
+
format: :raw,
|
812
|
+
pattern: [
|
813
|
+
/all_values.yaml/,
|
814
|
+
%r{webservice.log/sidekiq_client.log},
|
815
|
+
/chart-version/,
|
816
|
+
/configmaps/,
|
817
|
+
/describe_deployments/,
|
818
|
+
/describe_ingress/,
|
819
|
+
/describe_nodes/,
|
820
|
+
/describe_pods/,
|
821
|
+
/describe_pv/,
|
822
|
+
/describe_pvc/,
|
823
|
+
/events/,
|
824
|
+
/get_deployments/,
|
825
|
+
/get_endpoints/,
|
826
|
+
/get_jobs/,
|
827
|
+
/get_pods/,
|
828
|
+
/get_pv/,
|
829
|
+
/get_pvc/,
|
830
|
+
/get_services/,
|
831
|
+
/gitaly.log/,
|
832
|
+
/gitlab-exporter.log/,
|
833
|
+
/gitlab-pages.log/,
|
834
|
+
/gitlab-shell.log/,
|
835
|
+
/grafana.log/,
|
836
|
+
/helm-version/,
|
837
|
+
/kubectl-check/,
|
838
|
+
/migrations.log/,
|
839
|
+
/minio.log/,
|
840
|
+
/nfs-client-provisioner.log/,
|
841
|
+
/operator.log/,
|
842
|
+
/postgresql.log/,
|
843
|
+
/prometheus.log/,
|
844
|
+
/redis.log/,
|
845
|
+
/registry.log/,
|
846
|
+
/secrets/,
|
847
|
+
/sidekiq.log/,
|
848
|
+
/task-runner.log/,
|
849
|
+
/top_nodes/,
|
850
|
+
/top_pods/,
|
851
|
+
/user_supplied_values.yaml/
|
852
|
+
]
|
761
853
|
}
|
762
854
|
}
|
763
855
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Top
|
2
|
+
module GreenHat
|
3
|
+
# Log
|
4
|
+
module Formatters
|
5
|
+
# ==========================================================================
|
6
|
+
# K8s logs seem to have a lot of non-json entries
|
7
|
+
# Extract all json, ignore everything else
|
8
|
+
# ==========================================================================
|
9
|
+
def format_kube_json
|
10
|
+
self.result = raw.map do |row|
|
11
|
+
# Skip all non-json
|
12
|
+
next unless row.first == '{'
|
13
|
+
|
14
|
+
result = begin
|
15
|
+
Oj.load row
|
16
|
+
rescue EncodingError
|
17
|
+
puts
|
18
|
+
next
|
19
|
+
end
|
20
|
+
|
21
|
+
# Parsing Time
|
22
|
+
format_json_traverse result
|
23
|
+
|
24
|
+
result.sort.to_h
|
25
|
+
rescue StandardError => e
|
26
|
+
# TODO: Background Logger?
|
27
|
+
e.message
|
28
|
+
LogBot.warn('JSON Parse', e.message)
|
29
|
+
next
|
30
|
+
end.compact
|
31
|
+
|
32
|
+
:ok
|
33
|
+
end
|
34
|
+
# =========================================================================
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Top
|
2
|
+
module GreenHat
|
3
|
+
# Log
|
4
|
+
module Formatters
|
5
|
+
# ==========================================================================
|
6
|
+
# Formatters
|
7
|
+
# ==========================================================================
|
8
|
+
def format_kube_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
|
+
|
33
|
+
# Fall back for malformed logs
|
34
|
+
rescue StandardError
|
35
|
+
{ message: row }
|
36
|
+
end
|
37
|
+
|
38
|
+
:ok
|
39
|
+
end
|
40
|
+
|
41
|
+
# rubocop:disable Layout/LineLength
|
42
|
+
# NGINX Conf: /var/opt/gitlab/nginx/conf/nginx.conf
|
43
|
+
# 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';
|
44
|
+
# rubocop:enable Layout/LineLength
|
45
|
+
|
46
|
+
# ==========================================================================
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Top
|
2
|
+
module GreenHat
|
3
|
+
# Log
|
4
|
+
module Formatters
|
5
|
+
# ==========================================================================
|
6
|
+
# Gitlab Tail Formatter
|
7
|
+
# ==========================================================================
|
8
|
+
def format_kube_webservice
|
9
|
+
# Revert to raw for cats
|
10
|
+
self.kind = :raw
|
11
|
+
|
12
|
+
output = {}
|
13
|
+
current_log = nil
|
14
|
+
|
15
|
+
raw.each do |line|
|
16
|
+
next if line.blank?
|
17
|
+
|
18
|
+
if line.include? '*** '
|
19
|
+
current_log = /\*\*\* (.+?) \*\*\*/.match(line).captures.first
|
20
|
+
else
|
21
|
+
output[current_log] ||= [] unless current_log.nil?
|
22
|
+
output[current_log].push line unless current_log.nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Remove Empty Entries
|
27
|
+
output.reject { |_k, v| v.empty? }
|
28
|
+
|
29
|
+
# Root Dir
|
30
|
+
root_dir = "#{$TMP}/#{name}"
|
31
|
+
Dir.mkdir(root_dir)
|
32
|
+
|
33
|
+
# Write Files / Create Things
|
34
|
+
output.each do |k, v|
|
35
|
+
file_name = k.gsub('/var/log/gitlab/', '')
|
36
|
+
|
37
|
+
dir = "#{root_dir}/gitlab-rails"
|
38
|
+
Dir.mkdir(dir) unless File.exist?(dir)
|
39
|
+
|
40
|
+
File.write("#{root_dir}/#{file_name}", v.join("\n"))
|
41
|
+
|
42
|
+
# Thing Setup
|
43
|
+
archive.things_create(file: "#{root_dir}/#{file_name}").setup
|
44
|
+
end
|
45
|
+
|
46
|
+
# Link
|
47
|
+
self.result = raw
|
48
|
+
end
|
49
|
+
# ==========================================================================
|
50
|
+
end
|
51
|
+
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
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Top
|
2
|
+
module GreenHat
|
3
|
+
# Log
|
4
|
+
module Formatters
|
5
|
+
# ==========================================================================
|
6
|
+
# Registry Split
|
7
|
+
# ==========================================================================
|
8
|
+
# https://docs.docker.com/registry/configuration/#log
|
9
|
+
# Formatters text, json
|
10
|
+
# registry['log_formatter'] = "json"
|
11
|
+
# TODO: Logstash (Not working in 14.3)
|
12
|
+
|
13
|
+
def format_time_registry
|
14
|
+
self.result = raw.map do |row|
|
15
|
+
result = row[0] == '{' ? registry_json(row) : registry_shell_words(row)
|
16
|
+
|
17
|
+
# Timestamp Parsing
|
18
|
+
result.ts = Time.parse result.ts if result.key? 'ts'
|
19
|
+
result.time = Time.parse(result.time)
|
20
|
+
|
21
|
+
result
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def registry_shell_words(row)
|
26
|
+
time, msg = row.split(' ', 2)
|
27
|
+
|
28
|
+
output = Shellwords.split(msg).each_with_object({}) do |x, h|
|
29
|
+
key, value = x.split('=')
|
30
|
+
next if value.nil?
|
31
|
+
|
32
|
+
h[key.to_sym] = value.numeric? ? value.to_f : value
|
33
|
+
end
|
34
|
+
|
35
|
+
output[:time] = time
|
36
|
+
|
37
|
+
output
|
38
|
+
end
|
39
|
+
|
40
|
+
def registry_json(msg)
|
41
|
+
Oj.load(msg)
|
42
|
+
rescue EncodingError
|
43
|
+
{ message: msg }
|
44
|
+
end
|
45
|
+
# ==========================================================================
|
46
|
+
end
|
47
|
+
end
|
data/lib/greenhat/thing.rb
CHANGED
@@ -26,6 +26,7 @@ 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
32
|
"#{archive.friendly_name.pastel(:blue)} #{name.pastel(:green)}"
|
@@ -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
|
|
@@ -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
|
data/lib/greenhat/version.rb
CHANGED
data/lib/greenhat.rb
CHANGED
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.3.
|
4
|
+
version: 0.3.4
|
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-
|
11
|
+
date: 2021-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amazing_print
|
@@ -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
|
@@ -405,11 +419,13 @@ files:
|
|
405
419
|
- lib/greenhat/shell/color_string.rb
|
406
420
|
- lib/greenhat/shell/disk.rb
|
407
421
|
- lib/greenhat/shell/faststats.rb
|
422
|
+
- lib/greenhat/shell/field_helper.rb
|
408
423
|
- lib/greenhat/shell/filter_help.rb
|
409
424
|
- lib/greenhat/shell/gitlab.rb
|
410
425
|
- lib/greenhat/shell/help.rb
|
411
426
|
- lib/greenhat/shell/list.rb
|
412
427
|
- lib/greenhat/shell/log.rb
|
428
|
+
- lib/greenhat/shell/markdown.rb
|
413
429
|
- lib/greenhat/shell/memory.rb
|
414
430
|
- lib/greenhat/shell/network.rb
|
415
431
|
- lib/greenhat/shell/page.rb
|
@@ -429,8 +445,13 @@ files:
|
|
429
445
|
- lib/greenhat/thing/formatters/gitlab_status.rb
|
430
446
|
- lib/greenhat/thing/formatters/json.rb
|
431
447
|
- lib/greenhat/thing/formatters/json_shellwords.rb
|
448
|
+
- lib/greenhat/thing/formatters/kube_json.rb
|
449
|
+
- lib/greenhat/thing/formatters/kube_nginx.rb
|
450
|
+
- lib/greenhat/thing/formatters/kube_webservice.rb
|
432
451
|
- lib/greenhat/thing/formatters/multiline_json.rb
|
452
|
+
- lib/greenhat/thing/formatters/nginx.rb
|
433
453
|
- lib/greenhat/thing/formatters/raw.rb
|
454
|
+
- lib/greenhat/thing/formatters/registry.rb
|
434
455
|
- lib/greenhat/thing/formatters/shellwords.rb
|
435
456
|
- lib/greenhat/thing/formatters/syslog.rb
|
436
457
|
- lib/greenhat/thing/formatters/table.rb
|