github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.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://developer.akamai.com/api/core_features/datastream2_config/v1.html#putactivate 19 ActivateStream(context.Context, ActivateStreamRequest) (*ActivateStreamResponse, error) 20 21 // DeactivateStream deactivates stream with given ID 22 // 23 // See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#putdeactivate 24 DeactivateStream(context.Context, DeactivateStreamRequest) (*DeactivateStreamResponse, error) 25 26 // GetActivationHistory returns a history of activation status changes for all versions of a stream 27 // 28 // See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#getactivationhistory 29 GetActivationHistory(context.Context, GetActivationHistoryRequest) ([]ActivationHistoryEntry, error) 30 } 31 32 // ActivateStreamResponse contains response body returned after successful stream activation 33 ActivateStreamResponse struct { 34 StreamVersionKey StreamVersionKey `json:"streamVersionKey"` 35 } 36 37 // ActivationHistoryEntry contains single ActivationHistory item 38 ActivationHistoryEntry struct { 39 CreatedBy string `json:"createdBy"` 40 CreatedDate string `json:"createdDate"` 41 IsActive bool `json:"isActive"` 42 StreamID int64 `json:"streamId"` 43 StreamVersionID int64 `json:"streamVersionId"` 44 } 45 46 // DeactivateStreamResponse contains response body returned after successful stream activation 47 DeactivateStreamResponse ActivateStreamResponse 48 49 // ActivateStreamRequest contains parameters necessary to send a ActivateStream request 50 ActivateStreamRequest struct { 51 StreamID int64 52 } 53 54 // DeactivateStreamRequest contains parameters necessary to send a DeactivateStream request 55 DeactivateStreamRequest ActivateStreamRequest 56 57 // GetActivationHistoryRequest contains parameters necessary to send a GetActivationHistory request 58 GetActivationHistoryRequest ActivateStreamRequest 59 ) 60 61 // Validate performs validation on ActivateStreamRequest 62 func (r ActivateStreamRequest) Validate() error { 63 return validation.Errors{ 64 "streamId": validation.Validate(r.StreamID, validation.Required), 65 }.Filter() 66 } 67 68 // Validate performs validation on DeactivateStreamRequest 69 func (r DeactivateStreamRequest) Validate() error { 70 return validation.Errors{ 71 "streamId": validation.Validate(r.StreamID, validation.Required), 72 }.Filter() 73 } 74 75 // Validate performs validation on DeactivateStreamRequest 76 func (r GetActivationHistoryRequest) Validate() error { 77 return validation.Errors{ 78 "streamId": validation.Validate(r.StreamID, validation.Required), 79 }.Filter() 80 } 81 82 var ( 83 // ErrActivateStream is returned when ActivateStream fails 84 ErrActivateStream = errors.New("activate stream") 85 // ErrDeactivateStream is returned when DeactivateStream fails 86 ErrDeactivateStream = errors.New("deactivate stream") 87 // ErrGetActivationHistory is returned when DeactivateStream fails 88 ErrGetActivationHistory = errors.New("view activation history") 89 ) 90 91 func (d *ds) ActivateStream(ctx context.Context, params ActivateStreamRequest) (*ActivateStreamResponse, error) { 92 logger := d.Log(ctx) 93 logger.Debug("ActivateStream") 94 95 if err := params.Validate(); err != nil { 96 return nil, fmt.Errorf("%s: %w: %s", ErrActivateStream, ErrStructValidation, err) 97 } 98 99 uri, err := url.Parse(fmt.Sprintf( 100 "/datastream-config-api/v1/log/streams/%d/activate", 101 params.StreamID)) 102 if err != nil { 103 return nil, fmt.Errorf("%w: parsing URL: %s", ErrActivateStream, err) 104 } 105 106 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri.String(), nil) 107 if err != nil { 108 return nil, fmt.Errorf("%w: failed to create request: %s", ErrActivateStream, err) 109 } 110 111 var rval ActivateStreamResponse 112 resp, err := d.Exec(req, &rval) 113 if err != nil { 114 return nil, fmt.Errorf("%w: request failed: %s", ErrActivateStream, err) 115 } 116 117 if resp.StatusCode != http.StatusAccepted { 118 return nil, fmt.Errorf("%s: %w", ErrActivateStream, d.Error(resp)) 119 } 120 121 return &rval, nil 122 } 123 124 func (d *ds) DeactivateStream(ctx context.Context, params DeactivateStreamRequest) (*DeactivateStreamResponse, error) { 125 logger := d.Log(ctx) 126 logger.Debug("DeactivateStream") 127 128 if err := params.Validate(); err != nil { 129 return nil, fmt.Errorf("%s: %w: %s", ErrDeactivateStream, ErrStructValidation, err) 130 } 131 132 uri, err := url.Parse(fmt.Sprintf( 133 "/datastream-config-api/v1/log/streams/%d/deactivate", 134 params.StreamID)) 135 if err != nil { 136 return nil, fmt.Errorf("%w: parsing URL: %s", ErrDeactivateStream, err) 137 } 138 139 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri.String(), nil) 140 if err != nil { 141 return nil, fmt.Errorf("%w: failed to create request: %s", ErrDeactivateStream, err) 142 } 143 144 var rval DeactivateStreamResponse 145 resp, err := d.Exec(req, &rval) 146 if err != nil { 147 return nil, fmt.Errorf("%w: request failed: %s", ErrDeactivateStream, err) 148 } 149 150 if resp.StatusCode != http.StatusAccepted { 151 return nil, fmt.Errorf("%s: %w", ErrDeactivateStream, d.Error(resp)) 152 } 153 154 return &rval, nil 155 } 156 157 func (d *ds) GetActivationHistory(ctx context.Context, params GetActivationHistoryRequest) ([]ActivationHistoryEntry, error) { 158 logger := d.Log(ctx) 159 logger.Debug("GetActivationHistory") 160 161 if err := params.Validate(); err != nil { 162 return nil, fmt.Errorf("%s: %w: %s", ErrGetActivationHistory, ErrStructValidation, err) 163 } 164 165 uri, err := url.Parse(fmt.Sprintf( 166 "/datastream-config-api/v1/log/streams/%d/activationHistory", 167 params.StreamID)) 168 if err != nil { 169 return nil, fmt.Errorf("%w: parsing URL: %s", ErrGetActivationHistory, err) 170 } 171 172 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri.String(), nil) 173 if err != nil { 174 return nil, fmt.Errorf("%w: failed to create request: %s", ErrGetActivationHistory, err) 175 } 176 177 var rval []ActivationHistoryEntry 178 resp, err := d.Exec(req, &rval) 179 if err != nil { 180 return nil, fmt.Errorf("%w: request failed: %s", ErrGetActivationHistory, err) 181 } 182 183 if resp.StatusCode != http.StatusOK { 184 return nil, fmt.Errorf("%s: %w", ErrGetActivationHistory, d.Error(resp)) 185 } 186 187 return rval, nil 188 }