mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-29 01:04:15 -04:00 
			
		
		
		
	After initial startup, see if prometheus is loaded and if so, register our metrics with it. Stop doing the init() func and just use the sync.Once so we don't double registrer our metrics.
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package proxy
 | |
| 
 | |
| import (
 | |
| 	"github.com/coredns/coredns/core/dnsserver"
 | |
| 	"github.com/coredns/coredns/plugin"
 | |
| 	"github.com/coredns/coredns/plugin/metrics"
 | |
| 
 | |
| 	"github.com/mholt/caddy"
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	caddy.RegisterPlugin("proxy", caddy.Plugin{
 | |
| 		ServerType: "dns",
 | |
| 		Action:     setup,
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func setup(c *caddy.Controller) error {
 | |
| 	upstreams, err := NewStaticUpstreams(&c.Dispenser)
 | |
| 	if err != nil {
 | |
| 		return plugin.Error("proxy", err)
 | |
| 	}
 | |
| 
 | |
| 	t := dnsserver.GetConfig(c).Handler("trace")
 | |
| 	P := &Proxy{Trace: t}
 | |
| 	dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler {
 | |
| 		P.Next = next
 | |
| 		P.Upstreams = &upstreams
 | |
| 		return P
 | |
| 	})
 | |
| 
 | |
| 	c.OnStartup(func() error {
 | |
| 		once.Do(func() {
 | |
| 			m := dnsserver.GetConfig(c).Handler("prometheus")
 | |
| 			if m == nil {
 | |
| 				return
 | |
| 			}
 | |
| 			if x, ok := m.(*metrics.Metrics); ok {
 | |
| 				x.MustRegister(RequestCount)
 | |
| 				x.MustRegister(RequestDuration)
 | |
| 			}
 | |
| 		})
 | |
| 		return nil
 | |
| 	})
 | |
| 
 | |
| 	for i := range upstreams {
 | |
| 		u := upstreams[i]
 | |
| 		c.OnStartup(func() error {
 | |
| 			return u.Exchanger().OnStartup(P)
 | |
| 		})
 | |
| 		c.OnShutdown(func() error {
 | |
| 			return u.Exchanger().OnShutdown(P)
 | |
| 		})
 | |
| 		// Register shutdown handlers.
 | |
| 		c.OnShutdown(u.Stop)
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 |