func RecordClusterMetrics()

in pkg/scheduler/scheduler.go [31:76]


func RecordClusterMetrics(ctx context.Context, m metrics.ClusterRecorder, nodes []*v1.Node, daemonsets []*appsv1.DaemonSet, deployments []*appsv1.Deployment) {
	// Report on node conditions
	if nodes == nil {
		klog.V(1).Infoln("Informer caches syncing. Skip next scraping cycle and wait until the caches are fully synced")
		return
	}
	conditions := nodeConditions(nodes)
	conditionCounts := []metrics.LabelCount{}
	for _, v := range conditions.Dump() {
		conditionCounts = append(conditionCounts, metrics.LabelCount{
			Labels: v.Key,
			Count:  v.Value,
		})
	}
	m.RecordNodeConditions(ctx, conditionCounts)

	// Report on node availability (SLI)
	availabilities, availableNodes := nodeAvailabilities(nodes)
	availabilityCounts := []metrics.LabelCount{}
	for _, v := range availabilities.Dump() {
		availabilityCounts = append(availabilityCounts, metrics.LabelCount{
			Labels: v.Key,
			Count:  v.Value,
		})
	}
	m.RecordNodeAvailabilities(ctx, availabilityCounts)

	// Report on expected addons
	addonCounts := []metrics.LabelCount{}
	for addon, count := range daemonSetPodCountByAddon(daemonsets) {
		labels := addonLabels(addon)
		// Use _available_ nodes as expected number of nodes used by daemonsets
		addonCounts = append(addonCounts, metrics.LabelCount{
			Labels: labels,
			Count:  availableNodes * count,
		})
	}
	for addon, count := range deploymentPodCountByAddon(deployments) {
		labels := addonLabels(addon)
		addonCounts = append(addonCounts, metrics.LabelCount{
			Labels: labels,
			Count:  count,
		})
	}
	m.RecordAddonCounts(ctx, addonCounts)
}