github.com/Axway/agent-sdk@v1.1.101/pkg/apic/provisioning/requeststatus.go (about) 1 package provisioning 2 3 import ( 4 "time" 5 6 v1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 7 ) 8 9 // RequestStatus - holds info about the Status of the request 10 type RequestStatus interface { 11 // GetReasons returns the Status reasons 12 GetReasons() []v1.ResourceStatusReason 13 // GetStatus returns the Status level 14 GetStatus() Status 15 // GetMessage returns the status message 16 GetMessage() string 17 // GetProperties returns additional details about a status. 18 GetProperties() map[string]string 19 } 20 21 type requestStatus struct { 22 RequestStatus 23 status Status 24 message string 25 properties map[string]string 26 reasons []v1.ResourceStatusReason 27 } 28 29 // GetStatus returns the Status level 30 func (rs *requestStatus) GetReasons() []v1.ResourceStatusReason { 31 return rs.reasons 32 } 33 34 // GetStatus returns the Status level 35 func (rs *requestStatus) GetStatus() Status { 36 return rs.status 37 } 38 39 // GetMessage returns the status message 40 func (rs *requestStatus) GetMessage() string { 41 return rs.message 42 } 43 44 // GetProperties returns additional details about a status. 45 func (rs *requestStatus) GetProperties() map[string]string { 46 return rs.properties 47 } 48 49 // RequestStatusBuilder - builder to create new request Status 50 type RequestStatusBuilder interface { 51 // Success - set the status as success 52 Success() RequestStatus 53 // Failed - set the status as failed 54 Failed() RequestStatus 55 // RequestStatusBuilder - adds any existing status reasons so they are not lost 56 SetCurrentStatusReasons([]v1.ResourceStatusReason) RequestStatusBuilder 57 // SetMessage - set the request Status message 58 SetMessage(message string) RequestStatusBuilder 59 // SetProperties - set the properties of the RequestStatus 60 SetProperties(map[string]string) RequestStatusBuilder 61 // AddProperty - add a new property on the RequestStatus 62 AddProperty(key string, value string) RequestStatusBuilder 63 } 64 65 type requestStatusBuilder struct { 66 status *requestStatus 67 } 68 69 // NewRequestStatusBuilder - create a request Status builder 70 func NewRequestStatusBuilder() RequestStatusBuilder { 71 return &requestStatusBuilder{ 72 status: &requestStatus{ 73 properties: make(map[string]string), 74 }, 75 } 76 } 77 78 // SetProperties - set the properties to be sent back to the resource 79 func (r *requestStatusBuilder) SetCurrentStatusReasons(reasons []v1.ResourceStatusReason) RequestStatusBuilder { 80 r.status.reasons = reasons 81 return r 82 } 83 84 // SetProperties - set the properties to be sent back to the resource 85 func (r *requestStatusBuilder) SetProperties(properties map[string]string) RequestStatusBuilder { 86 r.status.properties = properties 87 return r 88 } 89 90 // AddProperty - add a property to be sent back to the resource 91 func (r *requestStatusBuilder) AddProperty(key, value string) RequestStatusBuilder { 92 r.status.properties[key] = value 93 return r 94 } 95 96 // SetMessage - set the request Status message 97 func (r *requestStatusBuilder) SetMessage(message string) RequestStatusBuilder { 98 r.status.message = message 99 return r 100 } 101 102 // Success - set the request Status as a success 103 func (r *requestStatusBuilder) Success() RequestStatus { 104 r.status.status = Success 105 return r.status 106 } 107 108 // Failed - set the request Status as failed 109 func (r *requestStatusBuilder) Failed() RequestStatus { 110 r.status.status = Error 111 return r.status 112 } 113 114 // NewStatusReason converts a RequestStatus into a ResourceStatus 115 func NewStatusReason(r RequestStatus) *v1.ResourceStatus { 116 if r == nil { 117 return nil 118 } 119 120 reasons := r.GetReasons() 121 if reasons == nil { 122 reasons = []v1.ResourceStatusReason{} 123 } 124 125 // append the new reason 126 reasons = append(reasons, v1.ResourceStatusReason{ 127 Type: r.GetStatus().String(), 128 Detail: r.GetMessage(), 129 Timestamp: v1.Time(time.Now()), 130 }) 131 132 return &v1.ResourceStatus{ 133 Level: r.GetStatus().String(), 134 Reasons: reasons, 135 } 136 }