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  }