func createResourceStats()

in pkg/trimaran/loadvariationriskbalancing/analysis.go [81:111]


func createResourceStats(metrics []watcher.Metric, node *v1.Node, podRequest *framework.Resource,
	resourceName v1.ResourceName, watcherType string) (rs *resourceStats, isValid bool) {
	// get resource usage statistics
	nodeUtil, nodeStd, metricFound := getResourceData(metrics, watcherType)
	if !metricFound {
		klog.V(6).Infof("resource %s usage statistics for node %s: no valid data", watcherType, node.GetName())
		return nil, false
	}
	// get resource capacity
	rs = &resourceStats{}
	allocatableResources := node.Status.Allocatable
	am := allocatableResources[resourceName]

	if resourceName == v1.ResourceCPU {
		rs.capacity = float64(am.MilliValue())
		rs.req = float64(podRequest.MilliCPU)
	} else {
		rs.capacity = float64(am.Value())
		var megaFactor = float64(1. / 1024. / 1024.)
		rs.capacity *= megaFactor
		rs.req = float64(podRequest.Memory) * megaFactor
	}

	// calculate absolute usage statistics
	rs.usedAvg = nodeUtil * rs.capacity / 100
	rs.usedStdev = nodeStd * rs.capacity / 100

	klog.V(6).Infof("resource %s usage statistics for node %s: capacity=%f; req=%f; usedAvg=%f; usedStdev=%f",
		watcherType, node.GetName(), rs.capacity, rs.req, rs.usedAvg, rs.usedStdev)
	return rs, true
}