diff options
Diffstat (limited to 'middleware/trace/setup.go')
-rw-r--r-- | middleware/trace/setup.go | 74 |
1 files changed, 50 insertions, 24 deletions
diff --git a/middleware/trace/setup.go b/middleware/trace/setup.go index 302d43d4d..57531d34c 100644 --- a/middleware/trace/setup.go +++ b/middleware/trace/setup.go @@ -2,8 +2,8 @@ package trace import ( "fmt" + "strconv" "strings" - "sync" "github.com/miekg/coredns/core/dnsserver" "github.com/miekg/coredns/middleware" @@ -29,38 +29,65 @@ func setup(c *caddy.Controller) error { return t }) - traceOnce.Do(func() { - c.OnStartup(t.OnStartup) - }) + c.OnStartup(t.OnStartup) return nil } func traceParse(c *caddy.Controller) (*Trace, error) { var ( - tr = &Trace{Endpoint: defEP, EndpointType: defEpType} + tr = &Trace{Endpoint: defEP, EndpointType: defEpType, every: 1, serviceName: defServiceName} err error ) cfg := dnsserver.GetConfig(c) tr.ServiceEndpoint = cfg.ListenHost + ":" + cfg.Port - for c.Next() { - if c.Val() == "trace" { - var err error - args := c.RemainingArgs() - switch len(args) { - case 0: - tr.Endpoint, err = normalizeEndpoint(tr.EndpointType, defEP) - case 1: - tr.Endpoint, err = normalizeEndpoint(defEpType, args[0]) - case 2: - tr.EndpointType = strings.ToLower(args[0]) - tr.Endpoint, err = normalizeEndpoint(tr.EndpointType, args[1]) - default: - err = c.ArgErr() - } - if err != nil { - return tr, err + for c.Next() { // trace + var err error + args := c.RemainingArgs() + switch len(args) { + case 0: + tr.Endpoint, err = normalizeEndpoint(tr.EndpointType, defEP) + case 1: + tr.Endpoint, err = normalizeEndpoint(defEpType, args[0]) + case 2: + tr.EndpointType = strings.ToLower(args[0]) + tr.Endpoint, err = normalizeEndpoint(tr.EndpointType, args[1]) + default: + err = c.ArgErr() + } + if err != nil { + return tr, err + } + for c.NextBlock() { + switch c.Val() { + case "every": + args := c.RemainingArgs() + if len(args) != 1 { + return nil, c.ArgErr() + } + tr.every, err = strconv.ParseUint(args[0], 10, 64) + if err != nil { + return nil, err + } + case "service": + args := c.RemainingArgs() + if len(args) != 1 { + return nil, c.ArgErr() + } + tr.serviceName = args[0] + case "client_server": + args := c.RemainingArgs() + if len(args) > 1 { + return nil, c.ArgErr() + } + tr.clientServer = true + if len(args) == 1 { + tr.clientServer, err = strconv.ParseBool(args[0]) + } + if err != nil { + return nil, err + } } } } @@ -79,9 +106,8 @@ func normalizeEndpoint(epType, ep string) (string, error) { } } -var traceOnce sync.Once - const ( defEP = "localhost:9411" defEpType = "zipkin" + defServiceName = "coredns" ) |