github.com/akamai/AkamaiOPEN-edgegrid-golang/v5@v5.0.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 }