-
Notifications
You must be signed in to change notification settings - Fork 111
/
reporter.go
136 lines (123 loc) · 4.23 KB
/
reporter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package runner
import (
"fmt"
"strings"
"time"
"github.com/briandowns/spinner"
)
// A Reporter is used to report runner lifecycle events
type Reporter interface {
ReportGenerateSkip(componentName, msg string)
ReportGenerateSkipErrored(componentName, msg string)
ReportGenerateStart(componentName string)
ReportGenerateSuccess(componentName string)
ReportGenerateErrored(componentName, msg string)
ReportVerifySkip(componentName, msg string)
ReportVerifySkipErrored(componentName, msg string)
ReportVerifyStart(componentName string)
ReportVerifyFinish(componentName string)
ReportVerifyFailure(componentName, msg string)
ReportCleanupSkip(componentName, msg string)
ReportCleanupSkipErrored(componentName, msg string)
ReportCleanupStart(componentName string)
ReportCleanupSuccess(componentName string)
ReportCleanupErrored(componentName, msg string)
SummarizeFailures()
}
type defaultReporter struct {
inVerifyFailureMode bool
s *spinner.Spinner
}
// NewDefaultReporter creates a reporter that pretty prints messages and does
// all the fancy progress spinner stuff
func NewDefaultReporter() Reporter {
return &defaultReporter{
s: spinner.New(spinner.CharSets[14], 100*time.Millisecond),
}
}
func (r *defaultReporter) ReportGenerateSkip(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[-] Skipping generating data for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportGenerateSkipErrored(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[✗] Failed skipping generate for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportGenerateStart(componentName string) {
r.s.Prefix = "["
r.s.Suffix = fmt.Sprintf("] Generating data for %s", componentName)
r.s.Start()
}
func (r *defaultReporter) ReportGenerateSuccess(componentName string) {
r.s.Stop()
fmt.Printf("[✓] Generating data for %s\n", componentName)
}
func (r *defaultReporter) ReportGenerateErrored(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[✗] Generating data for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportVerifySkip(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[-] Skipping verifying data for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportVerifySkipErrored(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[✗] Failed skipping verify for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportVerifyStart(componentName string) {
r.s.Prefix = "["
r.s.Suffix = fmt.Sprintf("] Verifying %s", componentName)
r.s.Start()
}
func (r *defaultReporter) ReportVerifyFinish(componentName string) {
if !r.inVerifyFailureMode {
r.s.Stop()
fmt.Printf("[✓] Verifying %s\n", componentName)
}
r.inVerifyFailureMode = false
}
func (r *defaultReporter) ReportVerifyFailure(componentName string, msg string) {
if !r.inVerifyFailureMode {
r.s.Stop()
fmt.Printf("[✗] Verifying %s\n", componentName)
r.inVerifyFailureMode = true
}
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportCleanupSkip(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[-] Skipping cleaning up for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportCleanupSkipErrored(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[✗] Failed skipping cleanup for %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (r *defaultReporter) ReportCleanupStart(componentName string) {
r.s.Prefix = "["
r.s.Suffix = fmt.Sprintf("] Cleaning up %s", componentName)
r.s.Start()
}
func (r *defaultReporter) ReportCleanupSuccess(componentName string) {
r.s.Stop()
fmt.Printf("[✓] Cleaning up %s\n", componentName)
}
func (r *defaultReporter) ReportCleanupErrored(componentName string, msg string) {
r.s.Stop()
fmt.Printf("[✗] Cleaning up %s\n", componentName)
fmt.Printf("%s\n", formatMessage(msg))
}
func (*defaultReporter) SummarizeFailures() {}
func formatMessage(msg string) string {
lines := strings.Split(msg, "\n")
for i, l := range lines {
lines[i] = fmt.Sprintf(" %s", l)
}
return strings.Join(lines, "\n")
}