Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 42 additions & 1 deletion server/apis/v1/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,29 @@ func (h *handler) GetClusterSummary(c *gin.Context) {
if value, ok := namespaceSummaryMap[pipeline.Namespace]; ok {
summary = value
}
status, err := getPipelineStatus(&pipeline)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How bad is the performance (e.g.with 20, 50 pipelines)?

// getting health status for each pipeline
resourceHealth, err := h.healthChecker.getPipelineResourceHealth(h, pipeline.Namespace, pipeline.Name)
if err != nil {
h.respondWithError(c, fmt.Sprintf("Failed to get the resourceHealth for pipeline %q: %s", pipeline.Name, err.Error()))
return
}

// Get a new daemon client for the given pipeline
client, err := h.getPipelineDaemonClient(pipeline.Namespace, pipeline.Name)
if err != nil || client == nil {
h.respondWithError(c, fmt.Sprintf("failed to get daemon service client for pipeline %q, %s", pipeline.Name, err.Error()))
return
}

// Get the data criticality for the given pipeline
dataStatus, err := client.GetPipelineStatus(c, pipeline.Name)
if err != nil {
h.respondWithError(c, fmt.Sprintf("Failed to get the dataStatus for pipeline %q: %s", pipeline.Name, err.Error()))
return
}

status, err := getPipelineConsolidatedHealthStatus(&pipeline, resourceHealth.Status, dataStatus.Status)
if err != nil {
h.respondWithError(c, fmt.Sprintf("Failed to fetch cluster summary, %s", err.Error()))
return
Expand Down Expand Up @@ -1486,6 +1508,25 @@ func getPipelineStatus(pipeline *dfv1.Pipeline) (string, error) {
return retStatus, nil
}

func getPipelineConsolidatedHealthStatus(pipeline *dfv1.Pipeline, resourceHealth, dataStatus string) (string, error) {
retStatus := dfv1.PipelineStatusHealthy

if pipeline.GetDesiredPhase() == dfv1.PipelinePhasePaused || pipeline.GetDesiredPhase() == dfv1.PipelinePhasePausing || pipeline.GetDesiredPhase() == dfv1.PipelinePhaseDeleting {
retStatus = dfv1.PipelineStatusInactive
} else if pipeline.GetDesiredPhase() == dfv1.PipelinePhaseRunning {
if resourceHealth == dfv1.PipelineStatusHealthy && dataStatus == dfv1.PipelineStatusHealthy {
retStatus = dfv1.PipelineStatusHealthy
} else if resourceHealth == dfv1.PipelineStatusUnhealthy || resourceHealth == dfv1.PipelineStatusCritical || dataStatus == dfv1.PipelineStatusCritical {
retStatus = dfv1.PipelineStatusCritical
} else if resourceHealth == dfv1.PipelineStatusWarning || dataStatus == dfv1.PipelineStatusWarning {
retStatus = dfv1.PipelineStatusWarning
}
} else if pipeline.GetDesiredPhase() == dfv1.PipelinePhaseFailed {
retStatus = dfv1.PipelineStatusCritical
}
return retStatus, nil
}

// GetIsbServiceStatus is used to provide the status of a given InterStepBufferService
// TODO: Figure out the correct way to determine if a ISBService is healthy
func getIsbServiceStatus(isbsvc *dfv1.InterStepBufferService) (string, error) {
Expand Down
Loading