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  }