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
}