1
0
mirror of https://github.com/taigrr/godns synced 2025-01-18 04:03:25 -08:00
godns/godns.go

76 lines
1.4 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
)
const (
// PANIC_MAX is the max allowed panic times
PANIC_MAX = 5
// INTERVAL is minute
INTERVAL = 5
// DNSPOD
DNSPOD = "DNSPod"
// HE
HE = "HE"
)
var (
configuration Settings
optConf = flag.String("c", "./config.json", "Specify a config file")
optHelp = flag.Bool("h", false, "Show help")
)
func main() {
flag.Parse()
if *optHelp {
flag.Usage()
return
}
//Load settings from configurations file
if err := LoadSettings(*optConf, &configuration); err != nil {
fmt.Println(err.Error())
log.Println(err.Error())
os.Exit(1)
}
if err := checkSettings(&configuration); err != nil {
log.Println("Settings is invalid! ", err.Error())
os.Exit(1)
}
if err := InitLogger(configuration.LogPath, configuration.LogSize, configuration.LogNum); err != nil {
log.Println("InitLogger error:", err.Error())
os.Exit(1)
}
dnsLoop()
}
func dnsLoop() {
panicChan := make(chan Domain)
handler := createHandler(configuration.Provider)
for _, domain := range configuration.Domains {
go handler.DomainLoop(&domain, panicChan)
}
panicCount := 0
for {
select {
case failDomain := <-panicChan:
log.Println("Got panic in goroutine, will start a new one... :", panicCount)
go handler.DomainLoop(&failDomain, panicChan)
}
panicCount++
if panicCount >= PANIC_MAX {
os.Exit(1)
}
}
}