github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/networklists/activations.go (about) 1 package networklists 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 "time" 8 9 validation "github.com/go-ozzo/ozzo-validation/v4" 10 ) 11 12 type ( 13 // The Activations interface supports activating and deactivating network lists. 14 // 15 // https://techdocs.akamai.com/network-lists/reference/api 16 Activations interface { 17 // GetActivations retrieves list of network list activations. 18 // 19 // See: https://techdocs.akamai.com/network-lists/reference/get-network-list-status 20 GetActivations(ctx context.Context, params GetActivationsRequest) (*GetActivationsResponse, error) 21 22 // GetActivation retrieves network list activation. 23 // 24 // See: https://techdocs.akamai.com/network-lists/reference/get-activation 25 GetActivation(ctx context.Context, params GetActivationRequest) (*GetActivationResponse, error) 26 27 // CreateActivations activates network list. 28 // 29 // See: https://techdocs.akamai.com/network-lists/reference/post-network-list-activate 30 CreateActivations(ctx context.Context, params CreateActivationsRequest) (*CreateActivationsResponse, error) 31 32 // RemoveActivations deactivates network list. 33 // 34 // See: https://techdocs.akamai.com/network-lists/reference/post-network-list-activate 35 RemoveActivations(ctx context.Context, params RemoveActivationsRequest) (*RemoveActivationsResponse, error) 36 } 37 38 // GetActivationsRequest contains request parameters for getting activation status 39 GetActivationsRequest struct { 40 UniqueID string `json:"-"` 41 Action string `json:"-"` 42 Network string `json:"network"` 43 ActivationID int `json:"activationId"` 44 } 45 46 // GetActivationRequest contains request parameters for getting activation details 47 GetActivationRequest struct { 48 ActivationID int `json:"activationId"` 49 } 50 51 // GetActivationsResponse contains response with activation status 52 GetActivationsResponse struct { 53 ActivationID int `json:"activationId"` 54 ActivationComments string `json:"activationComments"` 55 ActivationStatus string `json:"activationStatus"` 56 SyncPoint int `json:"syncPoint"` 57 UniqueID string `json:"uniqueId"` 58 Fast bool `json:"fast"` 59 DispatchCount int `json:"dispatchCount"` 60 Links struct { 61 AppendItems struct { 62 Href string `json:"href"` 63 Method string `json:"method"` 64 } `json:"appendItems"` 65 Retrieve struct { 66 Href string `json:"href"` 67 } `json:"retrieve"` 68 StatusInProduction struct { 69 Href string `json:"href"` 70 } `json:"statusInProduction"` 71 StatusInStaging struct { 72 Href string `json:"href"` 73 } `json:"statusInStaging"` 74 SyncPointHistory struct { 75 Href string `json:"href"` 76 } `json:"syncPointHistory"` 77 Update struct { 78 Href string `json:"href"` 79 Method string `json:"method"` 80 } `json:"update"` 81 ActivationDetails struct { 82 Href string `json:"href"` 83 } `json:"activationDetails"` 84 } `json:"links"` 85 } 86 87 // GetActivationResponse contains response with activation details 88 GetActivationResponse struct { 89 ActivationID int `json:"activationId"` 90 CreateDate time.Time `json:"createDate"` 91 CreatedBy string `json:"createdBy"` 92 Environment string `json:"environment"` 93 Fast bool `json:"fast"` 94 ActivationStatus string `json:"status"` 95 NetworkList struct { 96 ActivationComments string `json:"activationComments"` 97 ActivationStatus string `json:"activationStatus"` 98 Links struct { 99 AppendItems struct { 100 Href string `json:"href"` 101 Method string `json:"method"` 102 } `json:"appendItems"` 103 Retrieve struct { 104 Href string `json:"href"` 105 } `json:"retrieve"` 106 StatusInProduction struct { 107 Href string `json:"href"` 108 } `json:"statusInProduction"` 109 StatusInStaging struct { 110 Href string `json:"href"` 111 } `json:"statusInStaging"` 112 SyncPointHistory struct { 113 Href string `json:"href"` 114 } `json:"syncPointHistory"` 115 Update struct { 116 Href string `json:"href"` 117 Method string `json:"method"` 118 } `json:"update"` 119 } `json:"links"` 120 SyncPoint int `json:"syncPoint"` 121 UniqueID string `json:"uniqueId"` 122 } `json:"networkList"` 123 } 124 125 // CreateActivationsRequest contains request parameters for creating new activation 126 CreateActivationsRequest struct { 127 UniqueID string `json:"-"` 128 Action string `json:"-"` 129 Network string `json:"network"` 130 Comments string `json:"comments"` 131 NotificationRecipients []string `json:"notificationRecipients"` 132 } 133 134 // CreateActivationsResponse contains response after creating new activation 135 CreateActivationsResponse struct { 136 ActivationID int `json:"activationId"` 137 ActivationComments string `json:"activationComments"` 138 ActivationStatus string `json:"activationStatus"` 139 SyncPoint int `json:"syncPoint"` 140 UniqueID string `json:"uniqueId"` 141 Fast bool `json:"fast"` 142 DispatchCount int `json:"dispatchCount"` 143 Links struct { 144 AppendItems struct { 145 Href string `json:"href"` 146 Method string `json:"method"` 147 } `json:"appendItems"` 148 Retrieve struct { 149 Href string `json:"href"` 150 } `json:"retrieve"` 151 StatusInProduction struct { 152 Href string `json:"href"` 153 } `json:"statusInProduction"` 154 StatusInStaging struct { 155 Href string `json:"href"` 156 } `json:"statusInStaging"` 157 SyncPointHistory struct { 158 Href string `json:"href"` 159 } `json:"syncPointHistory"` 160 Update struct { 161 Href string `json:"href"` 162 Method string `json:"method"` 163 } `json:"update"` 164 ActivationDetails struct { 165 Href string `json:"href"` 166 } `json:"activationDetails"` 167 } `json:"links"` 168 } 169 170 // RemoveActivationsRequest contains request parameters of Activation to deactivate 171 RemoveActivationsRequest struct { 172 UniqueID string `json:"-"` 173 ActivationID int `json:"-"` 174 Action string `json:"action"` 175 Network string `json:"network"` 176 Comments string `json:"comments"` 177 NotificationRecipients []string `json:"notificationRecipients"` 178 } 179 180 // RemoveActivationsResponse contains response of Activation deactivation 181 RemoveActivationsResponse struct { 182 ActivationID int `json:"activationId"` 183 ActivationComments string `json:"activationComments"` 184 ActivationStatus string `json:"activationStatus"` 185 SyncPoint int `json:"syncPoint"` 186 UniqueID string `json:"uniqueId"` 187 Fast bool `json:"fast"` 188 DispatchCount int `json:"dispatchCount"` 189 Links struct { 190 AppendItems struct { 191 Href string `json:"href"` 192 Method string `json:"method"` 193 } `json:"appendItems"` 194 Retrieve struct { 195 Href string `json:"href"` 196 } `json:"retrieve"` 197 StatusInProduction struct { 198 Href string `json:"href"` 199 } `json:"statusInProduction"` 200 StatusInStaging struct { 201 Href string `json:"href"` 202 } `json:"statusInStaging"` 203 SyncPointHistory struct { 204 Href string `json:"href"` 205 } `json:"syncPointHistory"` 206 Update struct { 207 Href string `json:"href"` 208 Method string `json:"method"` 209 } `json:"update"` 210 ActivationDetails struct { 211 Href string `json:"href"` 212 } `json:"activationDetails"` 213 } `json:"links"` 214 } 215 216 // ActivationValue is used to create an "enum" of possible Activation.ActivationType values 217 ActivationValue string 218 219 // NetworkValue is used to create an "enum" of possible Activation.Network values 220 NetworkValue string 221 222 // StatusValue is used to create an "enum" of possible Activation.Status values 223 StatusValue string 224 ) 225 226 const ( 227 // ActivationTypeActivate Activation.ActivationType value ACTIVATE 228 ActivationTypeActivate ActivationValue = "ACTIVATE" 229 // ActivationTypeDeactivate Activation.ActivationType value DEACTIVATE 230 ActivationTypeDeactivate ActivationValue = "DEACTIVATE" 231 232 // NetworkProduction Activation.Network value PRODUCTION 233 NetworkProduction NetworkValue = "PRODUCTION" 234 // NetworkStaging Activation.Network value STAGING 235 NetworkStaging NetworkValue = "STAGING" 236 237 // StatusActive Activation.Status value ACTIVE 238 StatusActive StatusValue = "ACTIVATED" 239 // StatusInactive Activation.Status value INACTIVE 240 StatusInactive StatusValue = "INACTIVE" 241 // StatusPending Activation.Status value RECEIVED 242 StatusPending StatusValue = "RECEIVED" 243 // StatusAborted Activation.Status value ABORTED 244 StatusAborted StatusValue = "ABORTED" 245 // StatusFailed Activation.Status value FAILED 246 StatusFailed StatusValue = "FAILED" 247 // StatusDeactivated Activation.Status value DEACTIVATED 248 StatusDeactivated StatusValue = "DEACTIVATED" 249 // StatusPendingDeactivation Activation.Status value PENDING_DEACTIVATION 250 StatusPendingDeactivation StatusValue = "PENDING_DEACTIVATION" 251 // StatusNew Activation.Status value NEW 252 StatusNew StatusValue = "NEW" 253 ) 254 255 // Validate validates GetActivationsRequest 256 func (v GetActivationsRequest) Validate() error { 257 return validation.Errors{ 258 "UniqueID": validation.Validate(v.UniqueID, validation.Required), 259 }.Filter() 260 } 261 262 // Validate validates GetActivationRequest 263 func (v GetActivationRequest) Validate() error { 264 return validation.Errors{ 265 "ActivationID": validation.Validate(v.ActivationID, validation.Required), 266 }.Filter() 267 } 268 269 func (p *networklists) GetActivations(ctx context.Context, params GetActivationsRequest) (*GetActivationsResponse, error) { 270 if err := params.Validate(); err != nil { 271 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 272 } 273 274 logger := p.Log(ctx) 275 logger.Debug("GetActivations") 276 277 var rval GetActivationsResponse 278 279 uri := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/status", 280 params.UniqueID, 281 params.Network, 282 ) 283 284 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 285 if err != nil { 286 return nil, fmt.Errorf("failed to create getactivations request: %s", err.Error()) 287 } 288 289 resp, err := p.Exec(req, &rval) 290 if err != nil { 291 return nil, fmt.Errorf("getactivations request failed: %s", err.Error()) 292 } 293 294 if resp.StatusCode != http.StatusOK { 295 return nil, p.Error(resp) 296 } 297 298 return &rval, nil 299 } 300 301 func (p *networklists) GetActivation(ctx context.Context, params GetActivationRequest) (*GetActivationResponse, error) { 302 if err := params.Validate(); err != nil { 303 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 304 } 305 306 logger := p.Log(ctx) 307 logger.Debug("GetActivation") 308 309 var rval GetActivationResponse 310 311 uri := fmt.Sprintf("/network-list/v2/activations/%d", 312 params.ActivationID, 313 ) 314 315 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 316 if err != nil { 317 return nil, fmt.Errorf("failed to create getactivation request: %s", err.Error()) 318 } 319 320 resp, err := p.Exec(req, &rval) 321 if err != nil { 322 return nil, fmt.Errorf("getactivation request failed: %s", err.Error()) 323 } 324 325 if resp.StatusCode != http.StatusOK { 326 return nil, p.Error(resp) 327 } 328 329 return &rval, nil 330 } 331 332 func (p *networklists) CreateActivations(ctx context.Context, params CreateActivationsRequest) (*CreateActivationsResponse, error) { 333 334 logger := p.Log(ctx) 335 logger.Debug("CreateActivations") 336 337 uri := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/activate", 338 params.UniqueID, 339 params.Network, 340 ) 341 342 req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri, nil) 343 if err != nil { 344 return nil, fmt.Errorf("failed to create create activation request: %s", err.Error()) 345 } 346 347 var rval CreateActivationsResponse 348 349 resp, err := p.Exec(req, &rval, params) 350 if err != nil { 351 return nil, fmt.Errorf("create activation request failed: %s", err.Error()) 352 } 353 354 if resp.StatusCode != http.StatusOK { 355 return nil, p.Error(resp) 356 } 357 358 var rvalget CreateActivationsResponse 359 360 uriget := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/status", 361 params.UniqueID, 362 params.Network, 363 ) 364 365 req, err = http.NewRequestWithContext(ctx, http.MethodGet, uriget, nil) 366 if err != nil { 367 return nil, fmt.Errorf("failed to get activation request: %s", err.Error()) 368 } 369 370 resp, err = p.Exec(req, &rvalget) 371 if err != nil { 372 return nil, fmt.Errorf("get activation request failed: %s", err.Error()) 373 } 374 375 if resp.StatusCode != http.StatusOK { 376 return nil, p.Error(resp) 377 } 378 379 return &rvalget, nil 380 381 } 382 383 func (p *networklists) RemoveActivations(ctx context.Context, params RemoveActivationsRequest) (*RemoveActivationsResponse, error) { 384 385 logger := p.Log(ctx) 386 logger.Debug("RemoveActivations") 387 388 uri := fmt.Sprintf("/network-list/v2/network-lists/%s/environments/%s/deactivate", 389 params.UniqueID, 390 params.Network, 391 ) 392 req, err := http.NewRequestWithContext(ctx, http.MethodPost, uri, nil) 393 if err != nil { 394 return nil, fmt.Errorf("failed to create remove activation request: %s", err.Error()) 395 } 396 397 var rval RemoveActivationsResponse 398 399 resp, err := p.Exec(req, &rval, params) 400 if err != nil { 401 return nil, fmt.Errorf("remove activation request failed: %s", err.Error()) 402 } 403 404 if resp.StatusCode != http.StatusNoContent && resp.StatusCode != http.StatusOK { 405 return nil, p.Error(resp) 406 } 407 408 return &rval, nil 409 }