提交 43ee97ee 编写于 作者: S Sebastian Florek 提交者: Marcin Maciaszczyk

Fix error handling (#2170)

上级 4eeca0b6
......@@ -139,12 +139,12 @@ func GetNodeEvents(client client.Interface, dsQuery *dataselect.DataSelectQuery,
mc := client.CoreV1().Nodes()
node, err := mc.Get(nodeName, metaV1.GetOptions{})
if err != nil {
return nil, err
return &eventList, err
}
events, err := client.CoreV1().Events(v1.NamespaceAll).Search(scheme, node)
if err != nil {
return nil, err
return &eventList, err
}
if !IsTypeFilled(events.Items) {
......
......@@ -35,6 +35,9 @@ type IngressDetail struct {
// Status is the current state of the Ingress.
Status extensions.IngressStatus `json:"status"`
// List of non-critical errors, that occurred during resource retrieval.
Errors []error `json:"errors"`
}
// GetIngressDetail returns returns detailed information about an ingress
......
......@@ -58,7 +58,7 @@ func GetIngressList(client client.Interface, namespace *common.NamespaceQuery, d
return nil, criticalError
}
return toIngressList(ingressList.Items, nonCriticalErrors, dsQuery), err
return toIngressList(ingressList.Items, nonCriticalErrors, dsQuery), nil
}
// GetIngressListFromChannels - return all ingresses in the given namespace.
......
......@@ -237,22 +237,28 @@ func getNodeAllocatedResources(node v1.Node, podList *v1.PodList) (NodeAllocated
// GetNodePods return pods list in given named node
func GetNodePods(client k8sClient.Interface, metricClient metricapi.MetricClient,
dsQuery *dataselect.DataSelectQuery, name string) (*pod.PodList, error) {
podList := pod.PodList{
Pods: []pod.Pod{},
CumulativeMetrics: []metricapi.Metric{},
}
node, err := client.CoreV1().Nodes().Get(name, metaV1.GetOptions{})
if err != nil {
return nil, err
return &podList, err
}
pods, err := getNodePods(client, *node)
if err != nil {
return nil, err
return &podList, err
}
events, err := event.GetPodsEvents(client, v1.NamespaceAll, pods.Items)
if err != nil {
return nil, err
nonCriticalErrors, criticalError := errors.HandleError(err)
if criticalError != nil {
return &podList, criticalError
}
podList := pod.ToPodList(pods.Items, events, []error{}, dsQuery, metricClient)
podList = pod.ToPodList(pods.Items, events, nonCriticalErrors, dsQuery, metricClient)
return &podList, nil
}
......
......@@ -186,7 +186,7 @@ func getPodCreator(client kubernetes.Interface, creatorAnnotation string, nsQuer
events := <-channels.EventList.List
if err := <-channels.EventList.Error; err != nil {
return nil, err
events = &v1.EventList{}
}
reference := serializedReference.Reference
......
......@@ -17,6 +17,7 @@ package pod
import (
"log"
"github.com/kubernetes/dashboard/src/app/backend/api"
"github.com/kubernetes/dashboard/src/app/backend/resource/common"
"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
"github.com/kubernetes/dashboard/src/app/backend/resource/event"
......@@ -26,16 +27,20 @@ import (
// GetEventsForPod gets events that are associated with this pod.
func GetEventsForPod(client client.Interface, dsQuery *dataselect.DataSelectQuery, namespace,
podName string) (*common.EventList, error) {
eventList := common.EventList{
Events: make([]common.Event, 0),
ListMeta: api.ListMeta{TotalItems: 0},
}
podEvents, err := event.GetPodEvents(client, namespace, podName)
if err != nil {
return nil, err
return &eventList, err
}
events := event.CreateEventList(podEvents, dsQuery)
eventList = event.CreateEventList(podEvents, dsQuery)
log.Printf("Found %d events related to %s pod in %s namespace", len(events.Events), podName,
log.Printf("Found %d events related to %s pod in %s namespace", len(eventList.Events), podName,
namespace)
return &events, nil
return &eventList, nil
}
......@@ -96,18 +96,18 @@ func GetServiceDetail(client k8sClient.Interface, metricClient metricapi.MetricC
// GetServicePods gets list of pods targeted by given label selector in given namespace.
func GetServicePods(client k8sClient.Interface, metricClient metricapi.MetricClient, namespace,
name string, dsQuery *dataselect.DataSelectQuery) (*pod.PodList, error) {
podList := pod.PodList{
Pods: []pod.Pod{},
CumulativeMetrics: []metricapi.Metric{},
}
service, err := client.CoreV1().Services(namespace).Get(name, metaV1.GetOptions{})
if err != nil {
return nil, err
return &podList, err
}
if service.Spec.Selector == nil {
emptyPodList := &pod.PodList{
Pods: []pod.Pod{},
CumulativeMetrics: []metricapi.Metric{},
}
return emptyPodList, nil
return &podList, nil
}
labelSelector := labels.SelectorFromSet(service.Spec.Selector)
......@@ -121,14 +121,15 @@ func GetServicePods(client k8sClient.Interface, metricClient metricapi.MetricCli
apiPodList := <-channels.PodList.List
if err := <-channels.PodList.Error; err != nil {
return nil, err
return &podList, err
}
events, err := event.GetPodsEvents(client, namespace, apiPodList.Items)
if err != nil {
return nil, err
nonCriticalErrors, criticalError := errors.HandleError(err)
if criticalError != nil {
return &podList, criticalError
}
podList := pod.ToPodList(apiPodList.Items, events, []error{}, dsQuery, metricClient)
podList = pod.ToPodList(apiPodList.Items, events, nonCriticalErrors, dsQuery, metricClient)
return &podList, nil
}
......@@ -17,6 +17,7 @@ package service
import (
"log"
"github.com/kubernetes/dashboard/src/app/backend/api"
"github.com/kubernetes/dashboard/src/app/backend/resource/common"
"github.com/kubernetes/dashboard/src/app/backend/resource/dataselect"
"github.com/kubernetes/dashboard/src/app/backend/resource/event"
......@@ -26,17 +27,21 @@ import (
// GetServiceEvents returns model events for a service with the given name in the given namespace.
func GetServiceEvents(client client.Interface, dsQuery *dataselect.DataSelectQuery, namespace, name string) (
*common.EventList, error) {
eventList := common.EventList{
Events: make([]common.Event, 0),
ListMeta: api.ListMeta{TotalItems: 0},
}
serviceEvents, err := event.GetEvents(client, namespace, name)
if err != nil {
return nil, err
return &eventList, err
}
if !event.IsTypeFilled(serviceEvents) {
serviceEvents = event.FillEventsType(serviceEvents)
}
events := event.CreateEventList(serviceEvents, dsQuery)
log.Printf("Found %d events related to %s service in %s namespace", len(events.Events), name, namespace)
return &events, nil
eventList = event.CreateEventList(serviceEvents, dsQuery)
log.Printf("Found %d events related to %s service in %s namespace", len(eventList.Events), name, namespace)
return &eventList, nil
}
......@@ -27,14 +27,16 @@ limitations under the License.
<div ng-if="::container.env.length">
<div ng-repeat="env in ::container.env"
layout="row">
<span ng-if="::$ctrl.isHref(env)">
<span ng-if="::$ctrl.isHref(env)"
class="kd-env-href-wrapper">
{{::env.name}}&nbsp;(<a ng-href="{{::$ctrl.getRefObjectHref(env)}}">{{::$ctrl.getRefObjectName(env)}}</a>):&nbsp;
<span ng-if="::$ctrl.isSecret(env)">
<md-button ng-if="!$ctrl.isSecretVisible" ng-click="::$ctrl.showSecret()" class="md-icon-button kd-env-secret-button">
<i class="material-icons kd-env-secret-icon">visibility</i>
<md-tooltip md-direction="top">[[Show secret value|Tooltip on container env variables taken from secret]]</md-tooltip>
</md-button>
<span ng-if="$ctrl.isSecretVisible" class="kd-env-value">{{::$ctrl.formatSecretValue(env.value)}}</span>
<span ng-if="$ctrl.isSecretVisible && env.value" class="kd-env-value">{{::$ctrl.formatSecretValue(env.value)}}</span>
<span ng-if="$ctrl.isSecretVisible && !env.value">-</span>
</span>
<pre class="kd-env-config-map-value"
ng-if="!$ctrl.isSecret(env)">{{::env.value}}</pre>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册