diagd: make output look good in a terminal, too

curl diagd.router7/
This commit is contained in:
Michael Stapelberg 2020-03-11 22:07:36 +01:00
parent ffc4c21bcd
commit e67fb4dd71
3 changed files with 16 additions and 11 deletions

View File

@ -26,6 +26,7 @@ import (
"net/http" "net/http"
"os" "os"
"os/signal" "os/signal"
"strings"
"sync" "sync"
"syscall" "syscall"
@ -49,14 +50,18 @@ func updateListeners() error {
return nil return nil
} }
func dump(w io.Writer, re *diag.EvalResult) { func dump(indent int, w io.Writer, re *diag.EvalResult) {
symbol := "✔" symbol := "✔"
if re.Error { if re.Error {
symbol = "✘" symbol = "✘"
} }
fmt.Fprintf(w, "<li>%s %s: %s<ul>", symbol, html.EscapeString(re.Name), html.EscapeString(re.Status)) fmt.Fprintf(w, "<li>\n%s%s %s: %s<ul>",
strings.Repeat(" ", indent),
symbol,
html.EscapeString(re.Name),
html.EscapeString(re.Status))
for _, ch := range re.Children { for _, ch := range re.Children {
dump(w, ch) dump(indent+1, w, ch)
} }
fmt.Fprintf(w, "</ul></li>") fmt.Fprintf(w, "</ul></li>")
} }
@ -96,7 +101,7 @@ func logic() error {
re := m.Evaluate() re := m.Evaluate()
mu.Unlock() mu.Unlock()
fmt.Fprintf(w, `<!DOCTYPE html><style type="text/css">ul { list-style-type: none; }</style><ul>`) fmt.Fprintf(w, `<!DOCTYPE html><style type="text/css">ul { list-style-type: none; }</style><ul>`)
dump(w, re) dump(0, w, re)
}) })
http.HandleFunc("/health.json", func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/health.json", func(w http.ResponseWriter, r *http.Request) {
mu.Lock() mu.Lock()

View File

@ -34,7 +34,7 @@ type ping4gw struct {
} }
func (d *ping4gw) String() string { func (d *ping4gw) String() string {
return "ping4/<default-gateway>" return "ping4: $default-gateway"
} }
func (d *ping4gw) Then(t Node) Node { func (d *ping4gw) Then(t Node) Node {
@ -93,7 +93,7 @@ type ping4 struct {
} }
func (d *ping4) String() string { func (d *ping4) String() string {
return "ping4/" + d.addr return "ping4: " + d.addr
} }
func (d *ping4) Then(t Node) Node { func (d *ping4) Then(t Node) Node {
@ -134,7 +134,7 @@ type ping6gw struct {
} }
func (d *ping6gw) String() string { func (d *ping6gw) String() string {
return "ping6gw/<default-gateway>" return "ping6gw: $default-gateway"
} }
func (d *ping6gw) Then(t Node) Node { func (d *ping6gw) Then(t Node) Node {
@ -198,9 +198,9 @@ type ping6 struct {
func (d *ping6) String() string { func (d *ping6) String() string {
if d.ifname == "" { if d.ifname == "" {
return "ping6/" + d.addr return "ping6: " + d.addr
} }
return fmt.Sprintf("ping6/%s→%s", d.ifname, d.addr) return fmt.Sprintf("ping6: %s → %s", d.ifname, d.addr)
} }
func (d *ping6) Then(t Node) Node { func (d *ping6) Then(t Node) Node {

View File

@ -24,7 +24,7 @@ type tcp4 struct {
} }
func (d *tcp4) String() string { func (d *tcp4) String() string {
return "tcp4/" + d.addr return "tcp4: " + d.addr
} }
func (d *tcp4) Then(t Node) Node { func (d *tcp4) Then(t Node) Node {
@ -57,7 +57,7 @@ type tcp6 struct {
} }
func (d *tcp6) String() string { func (d *tcp6) String() string {
return "tcp6/" + d.addr return "tcp6: " + d.addr
} }
func (d *tcp6) Then(t Node) Node { func (d *tcp6) Then(t Node) Node {