func()

in perf-tools/framework/app_manager.go [171:234]


func (dam *DeploymentsAppManager) RefreshTasksStatusAfterRunning(appInfo *AppInfo) error {
	podList, err := dam.kubeClient.GetPods(appInfo.Namespace,
		utils.GetListOptions(map[string]string{constants.LabelAppID: appInfo.AppID}))
	if err != nil {
		return err
	}
	tasksStatus := make(map[string]*TaskStatus)
	maxRunningTime := time.Time{}
	firstCreateTime := time.Time{}
	for _, pod := range podList.Items {
		createTime := pod.CreationTimestamp.Time
		startTime := pod.Status.StartTime.Time
		requestResources := ParseResourceFromResourceList(&pod.Spec.Containers[0].Resources.Requests)
		// init conditions map
		condMap := make(map[TaskConditionType]*TaskCondition)
		condMap[PodCreated] = &TaskCondition{
			CondType:       PodCreated,
			TransitionTime: pod.CreationTimestamp.Time,
		}
		condMap[PodStarted] = &TaskCondition{
			CondType:       PodStarted,
			TransitionTime: startTime,
		}
		for _, cond := range pod.Status.Conditions {
			condMap[TaskConditionType(cond.Type)] = &TaskCondition{
				CondType:       TaskConditionType(cond.Type),
				TransitionTime: cond.LastTransitionTime.Time,
			}
		}

		// set running time from the last condition (ContainersReady)
		var runningTime time.Time
		if readyCond, ok := condMap[ContainersReady]; ok {
			runningTime = readyCond.TransitionTime
		} else {
			utils.Logger.Fatal("unexpected conditions", zap.Any("Conditions", condMap))
		}
		// transfer to ordered conditions
		orderedCondTypes := GetOrderedTaskConditionTypes()
		conditions := make([]*TaskCondition, len(orderedCondTypes))
		for idx, condType := range orderedCondTypes {
			if cond, ok := condMap[condType]; ok {
				conditions[idx] = cond
			} else {
				utils.Logger.Fatal("unknown condition", zap.Any("condType", condType),
					zap.Any("podName", pod.Name))
			}
		}
		taskStatus := NewTaskStatus(pod.Name, pod.Spec.NodeName,
			createTime, runningTime, requestResources, conditions)
		tasksStatus[taskStatus.TaskID] = taskStatus
		// update maxRunningTime
		if runningTime.After(maxRunningTime) {
			maxRunningTime = runningTime
		}
		if firstCreateTime.IsZero() || createTime.Before(firstCreateTime) {
			firstCreateTime = createTime
		}
	}
	appInfo.TasksStatus = tasksStatus
	appInfo.AppStatus.RunningTime = maxRunningTime
	appInfo.AppStatus.CreateTime = firstCreateTime
	return nil
}