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 }