in deploy/kubernetes/operator/pkg/webhook/util/util.go [190:228]
func HasZeroApps(pod *corev1.Pod) bool {
port := utils.GetMetricsServerPort(pod)
if len(port) == 0 {
return true
}
if pod.Status.Phase != corev1.PodRunning {
return true
}
url := fmt.Sprintf("http://%v:%v/metrics/server", pod.Status.PodIP, port)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
klog.Errorf("new request failed with error: %v->%+v", url, err)
return true
}
// the request accept json response only
req.Header.Set("Accept", jsonContentType)
resp, err := httpClient.Do(req)
if err != nil {
klog.Errorf("send metrics server request failed: %v->%+v", url, err)
return true
}
if resp.StatusCode != http.StatusOK {
klog.Errorf("heartbeat response failed: invalid status (%v->%v)", url, resp.Status)
return false
}
body, err := io.ReadAll(resp.Body)
if err != nil {
klog.Errorf("heartbeat response failed: read body with err:%+v", err)
return false
}
if num, err := getLastAppNum(body); err != nil {
klog.Errorf("get last app number of (%v) failed: %v", pod.Spec.NodeName, err)
return false
} else if num > 0 {
klog.V(4).Infof("last %v apps in node %v", num, pod.Spec.NodeName)
return false
}
return true
}