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  }