add replicate interval and failed_dir config opts

This commit is contained in:
ionutboangiu
2025-04-03 19:53:01 +03:00
parent 10493ad9c0
commit 37925b8f59
6 changed files with 75 additions and 50 deletions

View File

@@ -99,6 +99,8 @@ const CGRATES_CFG_JSON = `
"replication_conns":[], // the conns the items are replicated
"replication_filtered": false, // if this is enabled the replication will be made only to the conns that received a get
"replication_cache": "", // the caching action that is executed on the replication_conns when the items are replicated
"replication_failed_dir": "", // directory for failed batch replications (used when interval > 0)
"replication_interval": "", // interval between batched replications (0 for immediate)
"items":{
"*accounts": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false},
"*reverse_destinations": {"limit": -1, "ttl": "", "static_ttl": false, "remote":false, "replicate":false},

View File

@@ -293,6 +293,8 @@ func TestDfDataDbJsonCfg(t *testing.T) {
Replication_filtered: utils.BoolPointer(false),
Remote_conn_id: utils.StringPointer(""),
Replication_cache: utils.StringPointer(""),
RplFailedDir: utils.StringPointer(""),
RplInterval: utils.StringPointer(""),
Opts: &DBOptsJson{
InternalDBDumpPath: utils.StringPointer("/var/lib/cgrates/internal_db/datadb"),
InternalDBBackupPath: utils.StringPointer("/var/lib/cgrates/internal_db/backup/datadb"),

File diff suppressed because one or more lines are too long

View File

@@ -56,19 +56,21 @@ type DataDBOpts struct {
// DataDbCfg Database config
type DataDbCfg struct {
Type string
Host string // The host to connect to. Values that start with / are for UNIX domain sockets.
Port string // The port to bind to.
Name string // The name of the database to connect to.
User string // The user to sign in as.
Password string // The user's password.
RmtConns []string // Remote DataDB connIDs
RmtConnID string
RplConns []string // Replication connIDs
RplFiltered bool
RplCache string
Items map[string]*ItemOpt
Opts *DataDBOpts
Type string
Host string // The host to connect to. Values that start with / are for UNIX domain sockets.
Port string // The port to bind to.
Name string // The name of the database to connect to.
User string // The user to sign in as.
Password string // The user's password.
RmtConns []string // Remote DataDB connIDs
RmtConnID string
RplConns []string // Replication connIDs
RplFiltered bool
RplCache string
RplFailedDir string
RplInterval time.Duration
Items map[string]*ItemOpt
Opts *DataDBOpts
}
func (dbOpts *DataDBOpts) loadFromJSONCfg(jsnCfg *DBOptsJson) (err error) {
@@ -241,6 +243,15 @@ func (dbcfg *DataDbCfg) loadFromJSONCfg(jsnDbCfg *DbJsonCfg) (err error) {
if jsnDbCfg.Replication_cache != nil {
dbcfg.RplCache = *jsnDbCfg.Replication_cache
}
if jsnDbCfg.RplFailedDir != nil {
dbcfg.RplFailedDir = *jsnDbCfg.RplFailedDir
}
if jsnDbCfg.RplInterval != nil {
dbcfg.RplInterval, err = utils.ParseDurationWithNanosecs(*jsnDbCfg.RplInterval)
if err != nil {
return
}
}
if jsnDbCfg.Opts != nil {
err = dbcfg.Opts.loadFromJSONCfg(jsnDbCfg.Opts)
}
@@ -278,17 +289,19 @@ func (dbOpts *DataDBOpts) Clone() *DataDBOpts {
// Clone returns the cloned object
func (dbcfg *DataDbCfg) Clone() (cln *DataDbCfg) {
cln = &DataDbCfg{
Type: dbcfg.Type,
Host: dbcfg.Host,
Port: dbcfg.Port,
Name: dbcfg.Name,
User: dbcfg.User,
Password: dbcfg.Password,
RplFiltered: dbcfg.RplFiltered,
RplCache: dbcfg.RplCache,
RmtConnID: dbcfg.RmtConnID,
Items: make(map[string]*ItemOpt),
Opts: dbcfg.Opts.Clone(),
Type: dbcfg.Type,
Host: dbcfg.Host,
Port: dbcfg.Port,
Name: dbcfg.Name,
User: dbcfg.User,
Password: dbcfg.Password,
RplFiltered: dbcfg.RplFiltered,
RplCache: dbcfg.RplCache,
RmtConnID: dbcfg.RmtConnID,
RplFailedDir: dbcfg.RplFailedDir,
RplInterval: dbcfg.RplInterval,
Items: make(map[string]*ItemOpt),
Opts: dbcfg.Opts.Clone(),
}
for k, itm := range dbcfg.Items {
cln.Items[k] = itm.Clone()
@@ -332,17 +345,19 @@ func (dbcfg *DataDbCfg) AsMapInterface() (mp map[string]any) {
utils.MongoConnSchemeCfg: dbcfg.Opts.MongoConnScheme,
}
mp = map[string]any{
utils.DataDbTypeCfg: dbcfg.Type,
utils.DataDbHostCfg: dbcfg.Host,
utils.DataDbNameCfg: dbcfg.Name,
utils.DataDbUserCfg: dbcfg.User,
utils.DataDbPassCfg: dbcfg.Password,
utils.RemoteConnsCfg: dbcfg.RmtConns,
utils.RemoteConnIDCfg: dbcfg.RmtConnID,
utils.ReplicationConnsCfg: dbcfg.RplConns,
utils.ReplicationFilteredCfg: dbcfg.RplFiltered,
utils.ReplicationCache: dbcfg.RplCache,
utils.OptsCfg: opts,
utils.DataDbTypeCfg: dbcfg.Type,
utils.DataDbHostCfg: dbcfg.Host,
utils.DataDbNameCfg: dbcfg.Name,
utils.DataDbUserCfg: dbcfg.User,
utils.DataDbPassCfg: dbcfg.Password,
utils.RemoteConnsCfg: dbcfg.RmtConns,
utils.RemoteConnIDCfg: dbcfg.RmtConnID,
utils.ReplicationConnsCfg: dbcfg.RplConns,
utils.ReplicationFilteredCfg: dbcfg.RplFiltered,
utils.ReplicationCache: dbcfg.RplCache,
utils.ReplicationFailedDirCfg: dbcfg.RplFailedDir,
utils.ReplicationIntervalCfg: dbcfg.RplInterval.String(),
utils.OptsCfg: opts,
}
if dbcfg.Items != nil {
items := make(map[string]any)

View File

@@ -158,6 +158,8 @@ type DbJsonCfg struct {
Replication_conns *[]string
Replication_filtered *bool
Replication_cache *string
RplFailedDir *string `json:"replication_failed_dir"`
RplInterval *string `json:"replication_interval"`
Items *map[string]*ItemOptJson
Opts *DBOptsJson
}

View File

@@ -2210,6 +2210,8 @@ const (
ReplicationFilteredCfg = "replication_filtered"
ReplicationCache = "replication_cache"
RemoteConnIDCfg = "remote_conn_id"
ReplicationFailedDirCfg = "replication_failed_dir"
ReplicationIntervalCfg = "replication_interval"
)
// ItemOpt