Skip to content

Commit b6ca58d

Browse files
committed
errors are masked when collector fails
1 parent beb0514 commit b6ca58d

File tree

4 files changed

+65
-6
lines changed

4 files changed

+65
-6
lines changed

cmd/troubleshoot/cli/run_nocrd.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"github.com/ahmetalpbalkan/go-cursor"
14+
"github.com/fatih/color"
1415
"github.com/mholt/archiver"
1516
troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1"
1617
"github.com/replicatedhq/troubleshoot/pkg/collect"
@@ -62,13 +63,19 @@ func runTroubleshootNoCRD(v *viper.Viper, arg string) error {
6263

6364
s := spin.New()
6465
finishedCh := make(chan bool, 1)
65-
progressChan := make(chan string, 1)
66+
progressChan := make(chan interface{}, 1)
6667
go func() {
6768
currentDir := ""
6869
for {
6970
select {
70-
case dir := <-progressChan:
71-
currentDir = filepath.Base(dir)
71+
case msg := <-progressChan:
72+
switch msg := msg.(type) {
73+
case error:
74+
c := color.New(color.FgHiRed)
75+
c.Println(fmt.Sprintf("%s * %v", cursor.ClearEntireLine(), msg))
76+
case string:
77+
currentDir = filepath.Base(msg)
78+
}
7279
case <-finishedCh:
7380
fmt.Printf("\r")
7481
return
@@ -105,7 +112,7 @@ the %s Admin Console to begin analysis.`
105112
return nil
106113
}
107114

108-
func runCollectors(v *viper.Viper, collector troubleshootv1beta1.Collector, progressChan chan string) (string, error) {
115+
func runCollectors(v *viper.Viper, collector troubleshootv1beta1.Collector, progressChan chan interface{}) (string, error) {
109116
bundlePath, err := ioutil.TempDir("", "troubleshoot")
110117
if err != nil {
111118
return "", err
@@ -135,13 +142,13 @@ func runCollectors(v *viper.Viper, collector troubleshootv1beta1.Collector, prog
135142

136143
result, err := collector.RunCollectorSync()
137144
if err != nil {
138-
progressChan <- fmt.Sprintf("failed to run collector %v", collector)
145+
progressChan <- fmt.Errorf("failed to run collector %q: %v", collector.GetDisplayName(), err)
139146
continue
140147
}
141148

142149
collectorDir, err := parseAndSaveCollectorOutput(string(result), bundlePath)
143150
if err != nil {
144-
progressChan <- fmt.Sprintf("failed to parse collector spec: %v", collector)
151+
progressChan <- fmt.Errorf("failed to parse collector spec %q: %v", collector.GetDisplayName(), err)
145152
continue
146153
}
147154

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ require (
1515
github.com/docker/go-units v0.4.0 // indirect
1616
github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c // indirect
1717
github.com/dsnet/compress v0.0.1 // indirect
18+
github.com/fatih/color v1.7.0
1819
github.com/gin-gonic/gin v1.4.0
1920
github.com/gizak/termui/v3 v3.1.0
2021
github.com/golang/snappy v0.0.1 // indirect

go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6
9494
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
9595
github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M=
9696
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
97+
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
9798
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
9899
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
99100
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=

pkg/collect/collector.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package collect
22

33
import (
44
"errors"
5+
"fmt"
6+
"strings"
57

68
troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1"
79
"gopkg.in/yaml.v2"
@@ -41,6 +43,54 @@ func (c *Collector) RunCollectorSync() ([]byte, error) {
4143
return nil, errors.New("no spec found to run")
4244
}
4345

46+
func (c *Collector) GetDisplayName() string {
47+
var collector, name, selector string
48+
if c.Collect.ClusterInfo != nil {
49+
collector = "cluster-info"
50+
}
51+
if c.Collect.ClusterResources != nil {
52+
collector = "cluster-resources"
53+
}
54+
if c.Collect.Secret != nil {
55+
collector = "secret"
56+
name = c.Collect.Secret.CollectorName
57+
}
58+
if c.Collect.Logs != nil {
59+
collector = "logs"
60+
name = c.Collect.Logs.CollectorName
61+
selector = strings.Join(c.Collect.Logs.Selector, ",")
62+
}
63+
if c.Collect.Run != nil {
64+
collector = "run"
65+
name = c.Collect.Run.CollectorName
66+
}
67+
if c.Collect.Exec != nil {
68+
collector = "exec"
69+
name = c.Collect.Exec.CollectorName
70+
selector = strings.Join(c.Collect.Exec.Selector, ",")
71+
}
72+
if c.Collect.Copy != nil {
73+
collector = "copy"
74+
name = c.Collect.Copy.CollectorName
75+
selector = strings.Join(c.Collect.Copy.Selector, ",")
76+
}
77+
if c.Collect.HTTP != nil {
78+
collector = "http"
79+
name = c.Collect.HTTP.CollectorName
80+
}
81+
82+
if collector == "" {
83+
return "<none>"
84+
}
85+
if name != "" {
86+
return fmt.Sprintf("%s/%s", collector, name)
87+
}
88+
if selector != "" {
89+
return fmt.Sprintf("%s/%s", collector, selector)
90+
}
91+
return collector
92+
}
93+
4494
func ParseSpec(specContents string) (*troubleshootv1beta1.Collect, error) {
4595
collect := troubleshootv1beta1.Collect{}
4696

0 commit comments

Comments
 (0)