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
}