// GetPodDetail returns the details (PodDetail) of a named Pod from a particular // namespace. func GetPodDetail(client k8sClient.Interface, heapsterClient client.HeapsterClient, namespace, name string) (*PodDetail, error) { log.Printf("Getting details of %s pod in %s namespace", name, namespace) channels := &common.ResourceChannels{ ConfigMapList: common.GetConfigMapListChannel(client, common.NewSameNamespaceQuery(namespace), 1), PodMetrics: common.GetPodMetricsChannel(heapsterClient, name, namespace), } pod, err := client.Pods(namespace).Get(name) if err != nil { return nil, err } // Download metrics _, metricPromises := dataselect.GenericDataSelectWithMetrics(toCells([]api.Pod{*pod}), dataselect.StdMetricsDataSelect, dataselect.NoResourceCache, &heapsterClient) metrics, _ := metricPromises.GetMetrics() if err = <-channels.ConfigMapList.Error; err != nil { return nil, err } configMapList := <-channels.ConfigMapList.List podDetail := toPodDetail(pod, metrics, configMapList) return &podDetail, nil }
// GetPodDetail returns the details (PodDetail) of a named Pod from a particular // namespace. func GetPodDetail(client k8sClient.Interface, heapsterClient client.HeapsterClient, namespace, name string) (*PodDetail, error) { log.Printf("Getting details of %s pod in %s namespace", name, namespace) channels := &common.ResourceChannels{ ConfigMapList: common.GetConfigMapListChannel(client, common.NewSameNamespaceQuery(namespace), 1), PodMetrics: common.GetPodMetricsChannel(heapsterClient, name, namespace), } pod, err := client.Core().Pods(namespace).Get(name) if err != nil { return nil, err } controller := Controller{ Kind: "unknown", } creatorAnnotation, found := pod.ObjectMeta.Annotations[api.CreatedByAnnotation] if found { creatorRef, err := getPodCreator(client, creatorAnnotation, common.NewSameNamespaceQuery(namespace), heapsterClient) if err != nil { return nil, err } controller = *creatorRef } // Download metrics _, metricPromises := dataselect.GenericDataSelectWithMetrics(toCells([]api.Pod{*pod}), dataselect.StdMetricsDataSelect, dataselect.NoResourceCache, &heapsterClient) metrics, _ := metricPromises.GetMetrics() if err = <-channels.ConfigMapList.Error; err != nil { return nil, err } configMapList := <-channels.ConfigMapList.List podDetail := toPodDetail(pod, metrics, configMapList, controller) return &podDetail, nil }