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  }