91 lines
2.1 KiB
Go
91 lines
2.1 KiB
Go
// Licensed to Elasticsearch B.V. under one or more contributor
|
|
// license agreements. See the NOTICE file distributed with
|
|
// this work for additional information regarding copyright
|
|
// ownership. Elasticsearch B.V. licenses this file to you under
|
|
// the Apache License, Version 2.0 (the "License"); you may
|
|
// not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing,
|
|
// software distributed under the License is distributed on an
|
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
// KIND, either express or implied. See the License for the
|
|
// specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
package monitoring
|
|
|
|
// Option type for passing additional options to NewRegistry.
|
|
type Option func(options) options
|
|
|
|
type options struct {
|
|
publishExpvar bool
|
|
mode Mode
|
|
}
|
|
|
|
var defaultOptions = options{
|
|
publishExpvar: false,
|
|
mode: Full,
|
|
}
|
|
|
|
// PublishExpvar enables publishing all registered variables via expvar interface.
|
|
// Note: expvar does not allow removal of any stats.
|
|
func PublishExpvar(o options) options {
|
|
o.publishExpvar = true
|
|
return o
|
|
}
|
|
|
|
// IgnorePublishExpvar disables publishing expvar variables in a sub-registry.
|
|
func IgnorePublishExpvar(o options) options {
|
|
o.publishExpvar = false
|
|
return o
|
|
}
|
|
|
|
func Report(o options) options {
|
|
o.mode = Reported
|
|
return o
|
|
}
|
|
|
|
func DoNotReport(o options) options {
|
|
o.mode = Full
|
|
return o
|
|
}
|
|
|
|
func varOpts(regOpts *options, opts []Option) *options {
|
|
if regOpts != nil && len(opts) == 0 {
|
|
return regOpts
|
|
}
|
|
|
|
O := defaultOptions
|
|
if regOpts != nil {
|
|
O = *regOpts
|
|
}
|
|
|
|
for _, opt := range opts {
|
|
O = opt(O)
|
|
}
|
|
return &O
|
|
}
|
|
|
|
func applyOpts(in *options, opts []Option) *options {
|
|
if len(opts) == 0 {
|
|
return ensureOptions(in)
|
|
}
|
|
|
|
tmp := *ensureOptions(in)
|
|
for _, opt := range opts {
|
|
tmp = opt(tmp)
|
|
}
|
|
return &tmp
|
|
}
|
|
|
|
func ensureOptions(in *options) *options {
|
|
if in != nil {
|
|
return in
|
|
}
|
|
|
|
tmp := defaultOptions
|
|
return &tmp
|
|
}
|