mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 19:16:58 +00:00
110 lines
3.0 KiB
Go
110 lines
3.0 KiB
Go
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/cli/monitor"
|
|
)
|
|
|
|
// renderDNSTab renders DNS status for nameserver nodes.
|
|
func renderDNSTab(snap *monitor.ClusterSnapshot, width int) string {
|
|
if snap == nil {
|
|
return styleMuted.Render("Collecting cluster data...")
|
|
}
|
|
|
|
if snap.HealthyCount() == 0 {
|
|
return styleMuted.Render("No healthy nodes to display.")
|
|
}
|
|
|
|
var b strings.Builder
|
|
|
|
b.WriteString(styleBold.Render("DNS / Nameserver Status"))
|
|
b.WriteString("\n")
|
|
b.WriteString(separator(width))
|
|
b.WriteString("\n\n")
|
|
|
|
hasDNS := false
|
|
for _, cs := range snap.Nodes {
|
|
if cs.Report == nil || cs.Report.DNS == nil {
|
|
continue
|
|
}
|
|
hasDNS = true
|
|
r := cs.Report
|
|
dns := r.DNS
|
|
host := nodeHost(r)
|
|
role := cs.Node.Role
|
|
|
|
b.WriteString(styleBold.Render(fmt.Sprintf(" %s", host)))
|
|
if role != "" {
|
|
b.WriteString(fmt.Sprintf(" (%s)", role))
|
|
}
|
|
b.WriteString("\n")
|
|
|
|
// Service status
|
|
b.WriteString(fmt.Sprintf(" CoreDNS: %s", statusStr(dns.CoreDNSActive)))
|
|
if dns.CoreDNSMemMB > 0 {
|
|
b.WriteString(fmt.Sprintf(" mem=%dMB", dns.CoreDNSMemMB))
|
|
}
|
|
if dns.CoreDNSRestarts > 0 {
|
|
b.WriteString(fmt.Sprintf(" restarts=%s", styleWarning.Render(fmt.Sprintf("%d", dns.CoreDNSRestarts))))
|
|
}
|
|
b.WriteString("\n")
|
|
|
|
b.WriteString(fmt.Sprintf(" Caddy: %s\n", statusStr(dns.CaddyActive)))
|
|
|
|
// Port bindings
|
|
b.WriteString(fmt.Sprintf(" Ports: 53=%s 80=%s 443=%s\n",
|
|
statusStr(dns.Port53Bound),
|
|
statusStr(dns.Port80Bound),
|
|
statusStr(dns.Port443Bound),
|
|
))
|
|
|
|
// DNS resolution checks
|
|
b.WriteString(fmt.Sprintf(" SOA: %s\n", statusStr(dns.SOAResolves)))
|
|
b.WriteString(fmt.Sprintf(" NS: %s", statusStr(dns.NSResolves)))
|
|
if dns.NSRecordCount > 0 {
|
|
b.WriteString(fmt.Sprintf(" (%d records)", dns.NSRecordCount))
|
|
}
|
|
b.WriteString("\n")
|
|
b.WriteString(fmt.Sprintf(" Base A: %s\n", statusStr(dns.BaseAResolves)))
|
|
b.WriteString(fmt.Sprintf(" Wildcard: %s\n", statusStr(dns.WildcardResolves)))
|
|
b.WriteString(fmt.Sprintf(" Corefile: %s\n", statusStr(dns.CorefileExists)))
|
|
|
|
// TLS certificates
|
|
baseTLS := renderTLSDays(dns.BaseTLSDaysLeft, "base")
|
|
wildTLS := renderTLSDays(dns.WildTLSDaysLeft, "wildcard")
|
|
b.WriteString(fmt.Sprintf(" TLS: %s %s\n", baseTLS, wildTLS))
|
|
|
|
// Log errors
|
|
if dns.LogErrors > 0 {
|
|
b.WriteString(fmt.Sprintf(" Log errors: %s (5m)\n",
|
|
styleWarning.Render(fmt.Sprintf("%d", dns.LogErrors))))
|
|
}
|
|
|
|
b.WriteString("\n")
|
|
}
|
|
|
|
if !hasDNS {
|
|
return styleMuted.Render("No nameserver nodes found (no DNS data reported).")
|
|
}
|
|
|
|
return b.String()
|
|
}
|
|
|
|
// renderTLSDays formats TLS certificate expiry with color coding.
|
|
func renderTLSDays(days int, label string) string {
|
|
if days < 0 {
|
|
return styleMuted.Render(fmt.Sprintf("%s: n/a", label))
|
|
}
|
|
s := fmt.Sprintf("%s: %dd", label, days)
|
|
switch {
|
|
case days < 7:
|
|
return styleCritical.Render(s)
|
|
case days < 14:
|
|
return styleWarning.Render(s)
|
|
default:
|
|
return styleHealthy.Render(s)
|
|
}
|
|
}
|