github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/datastream/connectors.go (about)

     1  package datastream
     2  
     3  import (
     4  	"regexp"
     5  
     6  	validation "github.com/go-ozzo/ozzo-validation/v4"
     7  )
     8  
     9  type (
    10  	// S3Connector provides details about the Amazon S3 destination in a stream
    11  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    12  	S3Connector struct {
    13  		DestinationType DestinationType `json:"destinationType"`
    14  		AccessKey       string          `json:"accessKey"`
    15  		Bucket          string          `json:"bucket"`
    16  		DisplayName     string          `json:"displayName"`
    17  		Path            string          `json:"path"`
    18  		Region          string          `json:"region"`
    19  		SecretAccessKey string          `json:"secretAccessKey"`
    20  	}
    21  
    22  	// AzureConnector provides details about the Azure Storage destination configuration in a data stream
    23  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    24  	AzureConnector struct {
    25  		DestinationType DestinationType `json:"destinationType"`
    26  		AccessKey       string          `json:"accessKey"`
    27  		AccountName     string          `json:"accountName"`
    28  		DisplayName     string          `json:"displayName"`
    29  		ContainerName   string          `json:"containerName"`
    30  		Path            string          `json:"path"`
    31  	}
    32  
    33  	// DatadogConnector provides detailed information about Datadog destination
    34  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    35  	DatadogConnector struct {
    36  		DestinationType DestinationType `json:"destinationType"`
    37  		AuthToken       string          `json:"authToken"`
    38  		CompressLogs    bool            `json:"compressLogs"`
    39  		DisplayName     string          `json:"displayName"`
    40  		Service         string          `json:"service,omitempty"`
    41  		Source          string          `json:"source,omitempty"`
    42  		Tags            string          `json:"tags,omitempty"`
    43  		Endpoint        string          `json:"endpoint"`
    44  	}
    45  
    46  	// SplunkConnector provides detailed information about the Splunk destination
    47  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    48  	SplunkConnector struct {
    49  		DestinationType     DestinationType `json:"destinationType"`
    50  		CompressLogs        bool            `json:"compressLogs"`
    51  		DisplayName         string          `json:"displayName"`
    52  		EventCollectorToken string          `json:"eventCollectorToken"`
    53  		Endpoint            string          `json:"endpoint"`
    54  		CustomHeaderName    string          `json:"customHeaderName,omitempty"`
    55  		CustomHeaderValue   string          `json:"customHeaderValue,omitempty"`
    56  		TLSHostname         string          `json:"tlsHostname,omitempty"`
    57  		CACert              string          `json:"caCert,omitempty"`
    58  		ClientCert          string          `json:"clientCert,omitempty"`
    59  		ClientKey           string          `json:"clientKey,omitempty"`
    60  	}
    61  
    62  	// GCSConnector provides detailed information about the Google Cloud Storage destination
    63  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    64  	GCSConnector struct {
    65  		DestinationType    DestinationType `json:"destinationType"`
    66  		Bucket             string          `json:"bucket"`
    67  		DisplayName        string          `json:"displayName"`
    68  		Path               string          `json:"path,omitempty"`
    69  		PrivateKey         string          `json:"privateKey"`
    70  		ProjectID          string          `json:"projectId"`
    71  		ServiceAccountName string          `json:"serviceAccountName"`
    72  	}
    73  
    74  	// CustomHTTPSConnector provides detailed information about the custom HTTPS endpoint
    75  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    76  	CustomHTTPSConnector struct {
    77  		DestinationType    DestinationType    `json:"destinationType"`
    78  		AuthenticationType AuthenticationType `json:"authenticationType"`
    79  		CompressLogs       bool               `json:"compressLogs"`
    80  		DisplayName        string             `json:"displayName"`
    81  		Password           string             `json:"password,omitempty"`
    82  		Endpoint           string             `json:"endpoint"`
    83  		UserName           string             `json:"userName,omitempty"`
    84  		ContentType        string             `json:"contentType,omitempty"`
    85  		CustomHeaderName   string             `json:"customHeaderName,omitempty"`
    86  		CustomHeaderValue  string             `json:"customHeaderValue,omitempty"`
    87  		TLSHostname        string             `json:"tlsHostname,omitempty"`
    88  		CACert             string             `json:"caCert,omitempty"`
    89  		ClientCert         string             `json:"clientCert,omitempty"`
    90  		ClientKey          string             `json:"clientKey,omitempty"`
    91  	}
    92  
    93  	// SumoLogicConnector provides detailed information about the Sumo Logic destination
    94  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
    95  	SumoLogicConnector struct {
    96  		DestinationType   DestinationType `json:"destinationType"`
    97  		CollectorCode     string          `json:"collectorCode"`
    98  		CompressLogs      bool            `json:"compressLogs"`
    99  		DisplayName       string          `json:"displayName"`
   100  		Endpoint          string          `json:"endpoint"`
   101  		ContentType       string          `json:"contentType,omitempty"`
   102  		CustomHeaderName  string          `json:"customHeaderName,omitempty"`
   103  		CustomHeaderValue string          `json:"customHeaderValue,omitempty"`
   104  	}
   105  
   106  	// OracleCloudStorageConnector provides details about the Oracle Cloud Storage destination
   107  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
   108  	OracleCloudStorageConnector struct {
   109  		DestinationType DestinationType `json:"destinationType"`
   110  		AccessKey       string          `json:"accessKey"`
   111  		Bucket          string          `json:"bucket"`
   112  		DisplayName     string          `json:"displayName"`
   113  		Namespace       string          `json:"namespace"`
   114  		Path            string          `json:"path"`
   115  		Region          string          `json:"region"`
   116  		SecretAccessKey string          `json:"secretAccessKey"`
   117  	}
   118  
   119  	// LogglyConnector contains details about Loggly destination.
   120  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
   121  	LogglyConnector struct {
   122  		DestinationType   DestinationType `json:"destinationType"`
   123  		DisplayName       string          `json:"displayName"`
   124  		Endpoint          string          `json:"endpoint"`
   125  		AuthToken         string          `json:"authToken"`
   126  		Tags              string          `json:"tags,omitempty"`
   127  		ContentType       string          `json:"contentType,omitempty"`
   128  		CustomHeaderName  string          `json:"customHeaderName,omitempty"`
   129  		CustomHeaderValue string          `json:"customHeaderValue,omitempty"`
   130  	}
   131  
   132  	// NewRelicConnector contains details about New Relic destination.
   133  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
   134  	NewRelicConnector struct {
   135  		DestinationType   DestinationType `json:"destinationType"`
   136  		DisplayName       string          `json:"displayName"`
   137  		Endpoint          string          `json:"endpoint"`
   138  		AuthToken         string          `json:"authToken"`
   139  		ContentType       string          `json:"contentType,omitempty"`
   140  		CustomHeaderName  string          `json:"customHeaderName,omitempty"`
   141  		CustomHeaderValue string          `json:"customHeaderValue,omitempty"`
   142  	}
   143  
   144  	// ElasticsearchConnector contains details about Elasticsearch destination.
   145  	// See: https://techdocs.akamai.com/datastream2/v2/reference/post-stream
   146  	ElasticsearchConnector struct {
   147  		DestinationType   DestinationType `json:"destinationType"`
   148  		DisplayName       string          `json:"displayName"`
   149  		Endpoint          string          `json:"endpoint"`
   150  		IndexName         string          `json:"indexName"`
   151  		UserName          string          `json:"userName"`
   152  		Password          string          `json:"password"`
   153  		ContentType       string          `json:"contentType,omitempty"`
   154  		CustomHeaderName  string          `json:"customHeaderName,omitempty"`
   155  		CustomHeaderValue string          `json:"customHeaderValue,omitempty"`
   156  		TLSHostname       string          `json:"tlsHostname,omitempty"`
   157  		CACert            string          `json:"caCert,omitempty"`
   158  		ClientCert        string          `json:"clientCert,omitempty"`
   159  		ClientKey         string          `json:"clientKey,omitempty"`
   160  	}
   161  
   162  	// DestinationType is used to create an "enum" of possible DestinationTypes
   163  	DestinationType string
   164  
   165  	// AuthenticationType is used to create an "enum" of possible AuthenticationTypes of the CustomHTTPSConnector
   166  	AuthenticationType string
   167  )
   168  
   169  const (
   170  	// DestinationTypeAzure const
   171  	DestinationTypeAzure DestinationType = "AZURE"
   172  	// DestinationTypeS3 const
   173  	DestinationTypeS3 DestinationType = "S3"
   174  	// DestinationTypeDataDog const
   175  	DestinationTypeDataDog DestinationType = "DATADOG"
   176  	// DestinationTypeSplunk const
   177  	DestinationTypeSplunk DestinationType = "SPLUNK"
   178  	// DestinationTypeGcs const
   179  	DestinationTypeGcs DestinationType = "GCS"
   180  	// DestinationTypeHTTPS const
   181  	DestinationTypeHTTPS DestinationType = "HTTPS"
   182  	// DestinationTypeSumoLogic const
   183  	DestinationTypeSumoLogic DestinationType = "SUMO_LOGIC"
   184  	// DestinationTypeOracle const
   185  	DestinationTypeOracle DestinationType = "Oracle_Cloud_Storage"
   186  	// DestinationTypeLoggly const
   187  	DestinationTypeLoggly DestinationType = "LOGGLY"
   188  	// DestinationTypeNewRelic const
   189  	DestinationTypeNewRelic DestinationType = "NEWRELIC"
   190  	// DestinationTypeElasticsearch const
   191  	DestinationTypeElasticsearch DestinationType = "ELASTICSEARCH"
   192  
   193  	// AuthenticationTypeNone const
   194  	AuthenticationTypeNone AuthenticationType = "NONE"
   195  	// AuthenticationTypeBasic const
   196  	AuthenticationTypeBasic AuthenticationType = "BASIC"
   197  )
   198  
   199  var customHeaderNameRegexp = regexp.MustCompile("^[A-Za-z0-9_-]+$")
   200  
   201  // SetDestinationType for S3Connector
   202  func (c *S3Connector) SetDestinationType() {
   203  	c.DestinationType = DestinationTypeS3
   204  }
   205  
   206  // Validate validates S3Connector
   207  func (c *S3Connector) Validate() error {
   208  	return validation.Errors{
   209  		"DestinationType": validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeS3)),
   210  		"AccessKey":       validation.Validate(c.AccessKey, validation.Required),
   211  		"Bucket":          validation.Validate(c.Bucket, validation.Required),
   212  		"DisplayName":     validation.Validate(c.DisplayName, validation.Required),
   213  		"Path":            validation.Validate(c.Path, validation.Required),
   214  		"Region":          validation.Validate(c.Region, validation.Required),
   215  		"SecretAccessKey": validation.Validate(c.SecretAccessKey, validation.Required),
   216  	}.Filter()
   217  }
   218  
   219  // SetDestinationType for AzureConnector
   220  func (c *AzureConnector) SetDestinationType() {
   221  	c.DestinationType = DestinationTypeAzure
   222  }
   223  
   224  // Validate validates AzureConnector
   225  func (c *AzureConnector) Validate() error {
   226  	return validation.Errors{
   227  		"DestinationType": validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeAzure)),
   228  		"AccessKey":       validation.Validate(c.AccessKey, validation.Required),
   229  		"AccountName":     validation.Validate(c.AccountName, validation.Required),
   230  		"DisplayName":     validation.Validate(c.DisplayName, validation.Required),
   231  		"ContainerName":   validation.Validate(c.ContainerName, validation.Required),
   232  		"Path":            validation.Validate(c.Path, validation.Required),
   233  	}.Filter()
   234  }
   235  
   236  // SetDestinationType for DatadogConnector
   237  func (c *DatadogConnector) SetDestinationType() {
   238  	c.DestinationType = DestinationTypeDataDog
   239  }
   240  
   241  // Validate validates DatadogConnector
   242  func (c *DatadogConnector) Validate() error {
   243  	return validation.Errors{
   244  		"DestinationType": validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeDataDog)),
   245  		"AuthToken":       validation.Validate(c.AuthToken, validation.Required),
   246  		"DisplayName":     validation.Validate(c.DisplayName, validation.Required),
   247  		"Endpoint":        validation.Validate(c.Endpoint, validation.Required),
   248  	}.Filter()
   249  }
   250  
   251  // SetDestinationType for SplunkConnector
   252  func (c *SplunkConnector) SetDestinationType() {
   253  	c.DestinationType = DestinationTypeSplunk
   254  }
   255  
   256  // Validate validates SplunkConnector
   257  func (c *SplunkConnector) Validate() error {
   258  	return validation.Errors{
   259  		"DestinationType":     validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeSplunk)),
   260  		"DisplayName":         validation.Validate(c.DisplayName, validation.Required),
   261  		"EventCollectorToken": validation.Validate(c.EventCollectorToken, validation.Required),
   262  		"Endpoint":            validation.Validate(c.Endpoint, validation.Required),
   263  		"CustomHeaderName":    validation.Validate(c.CustomHeaderName, validation.Required.When(c.CustomHeaderValue != ""), validation.When(c.CustomHeaderName != "", validation.Match(customHeaderNameRegexp))),
   264  		"CustomHeaderValue":   validation.Validate(c.CustomHeaderValue, validation.Required.When(c.CustomHeaderName != "")),
   265  	}.Filter()
   266  }
   267  
   268  // SetDestinationType for GCSConnector
   269  func (c *GCSConnector) SetDestinationType() {
   270  	c.DestinationType = DestinationTypeGcs
   271  }
   272  
   273  // Validate validates GCSConnector
   274  func (c *GCSConnector) Validate() error {
   275  	return validation.Errors{
   276  		"DestinationType":    validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeGcs)),
   277  		"Bucket":             validation.Validate(c.Bucket, validation.Required),
   278  		"DisplayName":        validation.Validate(c.DisplayName, validation.Required),
   279  		"PrivateKey":         validation.Validate(c.PrivateKey, validation.Required),
   280  		"ProjectID":          validation.Validate(c.ProjectID, validation.Required),
   281  		"ServiceAccountName": validation.Validate(c.ServiceAccountName, validation.Required),
   282  	}.Filter()
   283  }
   284  
   285  // SetDestinationType for CustomHTTPSConnector
   286  func (c *CustomHTTPSConnector) SetDestinationType() {
   287  	c.DestinationType = DestinationTypeHTTPS
   288  }
   289  
   290  // Validate validates CustomHTTPSConnector
   291  func (c *CustomHTTPSConnector) Validate() error {
   292  	return validation.Errors{
   293  		"DestinationType":    validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeHTTPS)),
   294  		"AuthenticationType": validation.Validate(c.AuthenticationType, validation.Required, validation.In(AuthenticationTypeBasic, AuthenticationTypeNone)),
   295  		"DisplayName":        validation.Validate(c.DisplayName, validation.Required),
   296  		"Endpoint":           validation.Validate(c.Endpoint, validation.Required),
   297  		"UserName":           validation.Validate(c.UserName, validation.Required.When(c.AuthenticationType == AuthenticationTypeBasic)),
   298  		"Password":           validation.Validate(c.Password, validation.Required.When(c.AuthenticationType == AuthenticationTypeBasic)),
   299  		"CustomHeaderName":   validation.Validate(c.CustomHeaderName, validation.Required.When(c.CustomHeaderValue != ""), validation.When(c.CustomHeaderName != "", validation.Match(customHeaderNameRegexp))),
   300  		"CustomHeaderValue":  validation.Validate(c.CustomHeaderValue, validation.Required.When(c.CustomHeaderName != "")),
   301  	}.Filter()
   302  }
   303  
   304  // SetDestinationType for SumoLogicConnector
   305  func (c *SumoLogicConnector) SetDestinationType() {
   306  	c.DestinationType = DestinationTypeSumoLogic
   307  }
   308  
   309  // Validate validates SumoLogicConnector
   310  func (c *SumoLogicConnector) Validate() error {
   311  	return validation.Errors{
   312  		"DestinationType":   validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeSumoLogic)),
   313  		"CollectorCode":     validation.Validate(c.CollectorCode, validation.Required),
   314  		"DisplayName":       validation.Validate(c.DisplayName, validation.Required),
   315  		"Endpoint":          validation.Validate(c.Endpoint, validation.Required),
   316  		"CustomHeaderName":  validation.Validate(c.CustomHeaderName, validation.Required.When(c.CustomHeaderValue != ""), validation.When(c.CustomHeaderName != "", validation.Match(customHeaderNameRegexp))),
   317  		"CustomHeaderValue": validation.Validate(c.CustomHeaderValue, validation.Required.When(c.CustomHeaderName != "")),
   318  	}.Filter()
   319  }
   320  
   321  // SetDestinationType for OracleCloudStorageConnector
   322  func (c *OracleCloudStorageConnector) SetDestinationType() {
   323  	c.DestinationType = DestinationTypeOracle
   324  }
   325  
   326  // Validate validates OracleCloudStorageConnector
   327  func (c *OracleCloudStorageConnector) Validate() error {
   328  	return validation.Errors{
   329  		"DestinationType": validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeOracle)),
   330  		"AccessKey":       validation.Validate(c.AccessKey, validation.Required),
   331  		"Bucket":          validation.Validate(c.Bucket, validation.Required),
   332  		"DisplayName":     validation.Validate(c.DisplayName, validation.Required),
   333  		"Namespace":       validation.Validate(c.Namespace, validation.Required),
   334  		"Path":            validation.Validate(c.Path, validation.Required),
   335  		"Region":          validation.Validate(c.Region, validation.Required),
   336  		"SecretAccessKey": validation.Validate(c.SecretAccessKey, validation.Required),
   337  	}.Filter()
   338  }
   339  
   340  // SetDestinationType for LogglyConnector
   341  func (c *LogglyConnector) SetDestinationType() {
   342  	c.DestinationType = DestinationTypeLoggly
   343  }
   344  
   345  // Validate validates LogglyConnector
   346  func (c *LogglyConnector) Validate() error {
   347  	return validation.Errors{
   348  		"DestinationType":   validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeLoggly)),
   349  		"DisplayName":       validation.Validate(c.DisplayName, validation.Required),
   350  		"Endpoint":          validation.Validate(c.Endpoint, validation.Required),
   351  		"AuthToken":         validation.Validate(c.AuthToken, validation.Required),
   352  		"CustomHeaderName":  validation.Validate(c.CustomHeaderName, validation.Required.When(c.CustomHeaderValue != ""), validation.When(c.CustomHeaderName != "", validation.Match(customHeaderNameRegexp))),
   353  		"CustomHeaderValue": validation.Validate(c.CustomHeaderValue, validation.Required.When(c.CustomHeaderName != "")),
   354  	}.Filter()
   355  }
   356  
   357  // SetDestinationType for NewRelicConnector
   358  func (c *NewRelicConnector) SetDestinationType() {
   359  	c.DestinationType = DestinationTypeNewRelic
   360  }
   361  
   362  // Validate validates NewRelicConnector
   363  func (c *NewRelicConnector) Validate() error {
   364  	return validation.Errors{
   365  		"DestinationType":   validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeNewRelic)),
   366  		"DisplayName":       validation.Validate(c.DisplayName, validation.Required),
   367  		"Endpoint":          validation.Validate(c.Endpoint, validation.Required),
   368  		"AuthToken":         validation.Validate(c.AuthToken, validation.Required),
   369  		"CustomHeaderName":  validation.Validate(c.CustomHeaderName, validation.Required.When(c.CustomHeaderValue != ""), validation.When(c.CustomHeaderName != "", validation.Match(customHeaderNameRegexp))),
   370  		"CustomHeaderValue": validation.Validate(c.CustomHeaderValue, validation.Required.When(c.CustomHeaderName != "")),
   371  	}.Filter()
   372  }
   373  
   374  // SetDestinationType for ElasticsearchConnector
   375  func (c *ElasticsearchConnector) SetDestinationType() {
   376  	c.DestinationType = DestinationTypeElasticsearch
   377  }
   378  
   379  // Validate validates ElasticsearchConnector
   380  func (c *ElasticsearchConnector) Validate() error {
   381  	return validation.Errors{
   382  		"DestinationType":   validation.Validate(c.DestinationType, validation.Required, validation.In(DestinationTypeElasticsearch)),
   383  		"DisplayName":       validation.Validate(c.DisplayName, validation.Required),
   384  		"Endpoint":          validation.Validate(c.Endpoint, validation.Required),
   385  		"UserName":          validation.Validate(c.UserName, validation.Required),
   386  		"Password":          validation.Validate(c.Password, validation.Required),
   387  		"IndexName":         validation.Validate(c.IndexName, validation.Required),
   388  		"CustomHeaderName":  validation.Validate(c.CustomHeaderName, validation.Required.When(c.CustomHeaderValue != ""), validation.When(c.CustomHeaderName != "", validation.Match(customHeaderNameRegexp))),
   389  		"CustomHeaderValue": validation.Validate(c.CustomHeaderValue, validation.Required.When(c.CustomHeaderName != "")),
   390  	}.Filter()
   391  }