github.com/franciscocpg/up@v0.1.10/platform/lambda/stack/status.go (about)

     1  package stack
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/apex/up/internal/colors"
     7  )
     8  
     9  // status map for humanization.
    10  var statusMap = map[Status]string{
    11  	CreateInProgress: "Creating",
    12  	CreateFailed:     "Failed to create",
    13  	CreateComplete:   "Created",
    14  
    15  	DeleteInProgress: "Deleting",
    16  	DeleteFailed:     "Failed to delete",
    17  	DeleteComplete:   "Deleted",
    18  	DeleteSkipped:    "Skipped",
    19  
    20  	UpdateInProgress: "Updating",
    21  	UpdateFailed:     "Failed to update",
    22  	UpdateComplete:   "Updated",
    23  
    24  	RollbackInProgress: "Rolling back",
    25  	RollbackFailed:     "Failed to rollback",
    26  	RollbackComplete:   "Rollback complete",
    27  }
    28  
    29  // State represents a generalized stack event state.
    30  type State int
    31  
    32  // States available.
    33  const (
    34  	Success State = iota
    35  	Pending
    36  	Failure
    37  )
    38  
    39  // Status represents a stack event status.
    40  type Status string
    41  
    42  // Statuses available.
    43  const (
    44  	Unknown Status = "unknown"
    45  
    46  	CreateInProgress = "CREATE_IN_PROGRESS"
    47  	CreateFailed     = "CREATE_FAILED"
    48  	CreateComplete   = "CREATE_COMPLETE"
    49  
    50  	DeleteInProgress = "DELETE_IN_PROGRESS"
    51  	DeleteFailed     = "DELETE_FAILED"
    52  	DeleteComplete   = "DELETE_COMPLETE"
    53  	DeleteSkipped    = "DELETE_SKIPPED"
    54  
    55  	UpdateInProgress = "UPDATE_IN_PROGRESS"
    56  	UpdateFailed     = "UPDATE_FAILED"
    57  	UpdateComplete   = "UPDATE_COMPLETE"
    58  
    59  	RollbackInProgress = "ROLLBACK_IN_PROGRESS"
    60  	RollbackFailed     = "ROLLBACK_FAILED"
    61  	RollbackComplete   = "ROLLBACK_COMPLETE"
    62  )
    63  
    64  // String returns the human representation.
    65  func (s Status) String() string {
    66  	return statusMap[s]
    67  }
    68  
    69  // IsDone returns true when failed or complete.
    70  func (s Status) IsDone() bool {
    71  	return s.State() != Pending
    72  }
    73  
    74  // Color the given string based on the status.
    75  func (s Status) Color(v string) string {
    76  	switch s.State() {
    77  	case Success:
    78  		return colors.Blue(v)
    79  	case Pending:
    80  		return colors.Yellow(v)
    81  	case Failure:
    82  		return colors.Red(v)
    83  	default:
    84  		return v
    85  	}
    86  }
    87  
    88  // State returns a generalized state.
    89  func (s Status) State() State {
    90  	switch s {
    91  	case CreateFailed, UpdateFailed, DeleteFailed, RollbackFailed:
    92  		return Failure
    93  	case CreateInProgress, UpdateInProgress, DeleteInProgress, RollbackInProgress:
    94  		return Pending
    95  	case CreateComplete, UpdateComplete, DeleteComplete, DeleteSkipped, RollbackComplete:
    96  		return Success
    97  	default:
    98  		panic(fmt.Sprintf("unhandled state %q", s))
    99  	}
   100  }