aboutsummaryrefslogtreecommitdiff
path: root/plugin/pprof/setup.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/pprof/setup.go')
-rw-r--r--plugin/pprof/setup.go53
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