1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
package callrules
// go generate -import github.com/mesos/mesos-go/api/v1/lib -import github.com/mesos/mesos-go/api/v1/lib/scheduler -type E:*scheduler.Call:&scheduler.Call{} -type ET:scheduler.Call_Type -type Z:mesos.Response:&mesos.ResponseWrapper{} -output metrics_generated.go
// GENERATED CODE FOLLOWS; DO NOT EDIT.
import (
"context"
"strings"
"github.com/mesos/mesos-go/api/v1/lib/extras/metrics"
"github.com/mesos/mesos-go/api/v1/lib"
"github.com/mesos/mesos-go/api/v1/lib/scheduler"
)
// Labeler generates a set of strings that should be associated with metrics that are generated for the given event.
type Labeler func(ctx context.Context, e *scheduler.Call) []string
var defaultLabels = func() map[scheduler.Call_Type][]string {
m := make(map[scheduler.Call_Type][]string)
for k, v := range scheduler.Call_Type_name {
m[scheduler.Call_Type(k)] = []string{strings.ToLower(v)}
}
return m
}()
func defaultLabeler(ctx context.Context, e *scheduler.Call) []string {
return defaultLabels[e.GetType()]
}
// Metrics generates a Rule that invokes the given harness for each event, using the labels generated by the Labeler.
// Panics if harness or labeler is nil.
func Metrics(harness metrics.Harness, labeler Labeler) Rule {
if harness == nil {
panic("harness is a required parameter")
}
if labeler == nil {
labeler = defaultLabeler
}
return func(ctx context.Context, e *scheduler.Call, z mesos.Response, err error, ch Chain) (context.Context, *scheduler.Call, mesos.Response, error) {
labels := labeler(ctx, e)
harness(func() error {
ctx, e, z, err = ch(ctx, e, z, err)
return err
}, labels...)
return ctx, e, z, err
}
}
|