From 32c9550bcbf8a0714b5d30af5f44256d9f601e6f Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Tue, 26 Oct 2021 18:43:58 +0300 Subject: [PATCH] Make ees opts of type struct --- config/config.go | 2 +- config/eescfg.go | 515 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 498 insertions(+), 19 deletions(-) diff --git a/config/config.go b/config/config.go index 2764da03d..1fbe9773f 100644 --- a/config/config.go +++ b/config/config.go @@ -45,7 +45,7 @@ var ( getDftLoaderCfg = func() *LoaderSCfg { return new(LoaderSCfg) } getDftRemHstCfg = func() *RemoteHost { return new(RemoteHost) } - getDftEvExpCfg = func() *EventExporterCfg { return &EventExporterCfg{Opts: make(map[string]interface{})} } + getDftEvExpCfg = func() *EventExporterCfg { return &EventExporterCfg{Opts: &EventExporterOpts{}} } getDftEvRdrCfg = func() *EventReaderCfg { return &EventReaderCfg{Opts: make(map[string]interface{})} } ) diff --git a/config/eescfg.go b/config/eescfg.go index 922728584..a04d1f4cc 100644 --- a/config/eescfg.go +++ b/config/eescfg.go @@ -19,6 +19,8 @@ along with this program. If not, see package config import ( + "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -142,12 +144,60 @@ func (eeS EEsCfg) AsMapInterface(separator string) interface{} { return mp } +type EventExporterOpts struct { + CSVFieldSeparator string + ElsIndex string + ElsIfPrimaryTerm *int + ElsIfSeqNo *int + ElsOpType string + ElsPipeline string + ElsRouting string + ElsTimeout time.Duration + ElsVersion *int + ElsVersionType string + ElsWaitForActiveShards string + SQLMaxIdleConns int + SQLMaxOpenConns int + SQLConnMaxLifetime time.Duration + SQLTableName string + SQLDBName string + SSLMode string + KafkaTopic string + AMQPQueueID string + AMQPRoutingKey string + AMQPExchange string + AMQPExchangeType string + AWSRegion string + AWSKey string + AWSSecret string + AWSToken string + SQSQueueID string + S3BucketID string + S3FolderPath string + NATSJetStream bool + NATSSubject string + NATSJWTFile string + NATSSeedFile string + NATSCertificateAuthority string + NATSClientCertificate string + NATSClientKey string + NATSJetStreamMaxWait time.Duration + RPCCodec string + ServiceMethod string + KeyPath string + CertPath string + CAPath string + TLS bool + RPCConnTimeout time.Duration + RPCReplyTimeout time.Duration +} + // EventExporterCfg the config for a Event Exporter type EventExporterCfg struct { ID string Type string ExportPath string - Opts map[string]interface{} + Opts *EventExporterOpts Timezone string Filters []string Flags utils.FlagsWithParams @@ -163,6 +213,158 @@ type EventExporterCfg struct { trailerFields []*FCTemplate } +func (eeOpts *EventExporterOpts) loadFromJSONCfg(jsnCfg *EventExporterOptsJson) (err error) { + if jsnCfg == nil { + return + } + if jsnCfg.CSVFieldSeparator != nil { + eeOpts.CSVFieldSeparator = *jsnCfg.CSVFieldSeparator + } + if jsnCfg.ElsIndex != nil { + eeOpts.ElsIndex = *jsnCfg.ElsIndex + } + if jsnCfg.ElsIfPrimaryTerm != nil { + eeOpts.ElsIfPrimaryTerm = jsnCfg.ElsIfPrimaryTerm + } + if jsnCfg.ElsIfSeqNo != nil { + eeOpts.ElsIfSeqNo = jsnCfg.ElsIfSeqNo + } + if jsnCfg.ElsOpType != nil { + eeOpts.ElsOpType = *jsnCfg.ElsOpType + } + if jsnCfg.ElsPipeline != nil { + eeOpts.ElsPipeline = *jsnCfg.ElsPipeline + } + if jsnCfg.ElsRouting != nil { + eeOpts.ElsRouting = *jsnCfg.ElsRouting + } + if jsnCfg.ElsTimeout != nil { + if eeOpts.ElsTimeout, err = utils.ParseDurationWithNanosecs(*jsnCfg.ElsTimeout); err != nil { + return + } + } + if jsnCfg.ElsVersion != nil { + eeOpts.ElsVersion = jsnCfg.ElsVersion + } + if jsnCfg.ElsVersionType != nil { + eeOpts.ElsVersionType = *jsnCfg.ElsVersionType + } + if jsnCfg.ElsWaitForActiveShards != nil { + eeOpts.ElsWaitForActiveShards = *jsnCfg.ElsWaitForActiveShards + } + if jsnCfg.SQLMaxIdleConns != nil { + eeOpts.SQLMaxIdleConns = *jsnCfg.SQLMaxIdleConns + } + if jsnCfg.SQLMaxOpenConns != nil { + eeOpts.SQLMaxOpenConns = *jsnCfg.SQLMaxOpenConns + } + if jsnCfg.SQLConnMaxLifetime != nil { + if eeOpts.SQLConnMaxLifetime, err = utils.ParseDurationWithNanosecs(*jsnCfg.SQLConnMaxLifetime); err != nil { + return + } + } + if jsnCfg.SQLTableName != nil { + eeOpts.SQLTableName = *jsnCfg.SQLTableName + } + if jsnCfg.SQLDBName != nil { + eeOpts.SQLDBName = *jsnCfg.SQLDBName + } + if jsnCfg.SSLMode != nil { + eeOpts.SSLMode = *jsnCfg.SSLMode + } + if jsnCfg.KafkaTopic != nil { + eeOpts.KafkaTopic = *jsnCfg.KafkaTopic + } + if jsnCfg.AMQPQueueID != nil { + eeOpts.AMQPQueueID = *jsnCfg.AMQPQueueID + } + if jsnCfg.AMQPRoutingKey != nil { + eeOpts.AMQPRoutingKey = *jsnCfg.AMQPRoutingKey + } + if jsnCfg.AMQPExchange != nil { + eeOpts.AMQPExchange = *jsnCfg.AMQPExchange + } + if jsnCfg.AMQPExchangeType != nil { + eeOpts.AMQPExchangeType = *jsnCfg.AMQPExchangeType + } + if jsnCfg.AWSRegion != nil { + eeOpts.AWSRegion = *jsnCfg.AWSRegion + } + if jsnCfg.AWSKey != nil { + eeOpts.AWSKey = *jsnCfg.AWSKey + } + if jsnCfg.AWSSecret != nil { + eeOpts.AWSSecret = *jsnCfg.AWSSecret + } + if jsnCfg.AWSToken != nil { + eeOpts.AWSToken = *jsnCfg.AWSToken + } + if jsnCfg.SQSQueueID != nil { + eeOpts.SQSQueueID = *jsnCfg.SQSQueueID + } + if jsnCfg.S3BucketID != nil { + eeOpts.S3BucketID = *jsnCfg.S3BucketID + } + if jsnCfg.S3FolderPath != nil { + eeOpts.S3FolderPath = *jsnCfg.S3FolderPath + } + if jsnCfg.NATSJetStream != nil { + eeOpts.NATSJetStream = *jsnCfg.NATSJetStream + } + if jsnCfg.NATSSubject != nil { + eeOpts.NATSSubject = *jsnCfg.NATSSubject + } + if jsnCfg.NATSJWTFile != nil { + eeOpts.NATSJWTFile = *jsnCfg.NATSJWTFile + } + if jsnCfg.NATSSeedFile != nil { + eeOpts.NATSSeedFile = *jsnCfg.NATSSeedFile + } + if jsnCfg.NATSCertificateAuthority != nil { + eeOpts.NATSCertificateAuthority = *jsnCfg.NATSCertificateAuthority + } + if jsnCfg.NATSClientCertificate != nil { + eeOpts.NATSClientCertificate = *jsnCfg.NATSClientCertificate + } + if jsnCfg.NATSClientKey != nil { + eeOpts.NATSClientKey = *jsnCfg.NATSClientKey + } + if jsnCfg.NATSJetStreamMaxWait != nil { + if eeOpts.NATSJetStreamMaxWait, err = utils.ParseDurationWithNanosecs(*jsnCfg.NATSJetStreamMaxWait); err != nil { + return + } + } + if jsnCfg.RPCCodec != nil { + eeOpts.RPCCodec = *jsnCfg.RPCCodec + } + if jsnCfg.ServiceMethod != nil { + eeOpts.ServiceMethod = *jsnCfg.ServiceMethod + } + if jsnCfg.KeyPath != nil { + eeOpts.KeyPath = *jsnCfg.KeyPath + } + if jsnCfg.CertPath != nil { + eeOpts.CertPath = *jsnCfg.CertPath + } + if jsnCfg.CAPath != nil { + eeOpts.CAPath = *jsnCfg.CAPath + } + if jsnCfg.TLS != nil { + eeOpts.TLS = *jsnCfg.TLS + } + if jsnCfg.RPCConnTimeout != nil { + if eeOpts.RPCConnTimeout, err = utils.ParseDurationWithNanosecs(*jsnCfg.RPCConnTimeout); err != nil { + return + } + } + if jsnCfg.RPCReplyTimeout != nil { + if eeOpts.RPCReplyTimeout, err = utils.ParseDurationWithNanosecs(*jsnCfg.RPCReplyTimeout); err != nil { + return + } + } + return +} + func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTemplates map[string][]*FCTemplate, separator string) (err error) { if jsnEec == nil { return @@ -212,14 +414,12 @@ func (eeC *EventExporterCfg) loadFromJSONCfg(jsnEec *EventExporterJsonCfg, msgTe } eeC.ComputeFields() } - if jsnEec.Opts != nil { - for k, v := range jsnEec.Opts { - eeC.Opts[k] = v - } - } if jsnEec.Failed_posts_dir != nil { eeC.FailedPostsDir = *jsnEec.Failed_posts_dir } + if jsnEec.Opts != nil { + err = eeC.Opts.loadFromJSONCfg(jsnEec.Opts) + } return } @@ -256,6 +456,56 @@ func (eeC *EventExporterCfg) TrailerFields() []*FCTemplate { return eeC.trailerFields } +func (eeOpts *EventExporterOpts) Clone() *EventExporterOpts { + return &EventExporterOpts{ + CSVFieldSeparator: eeOpts.CSVFieldSeparator, + ElsIndex: eeOpts.ElsIndex, + ElsIfPrimaryTerm: eeOpts.ElsIfPrimaryTerm, + ElsIfSeqNo: eeOpts.ElsIfSeqNo, + ElsOpType: eeOpts.ElsOpType, + ElsPipeline: eeOpts.ElsPipeline, + ElsRouting: eeOpts.ElsRouting, + ElsTimeout: eeOpts.ElsTimeout, + ElsVersion: eeOpts.ElsVersion, + ElsVersionType: eeOpts.ElsVersionType, + ElsWaitForActiveShards: eeOpts.ElsWaitForActiveShards, + SQLMaxIdleConns: eeOpts.SQLMaxIdleConns, + SQLMaxOpenConns: eeOpts.SQLMaxOpenConns, + SQLConnMaxLifetime: eeOpts.SQLConnMaxLifetime, + SQLTableName: eeOpts.SQLTableName, + SQLDBName: eeOpts.SQLDBName, + SSLMode: eeOpts.SSLMode, + KafkaTopic: eeOpts.KafkaTopic, + AMQPQueueID: eeOpts.AMQPQueueID, + AMQPRoutingKey: eeOpts.AMQPRoutingKey, + AMQPExchange: eeOpts.AMQPExchange, + AMQPExchangeType: eeOpts.AMQPExchangeType, + AWSRegion: eeOpts.AWSRegion, + AWSKey: eeOpts.AWSKey, + AWSSecret: eeOpts.AWSSecret, + AWSToken: eeOpts.AWSToken, + SQSQueueID: eeOpts.SQSQueueID, + S3BucketID: eeOpts.S3BucketID, + S3FolderPath: eeOpts.S3FolderPath, + NATSJetStream: eeOpts.NATSJetStream, + NATSSubject: eeOpts.NATSSubject, + NATSJWTFile: eeOpts.NATSJWTFile, + NATSSeedFile: eeOpts.NATSSeedFile, + NATSCertificateAuthority: eeOpts.NATSCertificateAuthority, + NATSClientCertificate: eeOpts.NATSClientCertificate, + NATSClientKey: eeOpts.NATSClientKey, + NATSJetStreamMaxWait: eeOpts.NATSJetStreamMaxWait, + RPCCodec: eeOpts.RPCCodec, + ServiceMethod: eeOpts.ServiceMethod, + KeyPath: eeOpts.KeyPath, + CertPath: eeOpts.CertPath, + CAPath: eeOpts.CAPath, + TLS: eeOpts.TLS, + RPCConnTimeout: eeOpts.RPCConnTimeout, + RPCReplyTimeout: eeOpts.RPCReplyTimeout, + } +} + // Clone returns a deep copy of EventExporterCfg func (eeC EventExporterCfg) Clone() (cln *EventExporterCfg) { cln = &EventExporterCfg{ @@ -272,7 +522,7 @@ func (eeC EventExporterCfg) Clone() (cln *EventExporterCfg) { headerFields: make([]*FCTemplate, len(eeC.headerFields)), contentFields: make([]*FCTemplate, len(eeC.contentFields)), trailerFields: make([]*FCTemplate, len(eeC.trailerFields)), - Opts: make(map[string]interface{}), + Opts: eeC.Opts.Clone(), FailedPostsDir: eeC.FailedPostsDir, } @@ -295,14 +545,58 @@ func (eeC EventExporterCfg) Clone() (cln *EventExporterCfg) { for idx, fld := range eeC.trailerFields { cln.trailerFields[idx] = fld.Clone() } - for k, v := range eeC.Opts { - cln.Opts[k] = v - } return } // AsMapInterface returns the config as a map[string]interface{} func (eeC *EventExporterCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { + opts := map[string]interface{}{ + utils.CSVFieldSepOpt: eeC.Opts.CSVFieldSeparator, + utils.ElsIndex: eeC.Opts.ElsIndex, + utils.ElsIfPrimaryTerm: eeC.Opts.ElsIfPrimaryTerm, + utils.ElsIfSeqNo: eeC.Opts.ElsIfSeqNo, + utils.ElsOpType: eeC.Opts.ElsOpType, + utils.ElsPipeline: eeC.Opts.ElsPipeline, + utils.ElsRouting: eeC.Opts.ElsRouting, + utils.ElsTimeout: eeC.Opts.ElsTimeout, + utils.ElsVersionLow: eeC.Opts.ElsVersion, + utils.ElsVersionType: eeC.Opts.ElsVersionType, + utils.ElsWaitForActiveShards: eeC.Opts.ElsWaitForActiveShards, + utils.SQLMaxIdleConnsCfg: eeC.Opts.SQLMaxIdleConns, + utils.SQLMaxOpenConns: eeC.Opts.SQLMaxOpenConns, + utils.SQLConnMaxLifetime: eeC.Opts.SQLConnMaxLifetime, + utils.SQLTableNameOpt: eeC.Opts.SQLTableName, + utils.SQLDBNameOpt: eeC.Opts.SQLDBName, + utils.SSLModeCfg: eeC.Opts.SSLMode, + utils.KafkaTopic: eeC.Opts.KafkaTopic, + utils.AMQPQueueID: eeC.Opts.AMQPQueueID, + utils.AMQPRoutingKey: eeC.Opts.AMQPRoutingKey, + utils.AMQPExchange: eeC.Opts.AMQPExchange, + utils.AMQPExchangeType: eeC.Opts.AMQPExchangeType, + utils.AWSRegion: eeC.Opts.AWSRegion, + utils.AWSKey: eeC.Opts.AWSKey, + utils.AWSSecret: eeC.Opts.AWSSecret, + utils.AWSToken: eeC.Opts.AWSToken, + utils.SQSQueueID: eeC.Opts.SQSQueueID, + utils.S3Bucket: eeC.Opts.S3BucketID, + utils.S3FolderPath: eeC.Opts.S3FolderPath, + utils.NatsJetStream: eeC.Opts.NATSJetStream, + utils.NatsSubject: eeC.Opts.NATSSubject, + utils.NatsJWTFile: eeC.Opts.NATSJWTFile, + utils.NatsSeedFile: eeC.Opts.NATSSeedFile, + utils.NatsCertificateAuthority: eeC.Opts.NATSCertificateAuthority, + utils.NatsClientCertificate: eeC.Opts.NATSClientCertificate, + utils.NatsClientKey: eeC.Opts.NATSClientKey, + utils.NatsJetStreamMaxWait: eeC.Opts.NATSJetStreamMaxWait, + utils.RpcCodec: eeC.Opts.RPCCodec, + utils.ServiceMethod: eeC.Opts.ServiceMethod, + utils.KeyPath: eeC.Opts.KeyPath, + utils.CertPath: eeC.Opts.CertPath, + utils.CaPath: eeC.Opts.CAPath, + utils.TLS: eeC.Opts.TLS, + utils.RpcConnTimeout: eeC.Opts.RPCConnTimeout, + utils.RpcReplyTimeout: eeC.Opts.RPCReplyTimeout, + } flgs := eeC.Flags.SliceFlags() if flgs == nil { flgs = []string{} @@ -320,13 +614,8 @@ func (eeC *EventExporterCfg) AsMapInterface(separator string) (initialMP map[str utils.AttemptsCfg: eeC.Attempts, utils.ConcurrentRequestsCfg: eeC.ConcurrentRequests, utils.FailedPostsDirCfg: eeC.FailedPostsDir, + utils.OptsCfg: opts, } - opts := make(map[string]interface{}) - for k, v := range eeC.Opts { - opts[k] = v - } - initialMP[utils.OptsCfg] = opts - if eeC.Fields != nil { fields := make([]map[string]interface{}, 0, len(eeC.Fields)) for _, fld := range eeC.Fields { @@ -337,12 +626,60 @@ func (eeC *EventExporterCfg) AsMapInterface(separator string) (initialMP map[str return } +type EventExporterOptsJson struct { + CSVFieldSeparator *string `json:"csvFieldSeparator"` + ElsIndex *string `json:"elsIndex"` + ElsIfPrimaryTerm *int `json:"elsIfPrimaryTerm"` + ElsIfSeqNo *int `json:"elsIfSeqNo"` + ElsOpType *string `json:"elsOpType"` + ElsPipeline *string `json:"elsPipeline"` + ElsRouting *string `json:"elsRouting"` + ElsTimeout *string `json:"elsTimeout"` + ElsVersion *int `json:"elsVersion"` + ElsVersionType *string `json:"elsVersionType"` + ElsWaitForActiveShards *string `json:"elsWaitForActiveShards"` + SQLMaxIdleConns *int `json:"sqlMaxIdleConns"` + SQLMaxOpenConns *int `json:"sqlMaxOpenConns"` + SQLConnMaxLifetime *string `json:"sqlConnMaxLifetime"` + SQLTableName *string `json:"sqlTableName"` + SQLDBName *string `json:"sqlDBName"` + SSLMode *string `json:"sslMode"` + KafkaTopic *string `json:"kafkaTopic"` + AMQPQueueID *string `json:"amqpQueueID"` + AMQPRoutingKey *string `json:"amqpRoutingKey"` + AMQPExchange *string `json:"amqpExchange"` + AMQPExchangeType *string `json:"amqpExchangeType"` + AWSRegion *string `json:"awsRegion"` + AWSKey *string `json:"awsKey"` + AWSSecret *string `json:"awsSecret"` + AWSToken *string `json:"awsToken"` + SQSQueueID *string `json:"sqsQueueID"` + S3BucketID *string `json:"s3BucketID"` + S3FolderPath *string `json:"s3FolderPath"` + NATSJetStream *bool `json:"natsJetStream"` + NATSSubject *string `json:"natsSubject"` + NATSJWTFile *string `json:"natsJWTFile"` + NATSSeedFile *string `json:"natsSeedFile"` + NATSCertificateAuthority *string `json:"natsCertificateAuthority"` + NATSClientCertificate *string `json:"natsClientCertificate"` + NATSClientKey *string `json:"natsClientKey"` + NATSJetStreamMaxWait *string `json:"natsJetStreamMaxWait"` + RPCCodec *string `json:"rpcCodec"` + ServiceMethod *string `json:"serviceMethod"` + KeyPath *string `json:"keyPath"` + CertPath *string `json:"certPath"` + CAPath *string `json:"caPath"` + TLS *bool `json:"tls"` + RPCConnTimeout *string `json:"rpcConnTimeout"` + RPCReplyTimeout *string `json:"rpcReplyTimeout"` +} + // EventExporterJsonCfg is the configuration of a single EventExporter type EventExporterJsonCfg struct { Id *string Type *string Export_path *string - Opts map[string]interface{} + Opts *EventExporterOptsJson Timezone *string Filters *[]string Flags *[]string @@ -355,6 +692,148 @@ type EventExporterJsonCfg struct { Fields *[]*FcTemplateJsonCfg } +func diffEventExporterOptsJsonCfg(d *EventExporterOptsJson, v1, v2 *EventExporterOpts) *EventExporterOptsJson { + if d == nil { + d = new(EventExporterOptsJson) + } + if v1.CSVFieldSeparator != v2.CSVFieldSeparator { + d.CSVFieldSeparator = utils.StringPointer(v2.CSVFieldSeparator) + } + if v1.ElsIndex != v2.ElsIndex { + d.ElsIndex = utils.StringPointer(v2.ElsIndex) + } + if v1.ElsIfPrimaryTerm != v2.ElsIfPrimaryTerm { + d.ElsIfPrimaryTerm = v2.ElsIfPrimaryTerm + } + if v1.ElsIfSeqNo != v2.ElsIfSeqNo { + d.ElsIfSeqNo = v2.ElsIfSeqNo + } + if v1.ElsOpType != v2.ElsOpType { + d.ElsOpType = utils.StringPointer(v2.ElsOpType) + } + if v1.ElsPipeline != v2.ElsPipeline { + d.ElsPipeline = utils.StringPointer(v2.ElsPipeline) + } + if v1.ElsRouting != v2.ElsRouting { + d.ElsRouting = utils.StringPointer(v2.ElsRouting) + } + if v1.ElsTimeout != v2.ElsTimeout { + d.ElsTimeout = utils.StringPointer(v2.ElsTimeout.String()) + } + if v1.ElsVersion != v2.ElsVersion { + d.ElsVersion = v2.ElsVersion + } + if v1.ElsVersionType != v2.ElsVersionType { + d.ElsVersionType = utils.StringPointer(v2.ElsVersionType) + } + if v1.ElsWaitForActiveShards != v2.ElsWaitForActiveShards { + d.ElsWaitForActiveShards = utils.StringPointer(v2.ElsWaitForActiveShards) + } + if v1.SQLMaxIdleConns != v2.SQLMaxIdleConns { + d.SQLMaxIdleConns = utils.IntPointer(v2.SQLMaxIdleConns) + } + if v1.SQLMaxOpenConns != v2.SQLMaxOpenConns { + d.SQLMaxOpenConns = utils.IntPointer(v2.SQLMaxOpenConns) + } + if v1.SQLConnMaxLifetime != v2.SQLConnMaxLifetime { + d.SQLConnMaxLifetime = utils.StringPointer(v2.SQLConnMaxLifetime.String()) + } + if v1.SQLTableName != v2.SQLTableName { + d.SQLTableName = utils.StringPointer(v2.SQLTableName) + } + if v1.SQLDBName != v2.SQLDBName { + d.SQLDBName = utils.StringPointer(v2.SQLDBName) + } + if v1.SSLMode != v2.SSLMode { + d.SSLMode = utils.StringPointer(v2.SSLMode) + } + if v1.KafkaTopic != v2.KafkaTopic { + d.KafkaTopic = utils.StringPointer(v2.KafkaTopic) + } + if v1.AMQPQueueID != v2.AMQPQueueID { + d.AMQPQueueID = utils.StringPointer(v2.AMQPQueueID) + } + if v1.AMQPRoutingKey != v2.AMQPRoutingKey { + d.AMQPRoutingKey = utils.StringPointer(v2.AMQPRoutingKey) + } + if v1.AMQPExchange != v2.AMQPExchange { + d.AMQPExchange = utils.StringPointer(v2.AMQPExchange) + } + if v1.AMQPExchangeType != v2.AMQPExchangeType { + d.AMQPExchangeType = utils.StringPointer(v2.AMQPExchangeType) + } + if v1.AWSRegion != v2.AWSRegion { + d.AWSRegion = utils.StringPointer(v2.AWSRegion) + } + if v1.AWSKey != v2.AWSKey { + d.AWSKey = utils.StringPointer(v2.AWSKey) + } + if v1.AWSSecret != v2.AWSSecret { + d.AWSSecret = utils.StringPointer(v2.AWSSecret) + } + if v1.AWSToken != v2.AWSToken { + d.AWSToken = utils.StringPointer(v2.AWSToken) + } + if v1.SQSQueueID != v2.SQSQueueID { + d.SQSQueueID = utils.StringPointer(v2.SQSQueueID) + } + if v1.S3BucketID != v2.S3BucketID { + d.S3BucketID = utils.StringPointer(v2.S3BucketID) + } + if v1.S3FolderPath != v2.S3FolderPath { + d.S3FolderPath = utils.StringPointer(v2.S3FolderPath) + } + if v1.NATSJetStream != v2.NATSJetStream { + d.NATSJetStream = utils.BoolPointer(v2.NATSJetStream) + } + if v1.NATSSubject != v2.NATSSubject { + d.NATSSubject = utils.StringPointer(v2.NATSSubject) + } + if v1.NATSJWTFile != v2.NATSJWTFile { + d.NATSJWTFile = utils.StringPointer(v2.NATSJWTFile) + } + if v1.NATSSeedFile != v2.NATSSeedFile { + d.NATSSeedFile = utils.StringPointer(v2.NATSSeedFile) + } + if v1.NATSCertificateAuthority != v2.NATSCertificateAuthority { + d.NATSCertificateAuthority = utils.StringPointer(v2.NATSCertificateAuthority) + } + if v1.NATSClientCertificate != v2.NATSClientCertificate { + d.NATSClientCertificate = utils.StringPointer(v2.NATSClientCertificate) + } + if v1.NATSClientKey != v2.NATSClientKey { + d.NATSClientKey = utils.StringPointer(v2.NATSClientKey) + } + if v1.NATSJetStreamMaxWait != v2.NATSJetStreamMaxWait { + d.NATSJetStreamMaxWait = utils.StringPointer(v2.NATSJetStreamMaxWait.String()) + } + if v1.RPCCodec != v2.RPCCodec { + d.RPCCodec = utils.StringPointer(v2.RPCCodec) + } + if v1.ServiceMethod != v2.ServiceMethod { + d.ServiceMethod = utils.StringPointer(v2.ServiceMethod) + } + if v1.KeyPath != v2.KeyPath { + d.KeyPath = utils.StringPointer(v2.KeyPath) + } + if v1.CertPath != v2.CertPath { + d.CertPath = utils.StringPointer(v2.CertPath) + } + if v1.CAPath != v2.CAPath { + d.CAPath = utils.StringPointer(v2.CAPath) + } + if v1.TLS != v2.TLS { + d.TLS = utils.BoolPointer(v2.TLS) + } + if v1.RPCConnTimeout != v2.RPCConnTimeout { + d.RPCConnTimeout = utils.StringPointer(v2.RPCConnTimeout.String()) + } + if v1.RPCReplyTimeout != v2.RPCReplyTimeout { + d.RPCReplyTimeout = utils.StringPointer(v2.RPCReplyTimeout.String()) + } + return d +} + func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg, separator string) *EventExporterJsonCfg { if d == nil { d = new(EventExporterJsonCfg) @@ -368,7 +847,7 @@ func diffEventExporterJsonCfg(d *EventExporterJsonCfg, v1, v2 *EventExporterCfg, if v1.ExportPath != v2.ExportPath { d.Export_path = utils.StringPointer(v2.ExportPath) } - d.Opts = diffMap(d.Opts, v1.Opts, v2.Opts) + d.Opts = diffEventExporterOptsJsonCfg(d.Opts, v1.Opts, v2.Opts) if v1.Timezone != v2.Timezone { d.Timezone = utils.StringPointer(v2.Timezone) }