feat(pkger): extend metrics for export functionality
parent
cb8fe33da8
commit
c67a6ee1ea
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"net/url"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/influxdata/influxdb/v2"
|
||||
|
@ -25,7 +26,7 @@ var _ SVC = (*mwMetrics)(nil)
|
|||
func MWMetrics(reg *prom.Registry) SVCMiddleware {
|
||||
return func(svc SVC) SVC {
|
||||
return &mwMetrics{
|
||||
rec: metric.New(reg, "pkger", metric.WithVec(templateVec())),
|
||||
rec: metric.New(reg, "pkger", metric.WithVec(templateVec()), metric.WithVec(exportVec())),
|
||||
next: svc,
|
||||
}
|
||||
}
|
||||
|
@ -62,8 +63,21 @@ func (s *mwMetrics) UpdateStack(ctx context.Context, upd StackUpdate) (Stack, er
|
|||
|
||||
func (s *mwMetrics) Export(ctx context.Context, opts ...ExportOptFn) (*Pkg, error) {
|
||||
rec := s.rec.Record("create_pkg")
|
||||
opt, err := exportOptFromOptFns(opts)
|
||||
if err != nil {
|
||||
return nil, rec(err)
|
||||
}
|
||||
|
||||
pkg, err := s.next.Export(ctx, opts...)
|
||||
return pkg, rec(err)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return pkg, rec(err, metric.RecordAdditional(map[string]interface{}{
|
||||
"num_org_ids": len(opt.OrgIDs),
|
||||
"summary": pkg.Summary(),
|
||||
"by_stack": opt.StackID != 0,
|
||||
}))
|
||||
}
|
||||
|
||||
func (s *mwMetrics) DryRun(ctx context.Context, orgID, userID influxdb.ID, opts ...ApplyOptFn) (ImpactSummary, error) {
|
||||
|
@ -86,6 +100,70 @@ func applyMetricAdditions(orgID, userID influxdb.ID, sources []string) func(*met
|
|||
})
|
||||
}
|
||||
|
||||
func exportVec() metric.VecOpts {
|
||||
const (
|
||||
byStack = "by_stack"
|
||||
numOrgIDs = "num_org_ids"
|
||||
bkts = "buckets"
|
||||
checks = "checks"
|
||||
dashes = "dashboards"
|
||||
endpoints = "endpoints"
|
||||
labels = "labels"
|
||||
labelMappings = "label_mappings"
|
||||
rules = "rules"
|
||||
tasks = "tasks"
|
||||
telegrafConfigs = "telegraf_configs"
|
||||
variables = "variables"
|
||||
)
|
||||
return metric.VecOpts{
|
||||
Name: "template_export",
|
||||
Help: "Metrics for resources being exported",
|
||||
LabelNames: []string{
|
||||
"method",
|
||||
byStack,
|
||||
numOrgIDs,
|
||||
bkts,
|
||||
checks,
|
||||
dashes,
|
||||
endpoints,
|
||||
labels,
|
||||
labelMappings,
|
||||
rules,
|
||||
tasks,
|
||||
telegrafConfigs,
|
||||
variables,
|
||||
},
|
||||
CounterFn: func(vec *prometheus.CounterVec, o metric.CollectFnOpts) {
|
||||
if o.Err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
orgID, _ := o.AdditionalProps[numOrgIDs].(int)
|
||||
sum, _ := o.AdditionalProps["sum"].(Summary)
|
||||
st, _ := o.AdditionalProps[byStack].(bool)
|
||||
|
||||
vec.
|
||||
With(prometheus.Labels{
|
||||
"method": o.Method,
|
||||
byStack: strconv.FormatBool(st),
|
||||
numOrgIDs: strconv.Itoa(orgID),
|
||||
bkts: strconv.Itoa(len(sum.Buckets)),
|
||||
checks: strconv.Itoa(len(sum.Checks)),
|
||||
dashes: strconv.Itoa(len(sum.Dashboards)),
|
||||
endpoints: strconv.Itoa(len(sum.NotificationEndpoints)),
|
||||
labels: strconv.Itoa(len(sum.Labels)),
|
||||
labelMappings: strconv.Itoa(len(sum.LabelMappings)),
|
||||
rules: strconv.Itoa(len(sum.NotificationRules)),
|
||||
tasks: strconv.Itoa(len(sum.Tasks)),
|
||||
telegrafConfigs: strconv.Itoa(len(sum.TelegrafConfigs)),
|
||||
variables: strconv.Itoa(len(sum.TelegrafConfigs)),
|
||||
}).
|
||||
Inc()
|
||||
},
|
||||
HistogramFn: nil,
|
||||
}
|
||||
}
|
||||
|
||||
func templateVec() metric.VecOpts {
|
||||
return metric.VecOpts{
|
||||
Name: "template_count",
|
||||
|
|
Loading…
Reference in New Issue