mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 17:06:58 +00:00
130 lines
3.2 KiB
Go
130 lines
3.2 KiB
Go
package display
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/cli/monitor"
|
|
)
|
|
|
|
// DNSTable prints DNS status for nameserver nodes to w.
|
|
func DNSTable(snap *monitor.ClusterSnapshot, w io.Writer) error {
|
|
fmt.Fprintf(w, "%s\n", styleBold.Render(
|
|
fmt.Sprintf("DNS Status \u2014 %s", snap.Environment)))
|
|
fmt.Fprintln(w, strings.Repeat("\u2550", 22))
|
|
fmt.Fprintln(w)
|
|
|
|
// Header
|
|
fmt.Fprintf(w, "%-18s %-9s %-7s %-5s %-5s %-10s %-10s %s\n",
|
|
styleHeader.Render("NODE"),
|
|
styleHeader.Render("COREDNS"),
|
|
styleHeader.Render("CADDY"),
|
|
styleHeader.Render("SOA"),
|
|
styleHeader.Render("NS"),
|
|
styleHeader.Render("WILDCARD"),
|
|
styleHeader.Render("BASE TLS"),
|
|
styleHeader.Render("WILD TLS"))
|
|
fmt.Fprintln(w, separator(78))
|
|
|
|
found := false
|
|
for _, cs := range snap.Nodes {
|
|
// Only show nameserver nodes
|
|
if !cs.Node.IsNameserver() {
|
|
continue
|
|
}
|
|
found = true
|
|
|
|
if cs.Error != nil || cs.Report == nil {
|
|
fmt.Fprintf(w, "%-18s %s\n",
|
|
styleRed.Render(cs.Node.Host),
|
|
styleRed.Render("UNREACHABLE"))
|
|
continue
|
|
}
|
|
|
|
r := cs.Report
|
|
if r.DNS == nil {
|
|
fmt.Fprintf(w, "%-18s %s\n",
|
|
cs.Node.Host,
|
|
styleMuted.Render("no DNS data"))
|
|
continue
|
|
}
|
|
|
|
dns := r.DNS
|
|
fmt.Fprintf(w, "%-18s %-9s %-7s %-5s %-5s %-10s %-10s %s\n",
|
|
cs.Node.Host,
|
|
statusIcon(dns.CoreDNSActive),
|
|
statusIcon(dns.CaddyActive),
|
|
statusIcon(dns.SOAResolves),
|
|
statusIcon(dns.NSResolves),
|
|
statusIcon(dns.WildcardResolves),
|
|
tlsDaysStr(dns.BaseTLSDaysLeft),
|
|
tlsDaysStr(dns.WildTLSDaysLeft))
|
|
}
|
|
|
|
if !found {
|
|
fmt.Fprintln(w, styleMuted.Render(" No nameserver nodes found"))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// DNSJSON writes DNS status as JSON.
|
|
func DNSJSON(snap *monitor.ClusterSnapshot, w io.Writer) error {
|
|
type dnsEntry struct {
|
|
Host string `json:"host"`
|
|
CoreDNSActive bool `json:"coredns_active"`
|
|
CaddyActive bool `json:"caddy_active"`
|
|
SOAResolves bool `json:"soa_resolves"`
|
|
NSResolves bool `json:"ns_resolves"`
|
|
WildcardResolves bool `json:"wildcard_resolves"`
|
|
BaseTLSDaysLeft int `json:"base_tls_days_left"`
|
|
WildTLSDaysLeft int `json:"wild_tls_days_left"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
var entries []dnsEntry
|
|
for _, cs := range snap.Nodes {
|
|
if !cs.Node.IsNameserver() {
|
|
continue
|
|
}
|
|
e := dnsEntry{Host: cs.Node.Host}
|
|
if cs.Error != nil {
|
|
e.Error = cs.Error.Error()
|
|
entries = append(entries, e)
|
|
continue
|
|
}
|
|
if cs.Report == nil || cs.Report.DNS == nil {
|
|
entries = append(entries, e)
|
|
continue
|
|
}
|
|
dns := cs.Report.DNS
|
|
e.CoreDNSActive = dns.CoreDNSActive
|
|
e.CaddyActive = dns.CaddyActive
|
|
e.SOAResolves = dns.SOAResolves
|
|
e.NSResolves = dns.NSResolves
|
|
e.WildcardResolves = dns.WildcardResolves
|
|
e.BaseTLSDaysLeft = dns.BaseTLSDaysLeft
|
|
e.WildTLSDaysLeft = dns.WildTLSDaysLeft
|
|
entries = append(entries, e)
|
|
}
|
|
|
|
return writeJSON(w, entries)
|
|
}
|
|
|
|
// tlsDaysStr formats TLS days left with appropriate coloring.
|
|
func tlsDaysStr(days int) string {
|
|
if days < 0 {
|
|
return styleMuted.Render("--")
|
|
}
|
|
s := fmt.Sprintf("%d days", days)
|
|
switch {
|
|
case days < 7:
|
|
return styleRed.Render(s)
|
|
case days < 30:
|
|
return styleYellow.Render(s)
|
|
default:
|
|
return styleGreen.Render(s)
|
|
}
|
|
}
|