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 }