Go backend (miekg/dns) + Nuxt 3 frontend (Tailwind CSS v4). 8 check categories, 52 checks total: - Overview: @ record, WWW, MX with ASN/provider lookup - Domain Registration: expiry, registrar (RDAP + whois fallback) - Parent Delegation: NS records, glue, consistency - Nameservers: 17 checks (reachability, auth, recursion, TCP/UDP, AXFR, etc.) - SOA: serial consistency, timing values - Mail (MX): 11 checks (CNAME, PTR, public IPs, consistency) - Mail Auth: SPF, DKIM, DMARC - WWW: A record, CNAME Features: - SSE streaming (results appear as each category completes) - SQLite history (modernc.org/sqlite) - Rate limiting, CORS, request logging - Dark mode, responsive design
36 lines
705 B
Go
36 lines
705 B
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/intodns/backend/internal/api"
|
|
"github.com/intodns/backend/internal/checker"
|
|
"github.com/intodns/backend/internal/store"
|
|
)
|
|
|
|
func main() {
|
|
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
|
|
|
dbPath := os.Getenv("DNSTEST_DB")
|
|
if dbPath == "" {
|
|
dbPath = "/opt/dnstest/data/history.db"
|
|
}
|
|
|
|
st, err := store.NewStore(dbPath)
|
|
if err != nil {
|
|
log.Fatalf("Failed to open store: %v", err)
|
|
}
|
|
defer st.Close()
|
|
|
|
ch := checker.NewChecker()
|
|
router := api.NewRouter(ch, st)
|
|
|
|
addr := ":8080"
|
|
log.Printf("Starting DNS health checker on %s", addr)
|
|
if err := http.ListenAndServe(addr, router); err != nil {
|
|
log.Fatalf("Server failed: %v", err)
|
|
}
|
|
}
|