aboutsummaryrefslogtreecommitdiff
path: root/middleware/errors/errors.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/errors/errors.go')
-rw-r--r--middleware/errors/errors.go79
1 files changed, 0 insertions, 79 deletions
diff --git a/middleware/errors/errors.go b/middleware/errors/errors.go
deleted file mode 100644
index 9b0bfa946..000000000
--- a/middleware/errors/errors.go
+++ /dev/null
@@ -1,79 +0,0 @@
-// Package errors implements an HTTP error handling middleware.
-package errors
-
-import (
- "fmt"
- "log"
- "runtime"
- "strings"
- "time"
-
- "github.com/coredns/coredns/middleware"
- "github.com/coredns/coredns/request"
-
- "github.com/miekg/dns"
- "golang.org/x/net/context"
-)
-
-// errorHandler handles DNS errors (and errors from other middleware).
-type errorHandler struct {
- Next middleware.Handler
- LogFile string
- Log *log.Logger
-}
-
-// ServeDNS implements the middleware.Handler interface.
-func (h errorHandler) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
- defer h.recovery(ctx, w, r)
-
- rcode, err := middleware.NextOrFailure(h.Name(), h.Next, ctx, w, r)
-
- if err != nil {
- state := request.Request{W: w, Req: r}
- errMsg := fmt.Sprintf("%s [ERROR %d %s %s] %v", time.Now().Format(timeFormat), rcode, state.Name(), state.Type(), err)
-
- h.Log.Println(errMsg)
- }
-
- return rcode, err
-}
-
-func (h errorHandler) Name() string { return "errors" }
-
-func (h errorHandler) recovery(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) {
- rec := recover()
- if rec == nil {
- return
- }
-
- // Obtain source of panic
- // From: https://gist.github.com/swdunlop/9629168
- var name, file string // function name, file name
- var line int
- var pc [16]uintptr
- n := runtime.Callers(3, pc[:])
- for _, pc := range pc[:n] {
- fn := runtime.FuncForPC(pc)
- if fn == nil {
- continue
- }
- file, line = fn.FileLine(pc)
- name = fn.Name()
- if !strings.HasPrefix(name, "runtime.") {
- break
- }
- }
-
- // Trim file path
- delim := "/coredns/"
- pkgPathPos := strings.Index(file, delim)
- if pkgPathPos > -1 && len(file) > pkgPathPos+len(delim) {
- file = file[pkgPathPos+len(delim):]
- }
-
- panicMsg := fmt.Sprintf("%s [PANIC %s %s] %s:%d - %v", time.Now().Format(timeFormat), r.Question[0].Name, dns.Type(r.Question[0].Qtype), file, line, rec)
- // Currently we don't use the function name, since file:line is more conventional
- h.Log.Printf(panicMsg)
-}
-
-const timeFormat = "02/Jan/2006:15:04:05 -0700"