github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/datastream/stream_activation.go (about) 1 package datastream 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "net/http" 8 "net/url" 9 10 validation "github.com/go-ozzo/ozzo-validation/v4" 11 ) 12 13 type ( 14 // Activation is a ds stream activations API interface. 15 Activation interface { 16 // ActivateStream activates stream with given ID. 17 // 18 // See: https://techdocs.akamai.com/datastream2/v2/reference/put-stream-activate 19 ActivateStream(context.Context, ActivateStreamRequest) (*DetailedStreamVersion, error) 20 21 // DeactivateStream deactivates stream with given ID. 22 // 23 // See: https://techdocs.akamai.com/datastream2/v2/reference/put-stream-deactivate 24 DeactivateStream(context.Context, DeactivateStreamRequest) (*DetailedStreamVersion, error) 25 26 // GetActivationHistory returns a history of activation status changes for all versions of a stream. 27 // 28 // See: https://techdocs.akamai.com/datastream2/v2/reference/get-stream-activation-history 29 GetActivationHistory(context.Context, GetActivationHistoryRequest) ([]ActivationHistoryEntry, error) 30 } 31 32 // ActivationHistoryEntry contains single ActivationHistory item 33 ActivationHistoryEntry struct { 34 ModifiedBy string `json:"modifiedBy"` 35 ModifiedDate string `json:"modifiedDate"` 36 Status StreamStatus `json:"status"` 37 StreamID int64 `json:"streamId"` 38 StreamVersion int64 `json:"streamVersion"` 39 } 40 41 // ActivateStreamRequest contains parameters necessary to send a ActivateStream request 42 ActivateStreamRequest struct { 43 StreamID int64 44 } 45 46 // DeactivateStreamRequest contains parameters necessary to send a DeactivateStream request 47 DeactivateStreamRequest ActivateStreamRequest 48 49 // GetActivationHistoryRequest contains parameters necessary to send a GetActivationHistory request 50 GetActivationHistoryRequest ActivateStreamRequest 51 ) 52 53 // Validate performs validation on ActivateStreamRequest 54 func (r ActivateStreamRequest) Validate() error { 55 return validation.Errors{ 56 "streamId": validation.Validate(r.StreamID, validation.Required), 57 }.Filter() 58 } 59 60 // Validate performs validation on DeactivateStreamRequest 61 func (r DeactivateStreamRequest) Validate() error { 62 return validation.Errors{ 63 "streamId": validation.Validate(r.StreamID, validation.Required), 64 }.Filter() 65 } 66 67 // Validate performs validation on DeactivateStreamRequest 68 func (r GetActivationHistoryRequest) Validate() error { 69 return validation.Errors{ 70 "streamId": validation.Validate(r.StreamID, validation.Required), 71 }.Filter() 72 } 73 74 var ( 75 // ErrActivateStream is returned when ActivateStream fails 76 ErrActivateStream = errors.New("activate stream") 77 // ErrDeactivateStream is returned when DeactivateStream fails 78 ErrDeactivateStream = errors.New("deactivate stream") 79 // ErrGetActivationHistory is returned when DeactivateStream fails 80 ErrGetActivationHistory = errors.New("view activation history") 81 ) 82 83 func (d *ds) ActivateStream(ctx context.Context, params ActivateStreamRequest) (*DetailedStreamVersion, error) { 84 logger := d.Log(ctx) 85 logger.Debug("ActivateStream") 86 87 if err := params.Validate(); err != nil { 88 return nil, fmt.Errorf("%s: %w: %s", ErrActivateStream, ErrStructValidation, err) 89 } 90 91 uri, err := url.Parse(fmt.Sprintf( 92 "/datastream-config-api/v2/log/streams/%d/activate", 93 params.StreamID)) 94 if err != nil { 95 return nil, fmt.Errorf("%w: parsing URL: %s", ErrActivateStream, err) 96 } 97 98 req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri.String(), nil) 99 if err != nil { 100 return nil, fmt.Errorf("%w: failed to create request: %s", ErrActivateStream, err) 101 } 102 103 var rval DetailedStreamVersion 104 resp, err := d.Exec(req, &rval) 105 if err != nil { 106 return nil, fmt.Errorf("%w: request failed: %s", ErrActivateStream, err) 107 } 108 109 if resp.StatusCode != http.StatusOK { 110 return nil, fmt.Errorf("%s: %w", ErrActivateStream, d.Error(resp)) 111 } 112 113 return &rval, nil 114 } 115 116 func (d *ds) DeactivateStream(ctx context.Context, params DeactivateStreamRequest) (*DetailedStreamVersion, error) { 117 logger := d.Log(ctx) 118 logger.Debug("DeactivateStream") 119 120 if err := params.Validate(); err != nil { 121 return nil, fmt.Errorf("%s: %w: %s", ErrDeactivateStream, ErrStructValidation, err) 122 } 123 124 uri, err := url.Parse(fmt.Sprintf( 125 "/datastream-config-api/v2/log/streams/%d/deactivate", 126 params.StreamID)) 127 if err != nil { 128 return nil, fmt.Errorf("%w: parsing URL: %s", ErrDeactivateStream, err) 129 } 130 131 req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri.String(), nil) 132 if err != nil { 133 return nil, fmt.Errorf("%w: failed to create request: %s", ErrDeactivateStream, err) 134 } 135 136 var rval DetailedStreamVersion 137 resp, err := d.Exec(req, &rval) 138 if err != nil { 139 return nil, fmt.Errorf("%w: request failed: %s", ErrDeactivateStream, err) 140 } 141 142 if resp.StatusCode != http.StatusOK { 143 return nil, fmt.Errorf("%s: %w", ErrDeactivateStream, d.Error(resp)) 144 } 145 146 return &rval, nil 147 } 148 149 func (d *ds) GetActivationHistory(ctx context.Context, params GetActivationHistoryRequest) ([]ActivationHistoryEntry, error) { 150 logger := d.Log(ctx) 151 logger.Debug("GetActivationHistory") 152 153 if err := params.Validate(); err != nil { 154 return nil, fmt.Errorf("%s: %w: %s", ErrGetActivationHistory, ErrStructValidation, err) 155 } 156 157 uri, err := url.Parse(fmt.Sprintf( 158 "/datastream-config-api/v2/log/streams/%d/activation-history", 159 params.StreamID)) 160 if err != nil { 161 return nil, fmt.Errorf("%w: parsing URL: %s", ErrGetActivationHistory, err) 162 } 163 164 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil) 165 if err != nil { 166 return nil, fmt.Errorf("%w: failed to create request: %s", ErrGetActivationHistory, err) 167 } 168 169 var rval []ActivationHistoryEntry 170 resp, err := d.Exec(req, &rval) 171 if err != nil { 172 return nil, fmt.Errorf("%w: request failed: %s", ErrGetActivationHistory, err) 173 } 174 175 if resp.StatusCode != http.StatusOK { 176 return nil, fmt.Errorf("%s: %w", ErrGetActivationHistory, d.Error(resp)) 177 } 178 179 return rval, nil 180 }