@@ -31,11 +31,16 @@ type Server struct {
31
31
doneOnce sync.Once
32
32
}
33
33
34
+ type RouterConfig struct {
35
+ DisableTracing bool
36
+ }
37
+
34
38
type Config struct {
35
39
HealthPath string `split_words:"true"`
36
40
Port int
37
41
Host string
38
42
TLS nconf.TLSConfig
43
+ Router RouterConfig
39
44
}
40
45
41
46
// APIDefinition is used to control lifecycle of the API
@@ -67,7 +72,9 @@ func NewOpts(log logrus.FieldLogger, api APIDefinition, opts ...Opt) (*Server, e
67
72
WithHostAndPort ("" , defaultPort ),
68
73
}
69
74
70
- return buildServer (log , api , append (defaultOpts , opts ... ), defaultHealthPath )
75
+ return buildServer (log , api , append (defaultOpts , opts ... ), Config {
76
+ HealthPath : defaultHealthPath ,
77
+ })
71
78
}
72
79
73
80
// New will build a server with the defaults in place
@@ -85,7 +92,7 @@ func New(log logrus.FieldLogger, config Config, api APIDefinition) (*Server, err
85
92
opts = append (opts , WithTLS (tcfg ))
86
93
}
87
94
88
- return buildServer (log , api , opts , config . HealthPath )
95
+ return buildServer (log , api , opts , config )
89
96
}
90
97
91
98
func (s * Server ) Shutdown (to time.Duration ) error {
@@ -173,25 +180,32 @@ func APIFunc(start func(router.Router) error, stop func(), info APIInfo) APIDefi
173
180
}
174
181
}
175
182
176
- func buildRouter (log logrus.FieldLogger , api APIDefinition , healthPath string ) router.Router {
183
+ func buildRouter (log logrus.FieldLogger , api APIDefinition , config Config ) router.Router {
177
184
var healthHandler router.APIHandler
178
185
if checker , ok := api .(HealthChecker ); ok {
179
186
healthHandler = checker .Healthy
180
187
}
181
188
182
- r := router .New (
183
- log ,
184
- router .OptHealthCheck (healthPath , healthHandler ),
185
- router .OptEnableTracing (api .Info ().Name ),
189
+ opts := []router.Option {
190
+ router .OptHealthCheck (config .HealthPath , healthHandler ),
186
191
router .OptVersionHeader (api .Info ().Name , api .Info ().Version ),
187
192
router .OptRecoverer (),
193
+ }
194
+
195
+ if ! config .Router .DisableTracing {
196
+ opts = append (opts , router .OptEnableTracing (api .Info ().Name ))
197
+ }
198
+
199
+ r := router .New (
200
+ log ,
201
+ opts ... ,
188
202
)
189
203
190
204
return r
191
205
}
192
206
193
- func buildServer (log logrus.FieldLogger , api APIDefinition , opts []Opt , healthPath string ) (* Server , error ) {
194
- r := buildRouter (log , api , healthPath )
207
+ func buildServer (log logrus.FieldLogger , api APIDefinition , opts []Opt , config Config ) (* Server , error ) {
208
+ r := buildRouter (log , api , config )
195
209
196
210
if err := api .Start (r ); err != nil {
197
211
return nil , errors .Wrap (err , "Failed to start API" )
0 commit comments