diff options
Diffstat (limited to 'plugin/pprof/setup.go')
-rw-r--r-- | plugin/pprof/setup.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/plugin/pprof/setup.go b/plugin/pprof/setup.go new file mode 100644 index 000000000..22b82e94b --- /dev/null +++ b/plugin/pprof/setup.go @@ -0,0 +1,53 @@ +package pprof + +import ( + "net" + "sync" + + "github.com/coredns/coredns/plugin" + + "github.com/mholt/caddy" +) + +const defaultAddr = "localhost:6053" + +func init() { + caddy.RegisterPlugin("pprof", caddy.Plugin{ + ServerType: "dns", + Action: setup, + }) +} + +func setup(c *caddy.Controller) error { + found := false + h := &handler{addr: defaultAddr} + for c.Next() { + if found { + return plugin.Error("pprof", c.Err("pprof can only be specified once")) + } + args := c.RemainingArgs() + if len(args) == 1 { + h.addr = args[0] + _, _, e := net.SplitHostPort(h.addr) + if e != nil { + return e + } + } + if len(args) > 1 { + return plugin.Error("pprof", c.ArgErr()) + } + if c.NextBlock() { + return plugin.Error("pprof", c.ArgErr()) + } + found = true + } + + pprofOnce.Do(func() { + c.OnStartup(h.Startup) + c.OnShutdown(h.Shutdown) + }) + + return nil +} + +var pprofOnce sync.Once |