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 }