github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/tools/blocksconvert/scheduler/plan_status.go (about)

     1  package scheduler
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  )
     7  
     8  type planStatus int
     9  
    10  const (
    11  	New planStatus = iota
    12  	InProgress
    13  	Finished
    14  	Error
    15  	Invalid
    16  )
    17  
    18  func (s planStatus) String() string {
    19  	switch s {
    20  	case New:
    21  		return "New"
    22  	case InProgress:
    23  		return "InProgress"
    24  	case Finished:
    25  		return "Finished"
    26  	case Error:
    27  		return "Error"
    28  	case Invalid:
    29  		return "Invalid"
    30  	default:
    31  		panic(fmt.Sprintf("invalid status: %d", s))
    32  	}
    33  }
    34  
    35  type plan struct {
    36  	PlanFiles     []string
    37  	ProgressFiles map[string]time.Time
    38  	Finished      []string
    39  	ErrorFile     string
    40  }
    41  
    42  func (ps plan) Status() planStatus {
    43  	if len(ps.PlanFiles) != 1 || len(ps.Finished) > 1 || (len(ps.Finished) > 0 && ps.ErrorFile != "") {
    44  		return Invalid
    45  	}
    46  
    47  	if len(ps.Finished) > 0 {
    48  		return Finished
    49  	}
    50  
    51  	if ps.ErrorFile != "" {
    52  		return Error
    53  	}
    54  
    55  	if len(ps.ProgressFiles) > 0 {
    56  		return InProgress
    57  	}
    58  
    59  	return New
    60  }