12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- Copyright 2015 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package metrics
- import (
- "fmt"
- )
- // GetResourceUtilizationRatio takes in a set of metrics, a set of matching requests,
- // and a target utilization percentage, and calculates the ratio of
- // desired to actual utilization (returning that, the actual utilization, and the raw average value)
- func GetResourceUtilizationRatio(metrics PodMetricsInfo, requests map[string]int64, targetUtilization int32) (utilizationRatio float64, currentUtilization int32, rawAverageValue int64, err error) {
- metricsTotal := int64(0)
- requestsTotal := int64(0)
- numEntries := 0
- for podName, metric := range metrics {
- request, hasRequest := requests[podName]
- if !hasRequest {
- // we check for missing requests elsewhere, so assuming missing requests == extraneous metrics
- continue
- }
- metricsTotal += metric.Value
- requestsTotal += request
- numEntries++
- }
- // if the set of requests is completely disjoint from the set of metrics,
- // then we could have an issue where the requests total is zero
- if requestsTotal == 0 {
- return 0, 0, 0, fmt.Errorf("no metrics returned matched known pods")
- }
- currentUtilization = int32((metricsTotal * 100) / requestsTotal)
- return float64(currentUtilization) / float64(targetUtilization), currentUtilization, metricsTotal / int64(numEntries), nil
- }
- // GetMetricUtilizationRatio takes in a set of metrics and a target utilization value,
- // and calcuates the ratio of desired to actual utilization
- // (returning that and the actual utilization)
- func GetMetricUtilizationRatio(metrics PodMetricsInfo, targetUtilization int64) (utilizationRatio float64, currentUtilization int64) {
- metricsTotal := int64(0)
- for _, metric := range metrics {
- metricsTotal += metric.Value
- }
- currentUtilization = metricsTotal / int64(len(metrics))
- return float64(currentUtilization) / float64(targetUtilization), currentUtilization
- }
|