github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.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 connector in a stream
    11  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#amazons3
    12  	S3Connector struct {
    13  		ConnectorType   ConnectorType `json:"connectorType"`
    14  		AccessKey       string        `json:"accessKey"`
    15  		Bucket          string        `json:"bucket"`
    16  		ConnectorName   string        `json:"connectorName"`
    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 connector configuration in a data stream
    23  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#azurestorage
    24  	AzureConnector struct {
    25  		ConnectorType ConnectorType `json:"connectorType"`
    26  		AccessKey     string        `json:"accessKey"`
    27  		AccountName   string        `json:"accountName"`
    28  		ConnectorName string        `json:"connectorName"`
    29  		ContainerName string        `json:"containerName"`
    30  		Path          string        `json:"path"`
    31  	}
    32  
    33  	// DatadogConnector provides detailed information about Datadog connector
    34  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#datadog
    35  	DatadogConnector struct {
    36  		ConnectorType ConnectorType `json:"connectorType"`
    37  		AuthToken     string        `json:"authToken"`
    38  		CompressLogs  bool          `json:"compressLogs"`
    39  		ConnectorName string        `json:"connectorName"`
    40  		Service       string        `json:"service,omitempty"`
    41  		Source        string        `json:"source,omitempty"`
    42  		Tags          string        `json:"tags,omitempty"`
    43  		URL           string        `json:"url"`
    44  	}
    45  
    46  	// SplunkConnector provides detailed information about the Splunk connector
    47  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#splunk
    48  	SplunkConnector struct {
    49  		ConnectorType       ConnectorType `json:"connectorType"`
    50  		CompressLogs        bool          `json:"compressLogs"`
    51  		ConnectorName       string        `json:"connectorName"`
    52  		EventCollectorToken string        `json:"eventCollectorToken"`
    53  		URL                 string        `json:"url"`
    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 connector
    63  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#googlecloudstorage
    64  	GCSConnector struct {
    65  		ConnectorType      ConnectorType `json:"connectorType"`
    66  		Bucket             string        `json:"bucket"`
    67  		ConnectorName      string        `json:"connectorName"`
    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://developer.akamai.com/api/core_features/datastream2_config/v1.html#customhttps
    76  	CustomHTTPSConnector struct {
    77  		ConnectorType      ConnectorType      `json:"connectorType"`
    78  		AuthenticationType AuthenticationType `json:"authenticationType"`
    79  		CompressLogs       bool               `json:"compressLogs"`
    80  		ConnectorName      string             `json:"connectorName"`
    81  		Password           string             `json:"password,omitempty"`
    82  		URL                string             `json:"url"`
    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 connector
    94  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#sumologic
    95  	SumoLogicConnector struct {
    96  		ConnectorType     ConnectorType `json:"connectorType"`
    97  		CollectorCode     string        `json:"collectorCode"`
    98  		CompressLogs      bool          `json:"compressLogs"`
    99  		ConnectorName     string        `json:"connectorName"`
   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 connector
   107  	// See: https://developer.akamai.com/api/core_features/datastream2_config/v1.html#oraclecloudstorage
   108  	OracleCloudStorageConnector struct {
   109  		ConnectorType   ConnectorType `json:"connectorType"`
   110  		AccessKey       string        `json:"accessKey"`
   111  		Bucket          string        `json:"bucket"`
   112  		ConnectorName   string        `json:"connectorName"`
   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 connector.
   120  	// See: https://techdocs.akamai.com/datastream2/reference/post-stream
   121  	LogglyConnector struct {
   122  		ConnectorType     ConnectorType `json:"connectorType"`
   123  		ConnectorName     string        `json:"connectorName"`
   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 connector contains details about New Relic connector.
   133  	// See: https://techdocs.akamai.com/datastream2/docs/stream-new-relic
   134  	NewRelicConnector struct {
   135  		ConnectorType     ConnectorType `json:"connectorType"`
   136  		ConnectorName     string        `json:"connectorName"`
   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 connector.
   145  	// See: https://techdocs.akamai.com/datastream2/docs/stream-elasticsearch
   146  	ElasticsearchConnector struct {
   147  		ConnectorType     ConnectorType `json:"connectorType"`
   148  		ConnectorName     string        `json:"connectorName"`
   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  	// ConnectorType is used to create an "enum" of possible ConnectorTypes
   163  	ConnectorType string
   164  
   165  	// AuthenticationType is used to create an "enum" of possible AuthenticationTypes of the CustomHTTPSConnector
   166  	AuthenticationType string
   167  )
   168  
   169  const (
   170  	// ConnectorTypeAzure const
   171  	ConnectorTypeAzure ConnectorType = "AZURE"
   172  	// ConnectorTypeS3 const
   173  	ConnectorTypeS3 ConnectorType = "S3"
   174  	// ConnectorTypeDataDog const
   175  	ConnectorTypeDataDog ConnectorType = "DATADOG"
   176  	// ConnectorTypeSplunk const
   177  	ConnectorTypeSplunk ConnectorType = "SPLUNK"
   178  	// ConnectorTypeGcs const
   179  	ConnectorTypeGcs ConnectorType = "GCS"
   180  	// ConnectorTypeHTTPS const
   181  	ConnectorTypeHTTPS ConnectorType = "HTTPS"
   182  	// ConnectorTypeSumoLogic const
   183  	ConnectorTypeSumoLogic ConnectorType = "SUMO_LOGIC"
   184  	// ConnectorTypeOracle const
   185  	ConnectorTypeOracle ConnectorType = "Oracle_Cloud_Storage"
   186  	// ConnectorTypeLoggly const
   187  	ConnectorTypeLoggly ConnectorType = "LOGGLY"
   188  	// ConnectorTypeNewRelic const
   189  	ConnectorTypeNewRelic ConnectorType = "NEWRELIC"
   190  	// ConnectorTypeElasticsearch const
   191  	ConnectorTypeElasticsearch ConnectorType = "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  // SetConnectorType for S3Connector
   202  func (c *S3Connector) SetConnectorType() {
   203  	c.ConnectorType = ConnectorTypeS3
   204  }
   205  
   206  // Validate validates S3Connector
   207  func (c *S3Connector) Validate() error {
   208  	return validation.Errors{
   209  		"ConnectorType":   validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeS3)),
   210  		"AccessKey":       validation.Validate(c.AccessKey, validation.Required),
   211  		"Bucket":          validation.Validate(c.Bucket, validation.Required),
   212  		"ConnectorName":   validation.Validate(c.ConnectorName, 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  // SetConnectorType for AzureConnector
   220  func (c *AzureConnector) SetConnectorType() {
   221  	c.ConnectorType = ConnectorTypeAzure
   222  }
   223  
   224  // Validate validates AzureConnector
   225  func (c *AzureConnector) Validate() error {
   226  	return validation.Errors{
   227  		"ConnectorType": validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeAzure)),
   228  		"AccessKey":     validation.Validate(c.AccessKey, validation.Required),
   229  		"AccountName":   validation.Validate(c.AccountName, validation.Required),
   230  		"ConnectorName": validation.Validate(c.ConnectorName, validation.Required),
   231  		"ContainerName": validation.Validate(c.ContainerName, validation.Required),
   232  		"Path":          validation.Validate(c.Path, validation.Required),
   233  	}.Filter()
   234  }
   235  
   236  // SetConnectorType for DatadogConnector
   237  func (c *DatadogConnector) SetConnectorType() {
   238  	c.ConnectorType = ConnectorTypeDataDog
   239  }
   240  
   241  // Validate validates DatadogConnector
   242  func (c *DatadogConnector) Validate() error {
   243  	return validation.Errors{
   244  		"ConnectorType": validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeDataDog)),
   245  		"AuthToken":     validation.Validate(c.AuthToken, validation.Required),
   246  		"ConnectorName": validation.Validate(c.ConnectorName, validation.Required),
   247  		"URL":           validation.Validate(c.URL, validation.Required),
   248  	}.Filter()
   249  }
   250  
   251  // SetConnectorType for SplunkConnector
   252  func (c *SplunkConnector) SetConnectorType() {
   253  	c.ConnectorType = ConnectorTypeSplunk
   254  }
   255  
   256  // Validate validates SplunkConnector
   257  func (c *SplunkConnector) Validate() error {
   258  	return validation.Errors{
   259  		"ConnectorType":       validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeSplunk)),
   260  		"ConnectorName":       validation.Validate(c.ConnectorName, validation.Required),
   261  		"EventCollectorToken": validation.Validate(c.EventCollectorToken, validation.Required),
   262  		"URL":                 validation.Validate(c.URL, 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  // SetConnectorType for GCSConnector
   269  func (c *GCSConnector) SetConnectorType() {
   270  	c.ConnectorType = ConnectorTypeGcs
   271  }
   272  
   273  // Validate validates GCSConnector
   274  func (c *GCSConnector) Validate() error {
   275  	return validation.Errors{
   276  		"ConnectorType":      validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeGcs)),
   277  		"Bucket":             validation.Validate(c.Bucket, validation.Required),
   278  		"ConnectorName":      validation.Validate(c.ConnectorName, 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  // SetConnectorType for CustomHTTPSConnector
   286  func (c *CustomHTTPSConnector) SetConnectorType() {
   287  	c.ConnectorType = ConnectorTypeHTTPS
   288  }
   289  
   290  // Validate validates CustomHTTPSConnector
   291  func (c *CustomHTTPSConnector) Validate() error {
   292  	return validation.Errors{
   293  		"ConnectorType":      validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeHTTPS)),
   294  		"AuthenticationType": validation.Validate(c.AuthenticationType, validation.Required, validation.In(AuthenticationTypeBasic, AuthenticationTypeNone)),
   295  		"ConnectorName":      validation.Validate(c.ConnectorName, validation.Required),
   296  		"URL":                validation.Validate(c.URL, 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  // SetConnectorType for SumoLogicConnector
   305  func (c *SumoLogicConnector) SetConnectorType() {
   306  	c.ConnectorType = ConnectorTypeSumoLogic
   307  }
   308  
   309  // Validate validates SumoLogicConnector
   310  func (c *SumoLogicConnector) Validate() error {
   311  	return validation.Errors{
   312  		"ConnectorType":     validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeSumoLogic)),
   313  		"CollectorCode":     validation.Validate(c.CollectorCode, validation.Required),
   314  		"ConnectorName":     validation.Validate(c.ConnectorName, 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  // SetConnectorType for OracleCloudStorageConnector
   322  func (c *OracleCloudStorageConnector) SetConnectorType() {
   323  	c.ConnectorType = ConnectorTypeOracle
   324  }
   325  
   326  // Validate validates OracleCloudStorageConnector
   327  func (c *OracleCloudStorageConnector) Validate() error {
   328  	return validation.Errors{
   329  		"ConnectorType":   validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeOracle)),
   330  		"AccessKey":       validation.Validate(c.AccessKey, validation.Required),
   331  		"Bucket":          validation.Validate(c.Bucket, validation.Required),
   332  		"ConnectorName":   validation.Validate(c.ConnectorName, 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  // SetConnectorType for LogglyConnector
   341  func (c *LogglyConnector) SetConnectorType() {
   342  	c.ConnectorType = ConnectorTypeLoggly
   343  }
   344  
   345  // Validate validates LogglyConnector
   346  func (c *LogglyConnector) Validate() error {
   347  	return validation.Errors{
   348  		"ConnectorType":     validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeLoggly)),
   349  		"ConnectorName":     validation.Validate(c.ConnectorName, 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  // SetConnectorType for NewRelicConnector
   358  func (c *NewRelicConnector) SetConnectorType() {
   359  	c.ConnectorType = ConnectorTypeNewRelic
   360  }
   361  
   362  // Validate validates NewRelicConnector
   363  func (c *NewRelicConnector) Validate() error {
   364  	return validation.Errors{
   365  		"ConnectorType":     validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeNewRelic)),
   366  		"ConnectorName":     validation.Validate(c.ConnectorName, 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  // SetConnectorType for ElasticsearchConnector
   375  func (c *ElasticsearchConnector) SetConnectorType() {
   376  	c.ConnectorType = ConnectorTypeElasticsearch
   377  }
   378  
   379  // Validate validates ElasticsearchConnector
   380  func (c *ElasticsearchConnector) Validate() error {
   381  	return validation.Errors{
   382  		"ConnectorType":     validation.Validate(c.ConnectorType, validation.Required, validation.In(ConnectorTypeElasticsearch)),
   383  		"ConnectorName":     validation.Validate(c.ConnectorName, 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  }