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