github.com/webonyx/up@v0.7.4-0.20180808230834-91b94e551323/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  	Unknown: "Unknown",
    12  
    13  	CreateInProgress: "Creating",
    14  	CreateFailed:     "Failed to create",
    15  	CreateComplete:   "Created",
    16  
    17  	DeleteInProgress: "Deleting",
    18  	DeleteFailed:     "Failed to delete",
    19  	DeleteComplete:   "Deleted",
    20  	DeleteSkipped:    "Skipped",
    21  
    22  	UpdateInProgress: "Updating",
    23  	UpdateFailed:     "Failed to update",
    24  	UpdateComplete:   "Updated",
    25  
    26  	UpdateCompleteCleanup:         "Update complete cleanup in progress",
    27  	UpdateRollbackCompleteCleanup: "Update rollback complete cleanup in progress",
    28  	UpdateRollbackInProgress:      "Update rollback in progress",
    29  	UpdateRollbackComplete:        "Update rollback complete",
    30  
    31  	RollbackInProgress: "Rolling back",
    32  	RollbackFailed:     "Failed to rollback",
    33  	RollbackComplete:   "Rollback complete",
    34  
    35  	CreatePending: "Create pending",
    36  	Failed:        "Failed",
    37  }
    38  
    39  // State represents a generalized stack event state.
    40  type State int
    41  
    42  // States available.
    43  const (
    44  	Success State = iota
    45  	Pending
    46  	Failure
    47  )
    48  
    49  // Status represents a stack event status.
    50  type Status string
    51  
    52  // Statuses available.
    53  const (
    54  	Unknown Status = ""
    55  
    56  	CreateInProgress = "CREATE_IN_PROGRESS"
    57  	CreateFailed     = "CREATE_FAILED"
    58  	CreateComplete   = "CREATE_COMPLETE"
    59  	CreatePending    = "CREATE_PENDING"
    60  
    61  	DeleteInProgress = "DELETE_IN_PROGRESS"
    62  	DeleteFailed     = "DELETE_FAILED"
    63  	DeleteComplete   = "DELETE_COMPLETE"
    64  	DeleteSkipped    = "DELETE_SKIPPED"
    65  
    66  	UpdateInProgress = "UPDATE_IN_PROGRESS"
    67  	UpdateFailed     = "UPDATE_FAILED"
    68  	UpdateComplete   = "UPDATE_COMPLETE"
    69  
    70  	UpdateRollbackInProgress      = "UPDATE_ROLLBACK_IN_PROGRESS"
    71  	UpdateRollbackComplete        = "UPDATE_ROLLBACK_COMPLETE"
    72  	UpdateRollbackCompleteCleanup = "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS"
    73  	UpdateCompleteCleanup         = "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS"
    74  
    75  	RollbackInProgress = "ROLLBACK_IN_PROGRESS"
    76  	RollbackFailed     = "ROLLBACK_FAILED"
    77  	RollbackComplete   = "ROLLBACK_COMPLETE"
    78  
    79  	Failed = "FAILED"
    80  )
    81  
    82  // String returns the human representation.
    83  func (s Status) String() string {
    84  	return statusMap[s]
    85  }
    86  
    87  // IsDone returns true when failed or complete.
    88  func (s Status) IsDone() bool {
    89  	return s.State() != Pending
    90  }
    91  
    92  // Color the given string based on the status.
    93  func (s Status) Color(v string) string {
    94  	switch s.State() {
    95  	case Success:
    96  		return colors.Blue(v)
    97  	case Pending:
    98  		return colors.Yellow(v)
    99  	case Failure:
   100  		return colors.Red(v)
   101  	default:
   102  		return v
   103  	}
   104  }
   105  
   106  // State returns a generalized state.
   107  func (s Status) State() State {
   108  	switch s {
   109  	case CreateFailed, UpdateFailed, DeleteFailed, RollbackFailed, Failed, UpdateRollbackCompleteCleanup, UpdateRollbackComplete:
   110  		return Failure
   111  	case CreateInProgress, UpdateInProgress, DeleteInProgress, RollbackInProgress, CreatePending, UpdateRollbackInProgress:
   112  		return Pending
   113  	case CreateComplete, UpdateComplete, DeleteComplete, DeleteSkipped, RollbackComplete, UpdateCompleteCleanup:
   114  		return Success
   115  	default:
   116  		panic(fmt.Sprintf("unhandled state %q", string(s)))
   117  	}
   118  }