// If a apiserver client is passed in, the function will try to get kubelet metrics from metrics grabber; // or else, the function will try to get kubelet metrics directly from the node. func getKubeletMetricsFromNode(c *client.Client, nodeName string) (metrics.KubeletMetrics, error) { if c == nil { return metrics.GrabKubeletMetricsWithoutProxy(nodeName) } grabber, err := metrics.NewMetricsGrabber(c, true, false, false, false) if err != nil { return metrics.KubeletMetrics{}, err } return grabber.GrabFromKubelet(nodeName) }
// getPodStartLatency gets prometheus metric 'pod start latency' from kubelet func getPodStartLatency(node string) (framework.KubeletLatencyMetrics, error) { latencyMetrics := framework.KubeletLatencyMetrics{} ms, err := metrics.GrabKubeletMetricsWithoutProxy(node) Expect(err).NotTo(HaveOccurred()) for _, samples := range ms { for _, sample := range samples { if sample.Metric["__name__"] == kubemetrics.KubeletSubsystem+"_"+kubemetrics.PodStartLatencyKey { quantile, _ := strconv.ParseFloat(string(sample.Metric["quantile"]), 64) latencyMetrics = append(latencyMetrics, framework.KubeletLatencyMetric{ Quantile: quantile, Method: kubemetrics.PodStartLatencyKey, Latency: time.Duration(int(sample.Value)) * time.Microsecond}) } } } return latencyMetrics, nil }