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

fix golint warnings

This commit is contained in:
Timothy 2017-08-17 11:07:31 +08:00
parent e421c27afc
commit 17f41e45f8
4 changed files with 105 additions and 84 deletions

View File

@ -41,7 +41,7 @@ func generateHeader(content url.Values) url.Values {
header.Add("error_on_empty", "no") header.Add("error_on_empty", "no")
if content != nil { if content != nil {
for k, _ := range content { for k := range content {
header.Add(k, content.Get(k)) header.Add(k, content.Get(k))
} }
} }

View File

@ -11,8 +11,10 @@ import (
) )
const ( const (
//Max allowed panic times
PANIC_MAX = 5 PANIC_MAX = 5
INTERVAL = 5 //Minute //Minute
INTERVAL = 5
) )
var ( var (
@ -72,13 +74,13 @@ func main() {
func dnsLoop() { func dnsLoop() {
for _, domain := range configuration.Domains { for _, domain := range configuration.Domains {
go DomainLoop(&domain) go domainLoop(&domain)
} }
select {} select {}
} }
func DomainLoop(domain *Domain) { func domainLoop(domain *Domain) {
defer func() { defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
panicCount++ panicCount++
@ -87,7 +89,7 @@ func DomainLoop(domain *Domain) {
log.Print(identifyPanic()) log.Print(identifyPanic())
if panicCount < PANIC_MAX { if panicCount < PANIC_MAX {
log.Println("Got panic in goroutine, will start a new one... :", panicCount) log.Println("Got panic in goroutine, will start a new one... :", panicCount)
go DomainLoop(domain) go domainLoop(domain)
} else { } else {
os.Exit(1) os.Exit(1)
} }

172
logger.go
View File

@ -16,14 +16,21 @@ import (
) )
const ( const (
//L_INFO log level
L_INFO int = iota L_INFO int = iota
//L_WARNING log level
L_WARNING L_WARNING
//L_DEBUG log level
L_DEBUG L_DEBUG
//PRE_INFO log level
PRE_INFO = "[ INFO]" PRE_INFO = "[ INFO]"
//PRE_WARNING log level
PRE_WARNING = "[WARNING]" PRE_WARNING = "[WARNING]"
//PRE_DEBUG log level
PRE_DEBUG = "[ DEBUG]" PRE_DEBUG = "[ DEBUG]"
) )
//Logger struct
type Logger struct { type Logger struct {
DEV_MODE bool DEV_MODE bool
fd *os.File fd *os.File
@ -38,6 +45,7 @@ type Logger struct {
log *log.Logger log *log.Logger
} }
//NewLogger returns a new created logger
func NewLogger(logfile string, size, num int, level int, flushInterval int64, flushSize int) (logger *Logger, err error) { func NewLogger(logfile string, size, num int, level int, flushInterval int64, flushSize int) (logger *Logger, err error) {
if size < 1 || num < 1 || level < L_INFO || len(logfile) < 1 { if size < 1 || num < 1 || level < L_INFO || len(logfile) < 1 {
err = errors.New("NewLogWriter:param error.") err = errors.New("NewLogWriter:param error.")
@ -69,6 +77,7 @@ func NewLogger(logfile string, size, num int, level int, flushInterval int64, fl
return return
} }
//InitLogger initialize logger with specified log filename & size
func InitLogger(logfile string, size, num int) (err error) { func InitLogger(logfile string, size, num int) (err error) {
logger, err := NewLogger(logfile, size, num, L_INFO, -1, -1) logger, err := NewLogger(logfile, size, num, L_INFO, -1, -1)
if logger != nil { if logger != nil {
@ -78,27 +87,27 @@ func InitLogger(logfile string, size, num int) (err error) {
} }
//immplement write //immplement write
func (this *Logger) Write(p []byte) (n int, err error) { func (logger *Logger) Write(p []byte) (n int, err error) {
if this.DEV_MODE { if logger.DEV_MODE {
n, err = os.Stdout.Write(p) n, err = os.Stdout.Write(p)
return return
} }
n, err = this.fd.Write(p) n, err = logger.fd.Write(p)
if err == nil { if err == nil {
fi, e := this.fd.Stat() fi, e := logger.fd.Stat()
if e != nil { if e != nil {
err = e err = e
return return
} }
if fi.Size() > int64(this.size) { if fi.Size() > int64(logger.size) {
this.muSplit.Lock() logger.muSplit.Lock()
defer this.muSplit.Unlock() defer logger.muSplit.Unlock()
fname := fi.Name() fname := fi.Name()
strings.HasSuffix(fname, ".log") strings.HasSuffix(fname, ".log")
fbase := fname[:len(fname)-3] fbase := fname[:len(fname)-3]
oldBs := make([]byte, 0, this.size) oldBs := make([]byte, 0, logger.size)
newBs := []byte{} newBs := []byte{}
fd, e := os.Open(fname) fd, e := os.Open(fname)
if e != nil { if e != nil {
@ -115,7 +124,7 @@ func (this *Logger) Write(p []byte) (n int, err error) {
err = e err = e
return return
} }
if len(oldBs)+len(line) > this.size { if len(oldBs)+len(line) > logger.size {
newBs = append(newBs, line...) newBs = append(newBs, line...)
} else { } else {
oldBs = append(oldBs, line...) oldBs = append(oldBs, line...)
@ -123,11 +132,11 @@ func (this *Logger) Write(p []byte) (n int, err error) {
} }
fd.Close() fd.Close()
_, err = this.saveLog(1, fbase, oldBs) _, err = logger.saveLog(1, fbase, oldBs)
if err != nil { if err != nil {
return return
} }
err = this.fd.Close() err = logger.fd.Close()
if err != nil { if err != nil {
return return
} }
@ -135,11 +144,11 @@ func (this *Logger) Write(p []byte) (n int, err error) {
if err != nil { if err != nil {
return return
} }
this.fd, err = os.OpenFile(fname, os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.ModeAppend|0666) logger.fd, err = os.OpenFile(fname, os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.ModeAppend|0666)
if err != nil { if err != nil {
return return
} }
_, err = this.fd.Write(newBs) _, err = logger.fd.Write(newBs)
if err != nil { if err != nil {
return return
} }
@ -148,16 +157,16 @@ func (this *Logger) Write(p []byte) (n int, err error) {
return return
} }
func (this *Logger) saveLog(index int, fbase string, data []byte) (n int, err error) { func (logger *Logger) saveLog(index int, fbase string, data []byte) (n int, err error) {
fn := fbase + strconv.Itoa(index) + ".log" fn := fbase + strconv.Itoa(index) + ".log"
_, err = os.Stat(fn) _, err = os.Stat(fn)
if index < this.num && err == nil { if index < logger.num && err == nil {
var b []byte var b []byte
b, err = ioutil.ReadFile(fn) b, err = ioutil.ReadFile(fn)
if err != nil { if err != nil {
return return
} }
n, err = this.saveLog(index+1, fbase, b) n, err = logger.saveLog(index+1, fbase, b)
if err != nil { if err != nil {
return return
} }
@ -172,121 +181,130 @@ func (this *Logger) saveLog(index int, fbase string, data []byte) (n int, err er
return return
} }
//flush buf data to std log //Flush buf data to std log
func (this *Logger) Flush() { func (logger *Logger) Flush() {
if this.buf.Len() > 0 { if logger.buf.Len() > 0 {
this.mu.Lock() logger.mu.Lock()
defer this.mu.Unlock() defer logger.mu.Unlock()
log.SetFlags(0) log.SetFlags(0)
log.Print(this.buf) log.Print(logger.buf)
log.SetFlags(log.LstdFlags) log.SetFlags(log.LstdFlags)
this.buf.Reset() logger.buf.Reset()
} }
} }
//clean prefix and check buf size //Clean prefix and check buf size
func (this *Logger) clean() { func (logger *Logger) clean() {
this.log.SetPrefix("") logger.log.SetPrefix("")
if this.buf.Len()/1024 > this.flushSize { if logger.buf.Len()/1024 > logger.flushSize {
go this.Flush() go logger.Flush()
} }
} }
func (this *Logger) setPrefix(lv int) bool { func (logger *Logger) setPrefix(lv int) bool {
if lv > this.level { if lv > logger.level {
return false return false
} }
switch lv { switch lv {
case L_INFO: case L_INFO:
this.log.SetPrefix(PRE_INFO) logger.log.SetPrefix(PRE_INFO)
case L_WARNING: case L_WARNING:
this.log.SetPrefix(PRE_WARNING) logger.log.SetPrefix(PRE_WARNING)
case L_DEBUG: case L_DEBUG:
this.log.SetPrefix(PRE_DEBUG) logger.log.SetPrefix(PRE_DEBUG)
default: default:
return false return false
} }
return true return true
} }
func (this *Logger) logPrint(lv int, args ...interface{}) { func (logger *Logger) logPrint(lv int, args ...interface{}) {
this.mu.Lock() logger.mu.Lock()
defer this.mu.Unlock() defer logger.mu.Unlock()
if !this.setPrefix(lv) { if !logger.setPrefix(lv) {
return return
} }
this.log.Print(args...) logger.log.Print(args...)
this.clean() logger.clean()
} }
func (this *Logger) logPrintln(lv int, args ...interface{}) { func (logger *Logger) logPrintln(lv int, args ...interface{}) {
this.mu.Lock() logger.mu.Lock()
defer this.mu.Unlock() defer logger.mu.Unlock()
if !this.setPrefix(lv) { if !logger.setPrefix(lv) {
return return
} }
this.log.Println(args...) logger.log.Println(args...)
this.clean() logger.clean()
} }
func (this *Logger) logPrintf(lv int, format string, args ...interface{}) { func (logger *Logger) logPrintf(lv int, format string, args ...interface{}) {
this.mu.Lock() logger.mu.Lock()
defer this.mu.Unlock() defer logger.mu.Unlock()
if !this.setPrefix(lv) { if !logger.setPrefix(lv) {
return return
} }
this.log.Printf(format, args...) logger.log.Printf(format, args...)
this.clean() logger.clean()
} }
//close fd //Close fd
func (this *Logger) Close() { func (log *Logger) Close() {
if this.fd != nil { if log.fd != nil {
this.Flush() log.Flush()
this.fd.Close() log.fd.Close()
} }
} }
func (this *Logger) Info(args ...interface{}) { //Info output info log
this.logPrint(L_INFO, args...) func (logger *Logger) Info(args ...interface{}) {
logger.logPrint(L_INFO, args...)
} }
func (this *Logger) Infoln(args ...interface{}) { //Infoln output info log with newline
this.logPrintln(L_INFO, args...) func (logger *Logger) Infoln(args ...interface{}) {
logger.logPrintln(L_INFO, args...)
} }
func (this *Logger) Infof(format string, args ...interface{}) { //Infof output formatted info log
this.logPrintf(L_INFO, format, args...) func (logger *Logger) Infof(format string, args ...interface{}) {
logger.logPrintf(L_INFO, format, args...)
} }
func (this *Logger) Warning(args ...interface{}) { //Warning output warning log
this.logPrint(L_WARNING, args...) func (logger *Logger) Warning(args ...interface{}) {
logger.logPrint(L_WARNING, args...)
} }
func (this *Logger) Warningln(args ...interface{}) { //Warningln output warning log with newline
this.logPrintln(L_WARNING, args...) func (logger *Logger) Warningln(args ...interface{}) {
logger.logPrintln(L_WARNING, args...)
} }
func (this *Logger) Warningf(format string, args ...interface{}) { //Warningf output formatted warning log
this.logPrintf(L_WARNING, format, args...) func (logger *Logger) Warningf(format string, args ...interface{}) {
logger.logPrintf(L_WARNING, format, args...)
} }
func (this *Logger) Debug(args ...interface{}) { //Debug output debug log
this.logPrint(L_DEBUG, args...) func (logger *Logger) Debug(args ...interface{}) {
this.Flush() logger.logPrint(L_DEBUG, args...)
logger.Flush()
} }
func (this *Logger) Debugln(args ...interface{}) { //Debugln output debug log with newline
this.logPrintln(L_DEBUG, args...) func (logger *Logger) Debugln(args ...interface{}) {
this.Flush() logger.logPrintln(L_DEBUG, args...)
logger.Flush()
} }
func (this *Logger) Debugf(format string, args ...interface{}) { //Debugf output formatted debug log
this.logPrintf(L_DEBUG, format, args...) func (logger *Logger) Debugf(format string, args ...interface{}) {
this.Flush() logger.logPrintf(L_DEBUG, format, args...)
logger.Flush()
} }

View File

@ -7,6 +7,7 @@ import (
"strings" "strings"
) )
//Domain struct
type Domain struct { type Domain struct {
DomainName string `json:"domain_name"` DomainName string `json:"domain_name"`
SubDomains []string `json:"sub_domains"` SubDomains []string `json:"sub_domains"`