plugin_evaluation_total metric support preScore/score

This commit is contained in:
AxeZhan 2023-05-16 12:00:17 +08:00
parent f871d5fabe
commit 8c6c1e5319
2 changed files with 48 additions and 1 deletions

View File

@ -358,6 +358,12 @@ func NewFramework(r Registry, profile *config.KubeSchedulerProfile, stopCh <-cha
options.captureProfile(outputProfile)
}
f.setInstrumentedPlugins()
return f, nil
}
// setInstrumentedPlugins initializes instrumented plugins from current plugins that frameworkImpl has.
func (f *frameworkImpl) setInstrumentedPlugins() {
// Cache metric streams for prefilter and filter plugins.
for i, pl := range f.preFilterPlugins {
f.preFilterPlugins[i] = &instrumentedPreFilterPlugin{
@ -372,7 +378,19 @@ func NewFramework(r Registry, profile *config.KubeSchedulerProfile, stopCh <-cha
}
}
return f, nil
// Cache metric streams for prescore and score plugins.
for i, pl := range f.preScorePlugins {
f.preScorePlugins[i] = &instrumentedPreScorePlugin{
PreScorePlugin: f.preScorePlugins[i],
metric: metrics.PluginEvaluationTotal.WithLabelValues(pl.Name(), metrics.PreScore, f.profileName),
}
}
for i, pl := range f.scorePlugins {
f.scorePlugins[i] = &instrumentedScorePlugin{
ScorePlugin: f.scorePlugins[i],
metric: metrics.PluginEvaluationTotal.WithLabelValues(pl.Name(), metrics.Score, f.profileName),
}
}
}
func (f *frameworkImpl) SetPodNominator(n framework.PodNominator) {

View File

@ -52,3 +52,32 @@ func (p *instrumentedPreFilterPlugin) PreFilter(ctx context.Context, state *fram
}
return result, status
}
type instrumentedPreScorePlugin struct {
framework.PreScorePlugin
metric compbasemetrics.CounterMetric
}
var _ framework.PreScorePlugin = &instrumentedPreScorePlugin{}
func (p *instrumentedPreScorePlugin) PreScore(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodes []*v1.Node) *framework.Status {
status := p.PreScorePlugin.PreScore(ctx, state, pod, nodes)
if !status.IsSkip() {
p.metric.Inc()
}
return status
}
type instrumentedScorePlugin struct {
framework.ScorePlugin
metric compbasemetrics.CounterMetric
}
var _ framework.ScorePlugin = &instrumentedScorePlugin{}
func (p *instrumentedScorePlugin) Score(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodeName string) (int64, *framework.Status) {
p.metric.Inc()
return p.ScorePlugin.Score(ctx, state, pod, nodeName)
}