func()

in pkg/appmgmt/general/podevent_handler.go [117:156]


func (p *PodEventHandler) addPod(pod *v1.Pod, eventSource EventSource) interfaces.ManagedApp {
	recovery := eventSource == Recovery
	var managedApp interfaces.ManagedApp
	var appExists bool

	// add app
	if appMeta, ok := getAppMetadata(pod, recovery); ok {
		// check if app already exist
		if app := p.amProtocol.GetApplication(appMeta.ApplicationID); app == nil {
			managedApp = p.amProtocol.AddApplication(&interfaces.AddApplicationRequest{
				Metadata: appMeta,
			})
		} else {
			managedApp = app
			appExists = true
		}
	}

	// add task
	if taskMeta, ok := getTaskMetadata(pod); ok {
		if app := p.amProtocol.GetApplication(taskMeta.ApplicationID); app != nil {
			if _, taskErr := app.GetTask(string(pod.UID)); taskErr != nil {
				p.amProtocol.AddTask(&interfaces.AddTaskRequest{
					Metadata: taskMeta,
				})
			}
		}
	}

	// only trigger recovery once - if appExists = true, it means we already
	// called TriggerAppRecovery()
	if recovery && !appExists {
		err := managedApp.TriggerAppRecovery()
		if err != nil {
			log.Log(log.ShimAppMgmtGeneral).Error("failed to recover app", zap.Error(err))
		}
	}

	return managedApp
}