mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2024-12-22 11:06:04 +00:00
Handle condition when backend weights only sometimes present (#33)
Signed-off-by: Arjun Naik <arjun.rn@gmail.com>
This commit is contained in:
parent
7258cb7800
commit
f4efa2898b
@ -81,29 +81,33 @@ func NewSkipperCollector(client kubernetes.Interface, plugin CollectorPlugin, hp
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAnnotationWeight(backendWeights string, backend string) float64 {
|
func getAnnotationWeight(backendWeights string, backend string) (float64, bool) {
|
||||||
var weightsMap map[string]int
|
var weightsMap map[string]int
|
||||||
err := json.Unmarshal([]byte(backendWeights), &weightsMap)
|
err := json.Unmarshal([]byte(backendWeights), &weightsMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1
|
return 0, false
|
||||||
}
|
}
|
||||||
if weight, ok := weightsMap[backend]; ok {
|
if weight, ok := weightsMap[backend]; ok {
|
||||||
return float64(weight) / 100
|
return float64(weight) / 100, true
|
||||||
}
|
}
|
||||||
return 1
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWeights(ingressAnnotations map[string]string, backendAnnotations []string, backend string) float64 {
|
func getWeights(ingressAnnotations map[string]string, backendAnnotations []string, backend string) float64 {
|
||||||
var maxWeight float64 = -1
|
var maxWeight float64 = -1
|
||||||
|
weightSet := false
|
||||||
for _, anno := range backendAnnotations {
|
for _, anno := range backendAnnotations {
|
||||||
if weightsMap, ok := ingressAnnotations[anno]; ok {
|
if weightsMap, ok := ingressAnnotations[anno]; ok {
|
||||||
weight := getAnnotationWeight(weightsMap, backend)
|
weight, isPresent := getAnnotationWeight(weightsMap, backend)
|
||||||
if weight > maxWeight {
|
if isPresent {
|
||||||
maxWeight = weight
|
weightSet = true
|
||||||
|
if weight > maxWeight {
|
||||||
|
maxWeight = weight
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if maxWeight >= 0 {
|
if weightSet {
|
||||||
return maxWeight
|
return maxWeight
|
||||||
}
|
}
|
||||||
return 1.0
|
return 1.0
|
||||||
|
@ -180,12 +180,27 @@ func TestSkipperCollector(t *testing.T) {
|
|||||||
ingressName: "dummy-ingress",
|
ingressName: "dummy-ingress",
|
||||||
collectedMetric: 1500,
|
collectedMetric: 1500,
|
||||||
namespace: "default",
|
namespace: "default",
|
||||||
backend: "",
|
backend: "backend3",
|
||||||
backendWeights: map[string]map[string]int{testBackendWeightsAnnotation: {"backend2": 100, "backend1": 0}},
|
backendWeights: map[string]map[string]int{testBackendWeightsAnnotation: {"backend2": 100, "backend1": 0}},
|
||||||
replicas: 1,
|
replicas: 1,
|
||||||
readyReplicas: 1,
|
readyReplicas: 1,
|
||||||
backendAnnotations: []string{testBackendWeightsAnnotation},
|
backendAnnotations: []string{testBackendWeightsAnnotation},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
msg: "test partial backend annotations",
|
||||||
|
metrics: []int{100, 1500, 700},
|
||||||
|
ingressName: "dummy-ingress",
|
||||||
|
collectedMetric: 60,
|
||||||
|
namespace: "default",
|
||||||
|
backend: "backend2",
|
||||||
|
backendWeights: map[string]map[string]int{
|
||||||
|
testBackendWeightsAnnotation: {"backend2": 20, "backend1": 80},
|
||||||
|
testStacksetWeightsAnnotation: {"backend1": 100},
|
||||||
|
},
|
||||||
|
replicas: 5,
|
||||||
|
readyReplicas: 5,
|
||||||
|
backendAnnotations: []string{testBackendWeightsAnnotation, testStacksetWeightsAnnotation},
|
||||||
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(tc.msg, func(tt *testing.T) {
|
t.Run(tc.msg, func(tt *testing.T) {
|
||||||
client := fake.NewSimpleClientset()
|
client := fake.NewSimpleClientset()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user