Skip to content

Commit 7c4135d

Browse files
authored
Merge pull request #334 from replicatedhq/host-preflgihts-ux
Host preflight ux improvements
2 parents bdf843f + 4b78c43 commit 7c4135d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+640
-357
lines changed

cmd/preflight/cli/run.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ func runPreflights(v *viper.Viper, arg string) error {
9393

9494
s := spin.New()
9595
go func() {
96+
lastMsg := ""
9697
for {
9798
select {
9899
case msg, ok := <-progressCh:
@@ -104,6 +105,10 @@ func runPreflights(v *viper.Viper, arg string) error {
104105
c := color.New(color.FgHiRed)
105106
c.Println(fmt.Sprintf("%s\r * %v", cursor.ClearEntireLine(), msg))
106107
case string:
108+
if lastMsg == msg {
109+
break
110+
}
111+
lastMsg = msg
107112
c := color.New(color.FgCyan)
108113
c.Println(fmt.Sprintf("%s\r * %s", cursor.ClearEntireLine(), msg))
109114
}

pkg/analyze/analyzer.go

Lines changed: 21 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package analyzer
22

33
import (
4+
"fmt"
45
"strconv"
56

67
"github.com/pkg/errors"
@@ -40,100 +41,30 @@ func isExcluded(excludeVal multitype.BoolOrString) (bool, error) {
4041
return parsed, nil
4142
}
4243

43-
func HostAnalyze(hostAnalyzer *troubleshootv1beta2.HostAnalyze, getFile getCollectedFileContents, findFiles getChildCollectedFileContents) ([]*AnalyzeResult, error) {
44-
if hostAnalyzer.CPU != nil {
45-
result, err := analyzeHostCPU(hostAnalyzer.CPU, getFile)
46-
if err != nil {
47-
return nil, err
48-
}
49-
return []*AnalyzeResult{result}, nil
50-
}
51-
if hostAnalyzer.TCPLoadBalancer != nil {
52-
result, err := analyzeHostTCPLoadBalancer(hostAnalyzer.TCPLoadBalancer, getFile)
53-
if err != nil {
54-
return nil, err
55-
}
56-
return []*AnalyzeResult{result}, nil
57-
}
58-
if hostAnalyzer.HTTPLoadBalancer != nil {
59-
result, err := analyzeHostHTTPLoadBalancer(hostAnalyzer.HTTPLoadBalancer, getFile)
60-
if err != nil {
61-
return nil, err
62-
}
63-
return []*AnalyzeResult{result}, nil
64-
}
65-
if hostAnalyzer.DiskUsage != nil {
66-
result, err := analyzeHostDiskUsage(hostAnalyzer.DiskUsage, getFile)
67-
if err != nil {
68-
return nil, err
69-
}
70-
return []*AnalyzeResult{result}, nil
71-
}
72-
if hostAnalyzer.Memory != nil {
73-
result, err := analyzeHostMemory(hostAnalyzer.Memory, getFile)
74-
if err != nil {
75-
return nil, err
76-
}
77-
return []*AnalyzeResult{result}, nil
78-
}
79-
if hostAnalyzer.TCPPortStatus != nil {
80-
result, err := analyzeHostTCPPortStatus(hostAnalyzer.TCPPortStatus, getFile)
81-
if err != nil {
82-
return nil, err
83-
}
84-
return []*AnalyzeResult{result}, nil
85-
}
86-
if hostAnalyzer.HTTP != nil {
87-
result, err := analyzeHostHTTP(hostAnalyzer.HTTP, getFile)
88-
if err != nil {
89-
return nil, err
90-
}
91-
return []*AnalyzeResult{result}, nil
44+
func HostAnalyze(hostAnalyzer *troubleshootv1beta2.HostAnalyze, getFile getCollectedFileContents, findFiles getChildCollectedFileContents) []*AnalyzeResult {
45+
analyzer, ok := GetHostAnalyzer(hostAnalyzer)
46+
if !ok {
47+
return NewAnalyzeResultError(analyzer, errors.New("invalid analyzer"))
9248
}
93-
if hostAnalyzer.Time != nil {
94-
result, err := analyzeHostTime(hostAnalyzer.Time, getFile)
95-
if err != nil {
96-
return nil, err
97-
}
98-
return []*AnalyzeResult{result}, nil
99-
}
100-
if hostAnalyzer.BlockDevices != nil {
101-
result, err := analyzeHostBlockDevices(hostAnalyzer.BlockDevices, getFile)
102-
if err != nil {
103-
return nil, err
104-
}
105-
return []*AnalyzeResult{result}, nil
106-
}
107-
if hostAnalyzer.TCPConnect != nil {
108-
result, err := analyzeHostTCPConnect(hostAnalyzer.TCPConnect, getFile)
109-
if err != nil {
110-
return nil, err
111-
}
112-
return []*AnalyzeResult{result}, nil
113-
}
114-
if hostAnalyzer.IPV4Interfaces != nil {
115-
result, err := analyzeHostIPV4Interfaces(hostAnalyzer.IPV4Interfaces, getFile)
116-
if err != nil {
117-
return nil, err
118-
}
119-
return []*AnalyzeResult{result}, nil
120-
}
121-
if hostAnalyzer.FilesystemPerformance != nil {
122-
result, err := analyzeHostFilesystemPerformance(hostAnalyzer.FilesystemPerformance, getFile)
123-
if err != nil {
124-
return nil, err
125-
}
126-
return []*AnalyzeResult{result}, nil
49+
50+
isExcluded, _ := analyzer.IsExcluded()
51+
if isExcluded {
52+
return nil
12753
}
128-
if hostAnalyzer.Certificate != nil {
129-
result, err := analyzeHostCertificate(hostAnalyzer.Certificate, getFile)
130-
if err != nil {
131-
return nil, err
132-
}
133-
return []*AnalyzeResult{result}, nil
54+
55+
result, err := analyzer.Analyze(getFile)
56+
if err != nil {
57+
return NewAnalyzeResultError(analyzer, errors.Wrap(err, "analyze"))
13458
}
59+
return []*AnalyzeResult{result}
60+
}
13561

136-
return nil, errors.New("invalid analyzer")
62+
func NewAnalyzeResultError(analyzer HostAnalyzer, err error) []*AnalyzeResult {
63+
return []*AnalyzeResult{{
64+
IsFail: true,
65+
Title: analyzer.Title(),
66+
Message: fmt.Sprintf("Analyzer Failed: %v", err),
67+
}}
13768
}
13869

13970
func Analyze(analyzer *troubleshootv1beta2.Analyze, getFile getCollectedFileContents, findFiles getChildCollectedFileContents) ([]*AnalyzeResult, error) {

pkg/analyze/host_analyzer.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package analyzer
2+
3+
import troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
4+
5+
type HostAnalyzer interface {
6+
Title() string
7+
IsExcluded() (bool, error)
8+
Analyze(getFile func(string) ([]byte, error)) (*AnalyzeResult, error)
9+
}
10+
11+
func GetHostAnalyzer(analyzer *troubleshootv1beta2.HostAnalyze) (HostAnalyzer, bool) {
12+
switch {
13+
case analyzer.CPU != nil:
14+
return &AnalyzeHostCPU{analyzer.CPU}, true
15+
case analyzer.Memory != nil:
16+
return &AnalyzeHostMemory{analyzer.Memory}, true
17+
case analyzer.TCPLoadBalancer != nil:
18+
return &AnalyzeHostTCPLoadBalancer{analyzer.TCPLoadBalancer}, true
19+
case analyzer.HTTPLoadBalancer != nil:
20+
return &AnalyzeHostHTTPLoadBalancer{analyzer.HTTPLoadBalancer}, true
21+
case analyzer.DiskUsage != nil:
22+
return &AnalyzeHostDiskUsage{analyzer.DiskUsage}, true
23+
case analyzer.TCPPortStatus != nil:
24+
return &AnalyzeHostTCPPortStatus{analyzer.TCPPortStatus}, true
25+
case analyzer.HTTP != nil:
26+
return &AnalyzeHostHTTP{analyzer.HTTP}, true
27+
case analyzer.Time != nil:
28+
return &AnalyzeHostTime{analyzer.Time}, true
29+
case analyzer.BlockDevices != nil:
30+
return &AnalyzeHostBlockDevices{analyzer.BlockDevices}, true
31+
case analyzer.TCPConnect != nil:
32+
return &AnalyzeHostTCPConnect{analyzer.TCPConnect}, true
33+
case analyzer.IPV4Interfaces != nil:
34+
return &AnalyzeHostIPV4Interfaces{analyzer.IPV4Interfaces}, true
35+
case analyzer.FilesystemPerformance != nil:
36+
return &AnalyzeHostFilesystemPerformance{analyzer.FilesystemPerformance}, true
37+
case analyzer.Certificate != nil:
38+
return &AnalyzeHostCertificate{analyzer.Certificate}, true
39+
default:
40+
return nil, false
41+
}
42+
}
43+
44+
func hostAnalyzerTitleOrDefault(meta troubleshootv1beta2.AnalyzeMeta, defaultTitle string) string {
45+
if meta.CheckName != "" {
46+
return meta.CheckName
47+
}
48+
return defaultTitle
49+
}

pkg/analyze/host_block_devices.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,21 @@ import (
1212
"github.com/replicatedhq/troubleshoot/pkg/collect"
1313
)
1414

15-
func analyzeHostBlockDevices(hostAnalyzer *troubleshootv1beta2.BlockDevicesAnalyze, getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
15+
type AnalyzeHostBlockDevices struct {
16+
hostAnalyzer *troubleshootv1beta2.BlockDevicesAnalyze
17+
}
18+
19+
func (a *AnalyzeHostBlockDevices) Title() string {
20+
return hostAnalyzerTitleOrDefault(a.hostAnalyzer.AnalyzeMeta, "Block Devices")
21+
}
22+
23+
func (a *AnalyzeHostBlockDevices) IsExcluded() (bool, error) {
24+
return isExcluded(a.hostAnalyzer.Exclude)
25+
}
26+
27+
func (a *AnalyzeHostBlockDevices) Analyze(getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
28+
hostAnalyzer := a.hostAnalyzer
29+
1630
contents, err := getCollectedFileContents("system/block_devices.json")
1731
if err != nil {
1832
return nil, errors.Wrap(err, "failed to get collected file")
@@ -25,11 +39,7 @@ func analyzeHostBlockDevices(hostAnalyzer *troubleshootv1beta2.BlockDevicesAnaly
2539

2640
result := AnalyzeResult{}
2741

28-
title := hostAnalyzer.CheckName
29-
if title == "" {
30-
title = "Block Devices"
31-
}
32-
result.Title = title
42+
result.Title = a.Title()
3343

3444
for _, outcome := range hostAnalyzer.Outcomes {
3545
if outcome.Fail != nil {

pkg/analyze/host_block_devices_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ func TestAnalyzeBlockDevices(t *testing.T) {
162162
return b, nil
163163
}
164164

165-
result, err := analyzeHostBlockDevices(test.hostAnalyzer, getCollectedFileContents)
165+
result, err := (&AnalyzeHostBlockDevices{test.hostAnalyzer}).Analyze(getCollectedFileContents)
166166
if test.expectErr {
167167
req.Error(err)
168168
} else {

pkg/analyze/host_certificate.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,21 @@ import (
77
troubleshootv1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
88
)
99

10-
func analyzeHostCertificate(hostAnalyzer *troubleshootv1beta2.CertificateAnalyze, getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
10+
type AnalyzeHostCertificate struct {
11+
hostAnalyzer *troubleshootv1beta2.CertificateAnalyze
12+
}
13+
14+
func (a *AnalyzeHostCertificate) Title() string {
15+
return hostAnalyzerTitleOrDefault(a.hostAnalyzer.AnalyzeMeta, "Certificate Key Pair")
16+
}
17+
18+
func (a *AnalyzeHostCertificate) IsExcluded() (bool, error) {
19+
return isExcluded(a.hostAnalyzer.Exclude)
20+
}
21+
22+
func (a *AnalyzeHostCertificate) Analyze(getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
23+
hostAnalyzer := a.hostAnalyzer
24+
1125
collectorName := hostAnalyzer.CollectorName
1226
if collectorName == "" {
1327
collectorName = "certificate"
@@ -21,11 +35,7 @@ func analyzeHostCertificate(hostAnalyzer *troubleshootv1beta2.CertificateAnalyze
2135

2236
result := AnalyzeResult{}
2337

24-
title := hostAnalyzer.CheckName
25-
if title == "" {
26-
title = "Certificate Key Pair"
27-
}
28-
result.Title = title
38+
result.Title = a.Title()
2939

3040
for _, outcome := range hostAnalyzer.Outcomes {
3141
if outcome.Fail != nil {

pkg/analyze/host_certificate_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ func TestAnalyzeCertificate(t *testing.T) {
320320
return []byte(test.status), nil
321321
}
322322

323-
result, err := analyzeHostCertificate(test.hostAnalyzer, getCollectedFileContents)
323+
result, err := (&AnalyzeHostCertificate{test.hostAnalyzer}).Analyze(getCollectedFileContents)
324324
if test.expectErr {
325325
req.Error(err)
326326
} else {

pkg/analyze/host_cpu.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,21 @@ import (
1010
"github.com/replicatedhq/troubleshoot/pkg/collect"
1111
)
1212

13-
func analyzeHostCPU(hostAnalyzer *troubleshootv1beta2.CPUAnalyze, getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
13+
type AnalyzeHostCPU struct {
14+
hostAnalyzer *troubleshootv1beta2.CPUAnalyze
15+
}
16+
17+
func (a *AnalyzeHostCPU) Title() string {
18+
return hostAnalyzerTitleOrDefault(a.hostAnalyzer.AnalyzeMeta, "Number of CPUs")
19+
}
20+
21+
func (a *AnalyzeHostCPU) IsExcluded() (bool, error) {
22+
return isExcluded(a.hostAnalyzer.Exclude)
23+
}
24+
25+
func (a *AnalyzeHostCPU) Analyze(getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
26+
hostAnalyzer := a.hostAnalyzer
27+
1428
contents, err := getCollectedFileContents("system/cpu.json")
1529
if err != nil {
1630
return nil, errors.Wrap(err, "failed to get collected file")
@@ -23,11 +37,7 @@ func analyzeHostCPU(hostAnalyzer *troubleshootv1beta2.CPUAnalyze, getCollectedFi
2337

2438
result := AnalyzeResult{}
2539

26-
title := hostAnalyzer.CheckName
27-
if title == "" {
28-
title = "Number of CPUs"
29-
}
30-
result.Title = title
40+
result.Title = a.Title()
3141

3242
for _, outcome := range hostAnalyzer.Outcomes {
3343
if outcome.Fail != nil {

pkg/analyze/host_disk_usage.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,21 @@ import (
1212
"k8s.io/apimachinery/pkg/api/resource"
1313
)
1414

15-
func analyzeHostDiskUsage(hostAnalyzer *troubleshootv1beta2.DiskUsageAnalyze, getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
15+
type AnalyzeHostDiskUsage struct {
16+
hostAnalyzer *troubleshootv1beta2.DiskUsageAnalyze
17+
}
18+
19+
func (a *AnalyzeHostDiskUsage) Title() string {
20+
return hostAnalyzerTitleOrDefault(a.hostAnalyzer.AnalyzeMeta, fmt.Sprintf("Disk Usage %s", a.hostAnalyzer.CollectorName))
21+
}
22+
23+
func (a *AnalyzeHostDiskUsage) IsExcluded() (bool, error) {
24+
return isExcluded(a.hostAnalyzer.Exclude)
25+
}
26+
27+
func (a *AnalyzeHostDiskUsage) Analyze(getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) {
28+
hostAnalyzer := a.hostAnalyzer
29+
1630
key := collect.HostDiskUsageKey(hostAnalyzer.CollectorName)
1731
contents, err := getCollectedFileContents(key)
1832
if err != nil {
@@ -26,11 +40,7 @@ func analyzeHostDiskUsage(hostAnalyzer *troubleshootv1beta2.DiskUsageAnalyze, ge
2640

2741
result := AnalyzeResult{}
2842

29-
title := hostAnalyzer.CheckName
30-
if title == "" {
31-
title = fmt.Sprintf("Disk Usage %s", hostAnalyzer.CollectorName)
32-
}
33-
result.Title = title
43+
result.Title = a.Title()
3444

3545
for _, outcome := range hostAnalyzer.Outcomes {
3646
if outcome.Fail != nil {

pkg/analyze/host_disk_usage_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ func TestAnalyzeHostDiskUsage(t *testing.T) {
367367
return b, nil
368368
}
369369

370-
result, err := analyzeHostDiskUsage(test.hostAnalyzer, getCollectedFileContents)
370+
result, err := (&AnalyzeHostDiskUsage{test.hostAnalyzer}).Analyze(getCollectedFileContents)
371371
if test.expectErr {
372372
req.Error(err)
373373
} else {

0 commit comments

Comments
 (0)