func HasZeroApps()

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
}