Skip to content

Commit c2359f4

Browse files
committed
Issue #50 - Better error display
- Add new structure to hold details and error of failed site pull. - Update display of errors to show site name in red along with sub-menu containing error string.
1 parent bb0d377 commit c2359f4

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

service/site.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func (sites Sites) GetOverview(client whatsup.StatusPageClient) status.Overview
9898
overview := status.Overview{
9999
OverallStatus: "none",
100100
List: map[string][]whatsupstatus.Details{},
101-
Errors: []string{},
101+
Errors: []status.OverviewError{},
102102
}
103103

104104
c := make(chan readerResult)
@@ -113,7 +113,10 @@ func (sites Sites) GetOverview(client whatsup.StatusPageClient) status.Overview
113113
resp := <-c
114114

115115
if resp.err != nil {
116-
overview.Errors = append(overview.Errors, resp.err.Error())
116+
overview.Errors = append(overview.Errors, status.OverviewError{
117+
Details: resp.details,
118+
Error: resp.err,
119+
})
117120
continue
118121
}
119122

service/site_test.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func TestUnit_GetOverview(t *testing.T) {
171171
slackNoOutageResp,
172172
},
173173
},
174-
Errors: []string{},
174+
Errors: []status.OverviewError{},
175175
},
176176
validate: func(t *testing.T, expectedOverview, actualOverview status.Overview) {
177177
require.Equal(t, expectedOverview, actualOverview)
@@ -205,7 +205,7 @@ func TestUnit_GetOverview(t *testing.T) {
205205
codeClimateNoOutageResp,
206206
},
207207
},
208-
Errors: []string{},
208+
Errors: []status.OverviewError{},
209209
},
210210
validate: func(t *testing.T, expectedOverview, actualOverview status.Overview) {
211211
require.Equal(t, expectedOverview, actualOverview)
@@ -246,8 +246,11 @@ func TestUnit_GetOverview(t *testing.T) {
246246
},
247247
},
248248
},
249-
Errors: []string{
250-
"Code: [UNABLE_TO_MAKE_CLIENT_REQUEST] Message: [test err] Inner error: [%!s(<nil>)]",
249+
Errors: []status.OverviewError{
250+
{
251+
Details: nil,
252+
Error: glitch.NewDataError(nil, "UNABLE_TO_MAKE_CLIENT_REQUEST", "test err"),
253+
},
251254
},
252255
},
253256
validate: func(t *testing.T, expectedOverview, actualOverview status.Overview) {
@@ -268,8 +271,11 @@ func TestUnit_GetOverview(t *testing.T) {
268271
expectedOverview: status.Overview{
269272
OverallStatus: "none",
270273
List: map[string][]whatsupstatus.Details{},
271-
Errors: []string{
272-
"Code: [" + ErrorUnsupportedServiceType + "] Message: [CodeClimate uses an unsupported service type not-a-finger] Inner error: [%!s(<nil>)]",
274+
Errors: []status.OverviewError{
275+
{
276+
Details: nil,
277+
Error: glitch.NewDataError(nil, ErrorUnsupportedServiceType, "CodeClimate uses an unsupported service type not-a-finger"),
278+
},
273279
},
274280
},
275281
validate: func(t *testing.T, expectedOverview, actualOverview status.Overview) {

status/overview.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,26 @@ import (
55
"fmt"
66
"io"
77

8+
"github.com/sprak3000/go-glitch/glitch"
89
whatsupstatus "github.com/sprak3000/go-whatsup-client/status"
910
)
1011

1112
// List is a mapping of status codes to services reporting that status code
1213
type List map[string][]whatsupstatus.Details
1314

15+
// OverviewError bundles the details of a failed overview request
16+
type OverviewError struct {
17+
Details whatsupstatus.Details
18+
Error glitch.DataError
19+
}
20+
1421
// Overview provides an overall status for all services monitored -- most severe status wins -- along with all the
1522
// services categorized by status
1623
type Overview struct {
1724
OverallStatus string
1825
LargestStringSize int
1926
List
20-
Errors []string
27+
Errors []OverviewError
2128
}
2229

2330
// Display outputs the data in the xbar format
@@ -35,17 +42,19 @@ func (o Overview) Display(w io.Writer) {
3542
displayDetails(w, o.LargestStringSize, o.List["minor"], "\u001b[38;5;208m")
3643
displayDetails(w, o.LargestStringSize, o.List["none"], "\u001B[32;1m")
3744

38-
_, _ = fmt.Fprintln(w, "---")
3945
if len(o.Errors) > 0 {
46+
_, _ = fmt.Fprintln(w, "---")
4047
for _, v := range o.Errors {
41-
_, _ = fmt.Fprintln(w, v)
48+
_, _ = fmt.Fprintf(w, "%s%-*s%s%s %s | font=Monaco href=%s\n", "\u001B[31;1m", o.LargestStringSize+5, v.Details.Name(), "\u001b[0m", "\u001b[30m", v.Details.UpdatedAt().Format("2006 Jan 02"), v.Details.URL())
49+
_, _ = fmt.Fprintln(w, "----")
50+
_, _ = fmt.Fprintf(w, "%s", v.Error.Error())
4251
}
4352
}
4453
}
4554

4655
func displayDetails(w io.Writer, largestStringSize int, details []whatsupstatus.Details, detailColor string) {
47-
_, _ = fmt.Fprintln(w, "---")
4856
if len(details) > 0 {
57+
_, _ = fmt.Fprintln(w, "---")
4958
for _, v := range details {
5059
_, _ = fmt.Fprintf(w, "%s%-*s%s%s %s | font=Monaco href=%s\n", detailColor, largestStringSize+5, v.Name(), "\u001b[0m", "\u001b[30m", v.UpdatedAt().Format("2006 Jan 02"), v.URL())
5160
}

status/overview_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"testing"
66
"time"
77

8+
"github.com/sprak3000/go-glitch/glitch"
89
whatsupstatus "github.com/sprak3000/go-whatsup-client/status"
910
"github.com/stretchr/testify/require"
1011
)
@@ -45,7 +46,7 @@ func TestUnit_Overview_Display(t *testing.T) {
4546
var buf bytes.Buffer
4647
o.Display(&buf)
4748

48-
require.Equal(t, "🔴\n---\n\x1b[31;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[38;5;208mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n", buf.String())
49+
require.Equal(t, "🔴\n---\n\x1b[31;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[38;5;208mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n", buf.String())
4950
},
5051
},
5152
"base path- overall status minor": {
@@ -70,7 +71,7 @@ func TestUnit_Overview_Display(t *testing.T) {
7071
var buf bytes.Buffer
7172
o.Display(&buf)
7273

73-
require.Equal(t, "🟠\n---\n---\n\x1b[38;5;208mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n", buf.String())
74+
require.Equal(t, "🟠\n---\n\x1b[38;5;208mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n", buf.String())
7475
},
7576
},
7677
"base path- overall status none": {
@@ -90,7 +91,7 @@ func TestUnit_Overview_Display(t *testing.T) {
9091
var buf bytes.Buffer
9192
o.Display(&buf)
9293

93-
require.Equal(t, "🟢\n---\n---\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n", buf.String())
94+
require.Equal(t, "🟢\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n", buf.String())
9495
},
9596
},
9697
"base path- has error": {
@@ -105,15 +106,18 @@ func TestUnit_Overview_Display(t *testing.T) {
105106
},
106107
},
107108
},
108-
Errors: []string{
109-
"Something went wrong with a test service.",
109+
Errors: []OverviewError{
110+
{
111+
Details: testResponse{updatedAt: now},
112+
Error: glitch.NewDataError(nil, "WRONG", "Something went wrong with a test service."),
113+
},
110114
},
111115
}
112116

113117
var buf bytes.Buffer
114118
o.Display(&buf)
115119

116-
require.Equal(t, "🟢\n---\n---\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\nSomething went wrong with a test service.\n", buf.String())
120+
require.Equal(t, "🟢\n---\n\x1b[32;1mTest Service \x1b[0m\x1b[30m "+nowFormatted+" | font=Monaco href=https://test.service/\n---\n\x1b[31;1mTest Service \x1b[0m\x1b[30m 2025 Apr 26 | font=Monaco href=https://test.service/\n----\nCode: [WRONG] Message: [Something went wrong with a test service.] Inner error: [%!s(<nil>)]", buf.String())
117121
},
118122
},
119123
}

0 commit comments

Comments
 (0)