From a4896dbc32af8a64f5e8db3c4da8c0931edae943 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 5 Oct 2018 20:33:28 +0300 Subject: [PATCH] Added General config --- agents/asterisk_event.go | 7 +- agents/diamagent.go | 7 +- agents/fsevent.go | 21 +- agents/fsevent_test.go | 16 +- agents/httpagent.go | 3 +- agents/httpagent_it_test.go | 2 +- agents/kamevent.go | 17 +- agents/kamevent_test.go | 24 +- agents/radagent.go | 10 +- apier/v1/accounts.go | 9 +- apier/v1/apier.go | 59 ++-- apier/v1/attributes_it_test.go | 6 +- apier/v1/auth.go | 11 +- apier/v1/cdre.go | 18 +- apier/v1/cdrs.go | 4 +- apier/v1/costs.go | 6 +- apier/v1/debit.go | 9 +- apier/v1/filter_indexes_it_test.go | 4 +- apier/v1/filterindexecache_it_test.go | 4 +- apier/v1/lcr.go | 9 +- apier/v1/tp.go | 2 +- apier/v1/triggers.go | 18 +- apier/v2/apier.go | 14 +- apier/v2/apierv2_it_test.go | 2 +- apier/v2/cdre.go | 12 +- apier/v2/cdrs.go | 4 +- apier/v2/triggers.go | 6 +- cmd/cgr-engine/cgr-engine.go | 407 +++++++++++++++++--------- cmd/cgr-engine/rater.go | 73 +++-- cmd/cgr-loader/cgr-loader.go | 14 +- cmd/cgr-migrator/cgr-migrator.go | 12 +- cmd/cgr-tester/cgr-tester.go | 6 +- config/config.go | 124 ++------ config/config_test.go | 92 +++--- config/datadbcfg.go | 10 +- config/generalcfg.go | 136 +++++++++ config/generalcfg_test.go | 98 +++++++ config/multifiles_it_test.go | 8 +- engine/action.go | 40 ++- engine/attributes_test.go | 160 +++++----- engine/calldesc.go | 3 +- engine/cdr.go | 23 +- engine/cdrecsv_test.go | 85 +++--- engine/cdrefwv_test.go | 83 +++--- engine/cdrs.go | 40 +-- engine/chargers_test.go | 32 +- engine/datamanager_it_test.go | 4 +- engine/filterhelpers.go | 2 +- engine/filterhelpers_test.go | 20 +- engine/filterindexer.go | 6 +- engine/filterindexer_it_test.go | 4 +- engine/filters.go | 8 +- engine/fscdr.go | 27 +- engine/lcr.go | 4 +- engine/lcr_test.go | 246 ++++++++-------- engine/libtest.go | 4 +- engine/loader_it_test.go | 6 +- engine/mapevent_test.go | 18 +- engine/onstor_it_test.go | 4 +- engine/resources.go | 4 +- engine/resources_test.go | 68 ++--- engine/responder.go | 2 +- engine/safevent_test.go | 18 +- engine/statmetrics.go | 30 +- engine/stats.go | 10 +- engine/stats_test.go | 6 +- engine/suppliers.go | 3 +- engine/suppliers_test.go | 70 ++--- engine/suretax.go | 14 +- engine/thresholds_test.go | 6 +- engine/versions_it_test.go | 12 +- general_tests/cdrs_onlexp_it_test.go | 18 +- general_tests/sentinel_it_test.go | 2 +- migrator/accounts.go | 6 +- migrator/accounts2_it_test.go | 4 +- migrator/accounts_it_test.go | 4 +- migrator/action_it_test.go | 4 +- migrator/action_plan_it_test.go | 4 +- migrator/attributes.go | 2 +- migrator/attributes_it_test.go | 4 +- migrator/chargers.go | 2 +- migrator/filters.go | 2 +- migrator/resource.go | 2 +- migrator/sharedgroup_it_test.go | 4 +- migrator/stats.go | 16 +- migrator/stats_it_test.go | 15 +- migrator/stats_test.go | 11 +- migrator/suppliers.go | 2 +- migrator/thresholds.go | 32 +- migrator/thresholds_it_test.go | 6 +- migrator/thresholds_test.go | 9 +- sessions/sessions.go | 48 +-- 92 files changed, 1489 insertions(+), 1054 deletions(-) create mode 100644 config/generalcfg.go create mode 100644 config/generalcfg_test.go diff --git a/agents/asterisk_event.go b/agents/asterisk_event.go index da0989e82..185cf14f8 100644 --- a/agents/asterisk_event.go +++ b/agents/asterisk_event.go @@ -187,7 +187,8 @@ func (smaEv *SMAsteriskEvent) UpdateCGREvent(cgrEv *utils.CGREvent) error { if _, hasIt := resCGREv.Event[utils.AnswerTime]; !hasIt { resCGREv.Event[utils.Usage] = "0s" } else { - if aTime, err := utils.IfaceAsTime(resCGREv.Event[utils.AnswerTime], config.CgrConfig().DefaultTimezone); err != nil { + if aTime, err := utils.IfaceAsTime(resCGREv.Event[utils.AnswerTime], + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return err } else if aTime.IsZero() { resCGREv.Event[utils.Usage] = "0s" @@ -251,7 +252,7 @@ func (smaEv *SMAsteriskEvent) AsCGREvent(timezone string) (cgrEv *utils.CGREvent } cgrEv = &utils.CGREvent{ Tenant: utils.FirstNonEmpty(smaEv.Tenant(), - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &setupTime, Event: smaEv.AsMapStringInterface(), @@ -260,7 +261,7 @@ func (smaEv *SMAsteriskEvent) AsCGREvent(timezone string) (cgrEv *utils.CGREvent } func (smaEv *SMAsteriskEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { - cgrEv, err := smaEv.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := smaEv.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } diff --git a/agents/diamagent.go b/agents/diamagent.go index ef4b16e89..ef1250884 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -124,8 +124,9 @@ func (da *DiameterAgent) handleMessage(c diam.Conn, m *diam.Message) { lclProcessed, err = da.processRequest(reqProcessor, newAgentRequest( newDADataProvider(m), reqVars, rply, - reqProcessor.Tenant, da.cgrCfg.DefaultTenant, - utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone), + reqProcessor.Tenant, da.cgrCfg.GeneralCfg().DefaultTenant, + utils.FirstNonEmpty(reqProcessor.Timezone, + config.CgrConfig().GeneralCfg().DefaultTimezone), da.filterS)) if lclProcessed { processed = lclProcessed @@ -184,7 +185,7 @@ func (da *DiameterAgent) handleMessage(c diam.Conn, m *diam.Message) { newBranch = true } if err := messageSetAVPsWithPath(a, itm.Path, - itmStr, newBranch, da.cgrCfg.DefaultTimezone); err != nil { + itmStr, newBranch, da.cgrCfg.GeneralCfg().DefaultTimezone); err != nil { utils.Logger.Warning( fmt.Sprintf("<%s> error: %s setting reply item: %s for message: %s", utils.DiameterAgent, err.Error(), utils.ToJSON(itm), m)) diff --git a/agents/fsevent.go b/agents/fsevent.go index 67a84beac..71cf7dc7f 100644 --- a/agents/fsevent.go +++ b/agents/fsevent.go @@ -124,7 +124,8 @@ func (fsev FSEvent) GetDestination(fieldName string) string { if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value return fieldName[len(utils.STATIC_VALUE_PREFIX):] } - return utils.FirstNonEmpty(fsev[fieldName], fsev[DESTINATION], fsev[CALL_DEST_NR], fsev[SIP_REQ_USER]) + return utils.FirstNonEmpty(fsev[fieldName], fsev[DESTINATION], + fsev[CALL_DEST_NR], fsev[SIP_REQ_USER]) } // Original dialed destination number, useful in case of unpark @@ -138,7 +139,8 @@ func (fsev FSEvent) GetCategory(fieldName string) string { if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value return fieldName[len(utils.STATIC_VALUE_PREFIX):] } - return utils.FirstNonEmpty(fsev[fieldName], fsev[CATEGORY], config.CgrConfig().DefaultCategory) + return utils.FirstNonEmpty(fsev[fieldName], fsev[CATEGORY], + config.CgrConfig().GeneralCfg().DefaultCategory) } func (fsev FSEvent) GetUUID() string { @@ -153,7 +155,8 @@ func (fsev FSEvent) GetTenant(fieldName string) string { if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value return fieldName[len(utils.STATIC_VALUE_PREFIX):] } - return utils.FirstNonEmpty(fsev[fieldName], fsev[CSTMID], config.CgrConfig().DefaultTenant) + return utils.FirstNonEmpty(fsev[fieldName], fsev[CSTMID], + config.CgrConfig().GeneralCfg().DefaultTenant) } func (fsev FSEvent) GetReqType(fieldName string) string { @@ -166,7 +169,8 @@ func (fsev FSEvent) GetReqType(fieldName string) string { if strings.HasPrefix(fieldName, utils.STATIC_VALUE_PREFIX) { // Static value return fieldName[len(utils.STATIC_VALUE_PREFIX):] } - return utils.FirstNonEmpty(fsev[fieldName], fsev[REQTYPE], reqTypeDetected, config.CgrConfig().DefaultReqType) + return utils.FirstNonEmpty(fsev[fieldName], fsev[REQTYPE], + reqTypeDetected, config.CgrConfig().GeneralCfg().DefaultReqType) } func (fsev FSEvent) MissingParameter(timezone string) string { @@ -289,7 +293,8 @@ func (fsev FSEvent) GetOriginatorIP(fieldName string) string { func (fsev FSEvent) GetExtraFields() map[string]string { extraFields := make(map[string]string) for _, fldRule := range config.CgrConfig().FsAgentCfg().ExtraFields { - if parsed, err := fsev.ParseEventValue(fldRule, config.CgrConfig().DefaultTimezone); err != nil { + if parsed, err := fsev.ParseEventValue(fldRule, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { utils.Logger.Warning(fmt.Sprintf("<%s> error: %s parsing event rule: %+v", utils.FreeSWITCHAgent, err.Error(), fldRule)) } else { extraFields[fldRule.Id] = parsed @@ -396,7 +401,7 @@ func (fsev FSEvent) AsMapStringInterface(timezone string) map[string]interface{} // V1AuthorizeArgs returns the arguments used in SMGv1.Authorize func (fsev FSEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { - cgrEv, err := fsev.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := fsev.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } @@ -424,7 +429,7 @@ func (fsev FSEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { // V1InitSessionArgs returns the arguments used in SessionSv1.InitSession func (fsev FSEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { - cgrEv, err := fsev.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := fsev.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } @@ -446,7 +451,7 @@ func (fsev FSEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { // V1TerminateSessionArgs returns the arguments used in SMGv1.TerminateSession func (fsev FSEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionArgs) { - cgrEv, err := fsev.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := fsev.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } diff --git a/agents/fsevent_test.go b/agents/fsevent_test.go index 96de79ee8..edb7db944 100644 --- a/agents/fsevent_test.go +++ b/agents/fsevent_test.go @@ -560,7 +560,7 @@ func TestParseEventValue(t *testing.T) { } func TestFsEvAsCGREvent(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone ev := NewFSEvent(hangupEv) sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) if err != nil { @@ -617,9 +617,9 @@ func TestFsEvAsMapStringInterface(t *testing.T) { func TestFsEvGetExtraFields(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() cfg.FsAgentCfg().ExtraFields = []*utils.RSRField{ - &utils.RSRField{Id: "Channel-Read-Codec-Name"}, - &utils.RSRField{Id: "Channel-Write-Codec-Name"}, - &utils.RSRField{Id: "NonExistingHeader"}} + {Id: "Channel-Read-Codec-Name"}, + {Id: "Channel-Write-Codec-Name"}, + {Id: "NonExistingHeader"}} config.SetCgrConfig(cfg) ev := NewFSEvent(hangupEv) expectedExtraFields := map[string]string{ @@ -963,7 +963,7 @@ variable_rtp_audio_out_cng_packet_count: 0 variable_rtp_audio_rtcp_packet_count: 0 variable_rtp_audio_rtcp_octet_count: 0` var fsCdrCfg *config.CGRConfig - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone fsCdrCfg, _ = config.NewDefaultCGRConfig() fsCdr, _ := engine.NewFSCdr(body, fsCdrCfg) smGev := engine.NewSafEvent(NewFSEvent(hangUp).AsMapStringInterface(timezone)) @@ -979,7 +979,7 @@ variable_rtp_audio_rtcp_octet_count: 0` } func TestFsEvV1AuthorizeArgs(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone ev := NewFSEvent(hangupEv) sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) if err != nil { @@ -1022,7 +1022,7 @@ func TestFsEvV1AuthorizeArgs(t *testing.T) { } func TestFsEvV1InitSessionArgs(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone ev := NewFSEvent(hangupEv) sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) if err != nil { @@ -1052,7 +1052,7 @@ func TestFsEvV1InitSessionArgs(t *testing.T) { } func TestFsEvV1TerminateSessionArgs(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone ev := NewFSEvent(hangupEv) sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) if err != nil { diff --git a/agents/httpagent.go b/agents/httpagent.go index ef273e5c5..a6870849d 100644 --- a/agents/httpagent.go +++ b/agents/httpagent.go @@ -61,7 +61,8 @@ func (ha *HTTPAgent) ServeHTTP(w http.ResponseWriter, req *http.Request) { for _, reqProcessor := range ha.reqProcessors { agReq := newAgentRequest(dcdr, nil, nil, reqProcessor.Tenant, ha.dfltTenant, - utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone), + utils.FirstNonEmpty(reqProcessor.Timezone, + config.CgrConfig().GeneralCfg().DefaultTimezone), ha.filterS) lclProcessed, err := ha.processRequest(reqProcessor, agReq) if err != nil { diff --git a/agents/httpagent_it_test.go b/agents/httpagent_it_test.go index b2bc47702..137d8a2e4 100644 --- a/agents/httpagent_it_test.go +++ b/agents/httpagent_it_test.go @@ -130,7 +130,7 @@ func TestHAitAuth1001(t *testing.T) { if body, err := ioutil.ReadAll(rply.Body); err != nil { t.Error(err) } else if !reflect.DeepEqual(eXml, body) { - t.Errorf("expecting: <%s>, received: <%s>", string(eXml), string(body)) + t.Errorf("expecting: %s, received: %s", string(eXml), string(body)) } rply.Body.Close() time.Sleep(time.Millisecond) diff --git a/agents/kamevent.go b/agents/kamevent.go index ba872deb7..5a1f6f45c 100644 --- a/agents/kamevent.go +++ b/agents/kamevent.go @@ -142,9 +142,12 @@ func (kev KamEvent) AsCDR(timezone string) (cdr *engine.CDR) { cdr.OriginID = kev[utils.OriginID] cdr.OriginHost = kev[utils.OriginHost] cdr.Source = "KamailioEvent" - cdr.RequestType = utils.FirstNonEmpty(kev[utils.RequestType], config.CgrConfig().DefaultReqType) - cdr.Tenant = utils.FirstNonEmpty(kev[utils.Tenant], config.CgrConfig().DefaultTenant) - cdr.Category = utils.FirstNonEmpty(kev[utils.Category], config.CgrConfig().DefaultCategory) + cdr.RequestType = utils.FirstNonEmpty(kev[utils.RequestType], + config.CgrConfig().GeneralCfg().DefaultReqType) + cdr.Tenant = utils.FirstNonEmpty(kev[utils.Tenant], + config.CgrConfig().GeneralCfg().DefaultTenant) + cdr.Category = utils.FirstNonEmpty(kev[utils.Category], + config.CgrConfig().GeneralCfg().DefaultCategory) cdr.Account = kev[utils.Account] cdr.Subject = kev[utils.Subject] cdr.Destination = kev[utils.Destination] @@ -182,7 +185,7 @@ func (kev KamEvent) AsCGREvent(timezone string) (cgrEv *utils.CGREvent, err erro } cgrEv = &utils.CGREvent{ Tenant: utils.FirstNonEmpty(kev[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Event: kev.AsMapStringInterface(), @@ -200,7 +203,7 @@ func (kev KamEvent) String() string { } func (kev KamEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { - cgrEv, err := kev.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := kev.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } @@ -268,7 +271,7 @@ func (kev KamEvent) AsKamAuthReply(authArgs *sessions.V1AuthorizeArgs, // V1InitSessionArgs returns the arguments used in SessionSv1.InitSession func (kev KamEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { - cgrEv, err := kev.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := kev.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } @@ -290,7 +293,7 @@ func (kev KamEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { // V1TerminateSessionArgs returns the arguments used in SMGv1.TerminateSession func (kev KamEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionArgs) { - cgrEv, err := kev.AsCGREvent(config.CgrConfig().DefaultTimezone) + cgrEv, err := kev.AsCGREvent(config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return } diff --git a/agents/kamevent_test.go b/agents/kamevent_test.go index be6d1de84..35b0d47f8 100644 --- a/agents/kamevent_test.go +++ b/agents/kamevent_test.go @@ -103,7 +103,7 @@ func TestKamEvAsMapStringInterface(t *testing.T) { } func TestKamEvAsCDR(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone expMp := make(map[string]string) expMp["cgr_account"] = "1001" expMp["cgr_duration"] = "3" @@ -136,7 +136,7 @@ func TestKamEvAsCDR(t *testing.T) { } func TestKamEvAsCGREvent(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone kamEv := KamEvent{"event": "CGR_CALL_END", "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", "from_tag": "bf71ad59", "to_tag": "7351fecf", @@ -152,7 +152,7 @@ func TestKamEvAsCGREvent(t *testing.T) { } expected := &utils.CGREvent{ Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Context: utils.StringPointer("account_profile"), @@ -170,7 +170,7 @@ func TestKamEvAsCGREvent(t *testing.T) { } func TestKamEvV1AuthorizeArgs(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone kamEv := KamEvent{"event": "CGR_CALL_END", "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", "from_tag": "bf71ad59", "to_tag": "7351fecf", @@ -188,7 +188,7 @@ func TestKamEvV1AuthorizeArgs(t *testing.T) { GetMaxUsage: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Event: kamEv.AsMapStringInterface(), @@ -220,7 +220,7 @@ func TestKamEvV1AuthorizeArgs(t *testing.T) { } func TestKamEvAsKamAuthReply(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone kamEv := KamEvent{"event": "CGR_CALL_END", "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", "from_tag": "bf71ad59", "to_tag": "7351fecf", @@ -237,7 +237,7 @@ func TestKamEvAsKamAuthReply(t *testing.T) { GetMaxUsage: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Event: kamEv.AsMapStringInterface(), @@ -262,7 +262,7 @@ func TestKamEvAsKamAuthReply(t *testing.T) { GetAttributes: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Event: kamEv.AsMapStringInterface(), @@ -297,7 +297,7 @@ func TestKamEvAsKamAuthReply(t *testing.T) { } func TestKamEvV1InitSessionArgs(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone kamEv := KamEvent{"event": "CGR_CALL_END", "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", "from_tag": "bf71ad59", "to_tag": "7351fecf", @@ -314,7 +314,7 @@ func TestKamEvV1InitSessionArgs(t *testing.T) { InitSession: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Event: kamEv.AsMapStringInterface(), @@ -335,7 +335,7 @@ func TestKamEvV1InitSessionArgs(t *testing.T) { } func TestKamEvV1TerminateSessionArgs(t *testing.T) { - timezone := config.CgrConfig().DefaultTimezone + timezone := config.CgrConfig().GeneralCfg().DefaultTimezone kamEv := KamEvent{"event": "CGR_CALL_END", "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", "from_tag": "bf71ad59", "to_tag": "7351fecf", @@ -352,7 +352,7 @@ func TestKamEvV1TerminateSessionArgs(t *testing.T) { TerminateSession: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], - config.CgrConfig().DefaultTenant), + config.CgrConfig().GeneralCfg().DefaultTenant), ID: utils.UUIDSha1Prefix(), Time: &sTime, Event: kamEv.AsMapStringInterface(), diff --git a/agents/radagent.go b/agents/radagent.go index 9d79b8a2e..3b728e9f7 100644 --- a/agents/radagent.go +++ b/agents/radagent.go @@ -84,8 +84,9 @@ func (ra *RadiusAgent) handleAuth(req *radigo.Packet) (rpl *radigo.Packet, err e var processed bool for _, reqProcessor := range ra.cgrCfg.RadiusAgentCfg().RequestProcessors { agReq := newAgentRequest(dcdr, nil, nil, - reqProcessor.Tenant, ra.cgrCfg.DefaultTenant, - utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone), + reqProcessor.Tenant, ra.cgrCfg.GeneralCfg().DefaultTenant, + utils.FirstNonEmpty(reqProcessor.Timezone, + config.CgrConfig().GeneralCfg().DefaultTimezone), ra.filterS) agReq.Vars.Set([]string{MetaRadReqType}, utils.StringToInterface(MetaRadAuth), true) var lclProcessed bool @@ -125,8 +126,9 @@ func (ra *RadiusAgent) handleAcct(req *radigo.Packet) (rpl *radigo.Packet, err e var processed bool for _, reqProcessor := range ra.cgrCfg.RadiusAgentCfg().RequestProcessors { agReq := newAgentRequest(dcdr, nil, nil, - reqProcessor.Tenant, ra.cgrCfg.DefaultTenant, - utils.FirstNonEmpty(reqProcessor.Timezone, config.CgrConfig().DefaultTimezone), + reqProcessor.Tenant, ra.cgrCfg.GeneralCfg().DefaultTenant, + utils.FirstNonEmpty(reqProcessor.Timezone, + config.CgrConfig().GeneralCfg().DefaultTimezone), ra.filterS) var lclProcessed bool if lclProcessed, err = ra.processRequest(reqProcessor, agReq, rpl); lclProcessed { diff --git a/apier/v1/accounts.go b/apier/v1/accounts.go index 1490b53df..9e1a8c3e4 100644 --- a/apier/v1/accounts.go +++ b/apier/v1/accounts.go @@ -436,7 +436,8 @@ func (self *ApierV1) modifyBalance(aType string, attr *AttrAddBalance, reply *st } var expTime *time.Time if attr.ExpiryTime != nil { - expTimeVal, err := utils.ParseTimeDetectLayout(*attr.ExpiryTime, self.Config.DefaultTimezone) + expTimeVal, err := utils.ParseTimeDetectLayout(*attr.ExpiryTime, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { *reply = err.Error() return err @@ -510,7 +511,8 @@ func (self *ApierV1) SetBalance(attr *utils.AttrSetBalance, reply *string) error } var expTime *time.Time if attr.ExpiryTime != nil { - expTimeVal, err := utils.ParseTimeDetectLayout(*attr.ExpiryTime, self.Config.DefaultTimezone) + expTimeVal, err := utils.ParseTimeDetectLayout(*attr.ExpiryTime, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { *reply = err.Error() return err @@ -580,7 +582,8 @@ func (self *ApierV1) RemoveBalances(attr *utils.AttrSetBalance, reply *string) e } var expTime *time.Time if attr.ExpiryTime != nil { - expTimeVal, err := utils.ParseTimeDetectLayout(*attr.ExpiryTime, self.Config.DefaultTimezone) + expTimeVal, err := utils.ParseTimeDetectLayout(*attr.ExpiryTime, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { *reply = err.Error() return err diff --git a/apier/v1/apier.go b/apier/v1/apier.go index ba77a6d1c..5130357c2 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -202,7 +202,8 @@ func (self *ApierV1) LoadDestination(attrs AttrLoadDestination, reply *string) e if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if loaded, err := dbReader.LoadDestinationsFiltered(attrs.ID); err != nil { return utils.NewErrServerError(err) } else if !loaded { @@ -220,7 +221,8 @@ func (self *ApierV1) LoadDerivedChargers(attrs utils.TPDerivedChargers, reply *s if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadDerivedChargersFiltered(&attrs, true); err != nil { return utils.NewErrServerError(err) } @@ -241,7 +243,8 @@ func (self *ApierV1) LoadRatingPlan(attrs AttrLoadRatingPlan, reply *string) err if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if loaded, err := dbReader.LoadRatingPlansFiltered(attrs.RatingPlanId); err != nil { return utils.NewErrServerError(err) } else if !loaded { @@ -256,7 +259,8 @@ func (self *ApierV1) LoadRatingProfile(attrs utils.TPRatingProfile, reply *strin if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadRatingProfilesFiltered(&attrs); err != nil { return utils.NewErrServerError(err) } @@ -274,7 +278,8 @@ func (self *ApierV1) LoadSharedGroup(attrs AttrLoadSharedGroup, reply *string) e if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadSharedGroupsFiltered(attrs.SharedGroupId, true); err != nil { return utils.NewErrServerError(err) } @@ -292,7 +297,8 @@ func (self *ApierV1) LoadCdrStats(attrs AttrLoadCdrStats, reply *string) error { if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadCdrStatsFiltered(attrs.CdrStatsId, true); err != nil { return utils.NewErrServerError(err) } @@ -312,7 +318,8 @@ func (self *ApierV1) LoadTariffPlanFromStorDb(attrs AttrLoadTpFromStorDb, reply if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadAll(); err != nil { return utils.NewErrServerError(err) } @@ -425,17 +432,23 @@ func (self *ApierV1) SetRatingProfile(attrs utils.AttrSetRatingProfile, reply *s rpfl = &engine.RatingProfile{Id: keyId, RatingPlanActivations: make(engine.RatingPlanActivations, 0)} } for _, ra := range attrs.RatingPlanActivations { - at, err := utils.ParseTimeDetectLayout(ra.ActivationTime, self.Config.DefaultTimezone) + at, err := utils.ParseTimeDetectLayout(ra.ActivationTime, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { return fmt.Errorf(fmt.Sprintf("%s:Cannot parse activation time from %v", utils.ErrServerError.Error(), ra.ActivationTime)) } - if exists, err := self.DataManager.HasData(utils.RATING_PLAN_PREFIX, ra.RatingPlanId, ""); err != nil { + if exists, err := self.DataManager.HasData(utils.RATING_PLAN_PREFIX, + ra.RatingPlanId, ""); err != nil { return utils.NewErrServerError(err) } else if !exists { return fmt.Errorf(fmt.Sprintf("%s:RatingPlanId:%s", utils.ErrNotFound.Error(), ra.RatingPlanId)) } - rpfl.RatingPlanActivations = append(rpfl.RatingPlanActivations, &engine.RatingPlanActivation{ActivationTime: at, RatingPlanId: ra.RatingPlanId, - FallbackKeys: utils.FallbackSubjKeys(tpRpf.Direction, tpRpf.Tenant, tpRpf.Category, ra.FallbackSubjects)}) + rpfl.RatingPlanActivations = append(rpfl.RatingPlanActivations, + &engine.RatingPlanActivation{ + ActivationTime: at, + RatingPlanId: ra.RatingPlanId, + FallbackKeys: utils.FallbackSubjKeys(tpRpf.Direction, + tpRpf.Tenant, tpRpf.Category, ra.FallbackSubjects)}) } if err := self.DataManager.SetRatingProfile(rpfl, utils.NonTransactional); err != nil { return utils.NewErrServerError(err) @@ -700,7 +713,8 @@ func (self *ApierV1) LoadAccountActions(attrs utils.TPAccountActions, reply *str if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if _, err := guardian.Guardian.Guard(func() (interface{}, error) { if err := dbReader.LoadAccountActionsFiltered(&attrs); err != nil { return 0, err @@ -1866,7 +1880,7 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, path.Join(attrs.FolderPath, utils.SuppliersCsv), path.Join(attrs.FolderPath, utils.AttributesCsv), path.Join(attrs.FolderPath, utils.ChargersCsv), - ), "", self.Config.DefaultTimezone) + ), "", self.Config.GeneralCfg().DefaultTimezone) if err := loader.LoadAll(); err != nil { return utils.NewErrServerError(err) } @@ -2109,7 +2123,7 @@ type ArgsReplyFailedPosts struct { // ReplayFailedPosts will repost failed requests found in the FailedRequestsInDir func (v1 *ApierV1) ReplayFailedPosts(args ArgsReplyFailedPosts, reply *string) (err error) { - failedReqsInDir := v1.Config.FailedPostsDir + failedReqsInDir := v1.Config.GeneralCfg().FailedPostsDir if args.FailedRequestsInDir != nil && *args.FailedRequestsInDir != "" { failedReqsInDir = *args.FailedRequestsInDir } @@ -2151,7 +2165,7 @@ func (v1 *ApierV1) ReplayFailedPosts(args ArgsReplyFailedPosts, reply *string) ( return 0, err } return 0, nil - }, v1.Config.LockingTimeout, utils.FileLockPrefix+filePath) + }, v1.Config.GeneralCfg().LockingTimeout, utils.FileLockPrefix+filePath) if err != nil { return utils.NewErrServerError(err) } @@ -2161,16 +2175,19 @@ func (v1 *ApierV1) ReplayFailedPosts(args ArgsReplyFailedPosts, reply *string) ( } switch ffn.Transport { case utils.MetaHTTPjsonCDR, utils.MetaHTTPjsonMap, utils.MetaHTTPjson, utils.META_HTTP_POST: - _, err = engine.NewHTTPPoster(v1.Config.HttpSkipTlsVerify, - v1.Config.ReplyTimeout).Post(ffn.Address, utils.PosterTransportContentTypes[ffn.Transport], fileContent, - v1.Config.PosterAttempts, failoverPath) + _, err = engine.NewHTTPPoster(v1.Config.GeneralCfg().HttpSkipTlsVerify, + v1.Config.GeneralCfg().ReplyTimeout).Post(ffn.Address, + utils.PosterTransportContentTypes[ffn.Transport], fileContent, + v1.Config.GeneralCfg().PosterAttempts, failoverPath) case utils.MetaAMQPjsonCDR, utils.MetaAMQPjsonMap: var amqpPoster *engine.AMQPPoster - amqpPoster, err = engine.AMQPPostersCache.GetAMQPPoster(ffn.Address, v1.Config.PosterAttempts, failedReqsOutDir) + amqpPoster, err = engine.AMQPPostersCache.GetAMQPPoster(ffn.Address, + v1.Config.GeneralCfg().PosterAttempts, failedReqsOutDir) if err == nil { // error will be checked bellow var chn *amqp.Channel chn, err = amqpPoster.Post( - nil, utils.PosterTransportContentTypes[ffn.Transport], fileContent, file.Name()) + nil, utils.PosterTransportContentTypes[ffn.Transport], + fileContent, file.Name()) if chn != nil { chn.Close() } @@ -2192,7 +2209,7 @@ func (v1 *ApierV1) ReplayFailedPosts(args ArgsReplyFailedPosts, reply *string) ( return 0, err } return 0, nil - }, v1.Config.LockingTimeout, utils.FileLockPrefix+failoverPath) + }, v1.Config.GeneralCfg().LockingTimeout, utils.FileLockPrefix+failoverPath) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v1/attributes_it_test.go b/apier/v1/attributes_it_test.go index 0d7d7c261..dfefbf14d 100644 --- a/apier/v1/attributes_it_test.go +++ b/apier/v1/attributes_it_test.go @@ -560,7 +560,7 @@ func testAttributeSProcessEventWithNoneSubstitute3(t *testing.T) { func testAttributeSProcessEventWithHeader(t *testing.T) { attrPrf1 := &engine.AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_Header", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -587,7 +587,7 @@ func testAttributeSProcessEventWithHeader(t *testing.T) { attrArgs := &engine.AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(1), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "HeaderEventForAttribute", Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -599,7 +599,7 @@ func testAttributeSProcessEventWithHeader(t *testing.T) { MatchedProfiles: []string{"ATTR_Header"}, AlteredFields: []string{"Field2"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "HeaderEventForAttribute", Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ diff --git a/apier/v1/auth.go b/apier/v1/auth.go index 91048c644..07df9c89b 100644 --- a/apier/v1/auth.go +++ b/apier/v1/auth.go @@ -36,13 +36,13 @@ func (self *ApierV1) GetMaxUsage(usageRecord engine.UsageRecord, maxUsage *float usageRecord.ToR = utils.VOICE } if usageRecord.RequestType == "" { - usageRecord.RequestType = self.Config.DefaultReqType + usageRecord.RequestType = self.Config.GeneralCfg().DefaultReqType } if usageRecord.Tenant == "" { - usageRecord.Tenant = self.Config.DefaultTenant + usageRecord.Tenant = self.Config.GeneralCfg().DefaultTenant } if usageRecord.Category == "" { - usageRecord.Category = self.Config.DefaultCategory + usageRecord.Category = self.Config.GeneralCfg().DefaultCategory } if usageRecord.Subject == "" { usageRecord.Subject = usageRecord.Account @@ -51,9 +51,10 @@ func (self *ApierV1) GetMaxUsage(usageRecord engine.UsageRecord, maxUsage *float usageRecord.SetupTime = utils.META_NOW } if usageRecord.Usage == "" { - usageRecord.Usage = strconv.FormatFloat(self.Config.MaxCallDuration.Seconds(), 'f', -1, 64) + usageRecord.Usage = strconv.FormatFloat( + self.Config.MaxCallDuration.Seconds(), 'f', -1, 64) } - storedCdr, err := usageRecord.AsCDR(self.Config.DefaultTimezone) + storedCdr, err := usageRecord.AsCDR(self.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v1/cdre.go b/apier/v1/cdre.go index 74f34c854..87aaf066b 100644 --- a/apier/v1/cdre.go +++ b/apier/v1/cdre.go @@ -150,7 +150,7 @@ func (self *ApierV1) ExportCdrsToFile(attr utils.AttrExpFileCdrs, reply *utils.E if attr.CostMultiplyFactor != nil && *attr.CostMultiplyFactor != 0.0 { costMultiplyFactor = *attr.CostMultiplyFactor } - cdrsFltr, err := attr.AsCDRsFilter(self.Config.DefaultTimezone) + cdrsFltr, err := attr.AsCDRsFilter(self.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } @@ -161,9 +161,11 @@ func (self *ApierV1) ExportCdrsToFile(attr utils.AttrExpFileCdrs, reply *utils.E *reply = utils.ExportedFileCdrs{ExportedFilePath: ""} return nil } - cdrexp, err := engine.NewCDRExporter(cdrs, exportTemplate, exportFormat, filePath, utils.META_NONE, exportID, - exportTemplate.Synchronous, exportTemplate.Attempts, fieldSep, usageMultiplyFactor, - costMultiplyFactor, self.Config.RoundingDecimals, self.Config.HttpSkipTlsVerify, self.HTTPPoster, self.FilterS) + cdrexp, err := engine.NewCDRExporter(cdrs, exportTemplate, exportFormat, + filePath, utils.META_NONE, exportID, exportTemplate.Synchronous, + exportTemplate.Attempts, fieldSep, usageMultiplyFactor, costMultiplyFactor, + self.Config.GeneralCfg().RoundingDecimals, + self.Config.GeneralCfg().HttpSkipTlsVerify, self.HTTPPoster, self.FilterS) if err != nil { return utils.NewErrServerError(err) } @@ -299,11 +301,11 @@ func (self *ApierV1) ExportCDRs(arg ArgExportCDRs, reply *RplExportedCDRs) (err if arg.CostMultiplyFactor != nil && *arg.CostMultiplyFactor != 0.0 { costMultiplyFactor = *arg.CostMultiplyFactor } - roundingDecimals := self.Config.RoundingDecimals + roundingDecimals := self.Config.GeneralCfg().RoundingDecimals if arg.RoundingDecimals != nil { roundingDecimals = *arg.RoundingDecimals } - cdrsFltr, err := arg.RPCCDRsFilter.AsCDRsFilter(self.Config.DefaultTimezone) + cdrsFltr, err := arg.RPCCDRsFilter.AsCDRsFilter(self.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } @@ -316,7 +318,9 @@ func (self *ApierV1) ExportCDRs(arg ArgExportCDRs, reply *RplExportedCDRs) (err cdrexp, err := engine.NewCDRExporter(cdrs, exportTemplate, exportFormat, filePath, utils.META_NONE, exportID, synchronous, attempts, fieldSep, usageMultiplyFactor, - costMultiplyFactor, roundingDecimals, self.Config.HttpSkipTlsVerify, self.HTTPPoster, self.FilterS) + costMultiplyFactor, roundingDecimals, + self.Config.GeneralCfg().HttpSkipTlsVerify, + self.HTTPPoster, self.FilterS) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v1/cdrs.go b/apier/v1/cdrs.go index 1b0171694..c3d563c38 100644 --- a/apier/v1/cdrs.go +++ b/apier/v1/cdrs.go @@ -47,7 +47,7 @@ func (apier *ApierV1) GetCallCostLog(attrs utils.AttrGetCallCost, reply *engine. // Retrieves CDRs based on the filters func (apier *ApierV1) GetCdrs(attrs utils.AttrGetCdrs, reply *[]*engine.ExternalCDR) error { - cdrsFltr, err := attrs.AsCDRsFilter(apier.Config.DefaultTimezone) + cdrsFltr, err := attrs.AsCDRsFilter(apier.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } @@ -77,7 +77,7 @@ func (apier *ApierV1) RemCdrs(attrs utils.AttrRemCdrs, reply *string) error { // New way of removing CDRs func (apier *ApierV1) RemoveCDRs(attrs utils.RPCCDRsFilter, reply *string) error { - cdrsFilter, err := attrs.AsCDRsFilter(apier.Config.DefaultTimezone) + cdrsFilter, err := attrs.AsCDRsFilter(apier.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v1/costs.go b/apier/v1/costs.go index 42f246ceb..7728ddc07 100644 --- a/apier/v1/costs.go +++ b/apier/v1/costs.go @@ -39,7 +39,8 @@ func (apier *ApierV1) GetCost(attrs AttrGetCost, ec *engine.EventCost) error { if err != nil { return err } - aTime, err := utils.ParseTimeDetectLayout(attrs.AnswerTime, apier.Config.DefaultTimezone) + aTime, err := utils.ParseTimeDetectLayout(attrs.AnswerTime, + apier.Config.GeneralCfg().DefaultTimezone) if err != nil { return err } @@ -72,7 +73,8 @@ type AttrGetDataCost struct { } func (apier *ApierV1) GetDataCost(attrs AttrGetDataCost, reply *engine.DataCost) error { - aTime, err := utils.ParseTimeDetectLayout(attrs.AnswerTime, apier.Config.DefaultTimezone) + aTime, err := utils.ParseTimeDetectLayout(attrs.AnswerTime, + apier.Config.GeneralCfg().DefaultTimezone) if err != nil { return err } diff --git a/apier/v1/debit.go b/apier/v1/debit.go index 82f454e48..db09f699e 100644 --- a/apier/v1/debit.go +++ b/apier/v1/debit.go @@ -57,13 +57,13 @@ func (apier *ApierV1) DebitUsageWithOptions(args AttrDebitUsageWithOptions, repl usageRecord.ToR = utils.VOICE } if usageRecord.RequestType == "" { - usageRecord.RequestType = apier.Config.DefaultReqType + usageRecord.RequestType = apier.Config.GeneralCfg().DefaultReqType } if usageRecord.Tenant == "" { - usageRecord.Tenant = apier.Config.DefaultTenant + usageRecord.Tenant = apier.Config.GeneralCfg().DefaultTenant } if usageRecord.Category == "" { - usageRecord.Category = apier.Config.DefaultCategory + usageRecord.Category = apier.Config.GeneralCfg().DefaultCategory } if usageRecord.Subject == "" { usageRecord.Subject = usageRecord.Account @@ -73,7 +73,8 @@ func (apier *ApierV1) DebitUsageWithOptions(args AttrDebitUsageWithOptions, repl } // Get the call descriptor from the usage record - cd, err := usageRecord.AsCallDescriptor(apier.Config.DefaultTimezone, !args.AllowNegativeAccount) + cd, err := usageRecord.AsCallDescriptor(apier.Config.GeneralCfg().DefaultTimezone, + !args.AllowNegativeAccount) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v1/filter_indexes_it_test.go b/apier/v1/filter_indexes_it_test.go index 17d74faa8..ebda8403a 100644 --- a/apier/v1/filter_indexes_it_test.go +++ b/apier/v1/filter_indexes_it_test.go @@ -96,8 +96,8 @@ func TestFIdxV1ITMySQL(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() rdsITdb, err = engine.NewRedisStorage( fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), - 10, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, - nil, "") + 10, cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + utils.REDIS_MAX_CONNS, nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) diff --git a/apier/v1/filterindexecache_it_test.go b/apier/v1/filterindexecache_it_test.go index 264ce0fca..38f0e72f0 100644 --- a/apier/v1/filterindexecache_it_test.go +++ b/apier/v1/filterindexecache_it_test.go @@ -85,8 +85,8 @@ func TestFIdxCaV1ITMySQL(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() rdsITdb, err := engine.NewRedisStorage( fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), - 10, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, - nil, "") + 10, cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + utils.REDIS_MAX_CONNS, nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } diff --git a/apier/v1/lcr.go b/apier/v1/lcr.go index 665bd4fe0..09015bc3d 100644 --- a/apier/v1/lcr.go +++ b/apier/v1/lcr.go @@ -27,12 +27,15 @@ import ( // Computes the LCR for a specific request emulating a call func (self *ApierV1) GetLcr(lcrReq engine.LcrRequest, lcrReply *engine.LcrReply) error { - cd, err := lcrReq.AsCallDescriptor(self.Config.DefaultTimezone) + cd, err := lcrReq.AsCallDescriptor(self.Config.GeneralCfg().DefaultTimezone) if err != nil { return err } var lcrQried engine.LCRCost - if err := self.Responder.GetLCR(&engine.AttrGetLcr{CallDescriptor: cd, LCRFilter: lcrReq.LCRFilter, Paginator: lcrReq.Paginator}, &lcrQried); err != nil { + if err := self.Responder.GetLCR(&engine.AttrGetLcr{ + CallDescriptor: cd, + LCRFilter: lcrReq.LCRFilter, + Paginator: lcrReq.Paginator}, &lcrQried); err != nil { return utils.NewErrServerError(err) } if lcrQried.Entry == nil { @@ -60,7 +63,7 @@ func (self *ApierV1) GetLcr(lcrReq engine.LcrRequest, lcrReply *engine.LcrReply) // Computes the LCR for a specific request emulating a call, returns a comma separated list of suppliers func (self *ApierV1) GetLcrSuppliers(lcrReq engine.LcrRequest, suppliers *string) (err error) { - cd, err := lcrReq.AsCallDescriptor(self.Config.DefaultTimezone) + cd, err := lcrReq.AsCallDescriptor(self.Config.GeneralCfg().DefaultTimezone) if err != nil { return err } diff --git a/apier/v1/tp.go b/apier/v1/tp.go index 9c9b856a0..d797ab4be 100644 --- a/apier/v1/tp.go +++ b/apier/v1/tp.go @@ -119,7 +119,7 @@ func (self *ApierV1) ExportTPToFolder(attrs utils.AttrDirExportTP, exported *uti if attrs.TPid == nil || *attrs.TPid == "" { return utils.NewErrMandatoryIeMissing("TPid") } - dir := self.Config.TpExportPath + dir := self.Config.GeneralCfg().TpExportPath if attrs.ExportPath != nil { dir = *attrs.ExportPath } diff --git a/apier/v1/triggers.go b/apier/v1/triggers.go index f749c4a35..29d9e8a6a 100644 --- a/apier/v1/triggers.go +++ b/apier/v1/triggers.go @@ -56,7 +56,8 @@ func (self *ApierV1) AddAccountActionTriggers(attr AttrAddAccountActionTriggers, if missing := utils.MissingStructFields(&attr, []string{"Tenant", "Account"}); len(missing) != 0 { return utils.NewErrMandatoryIeMissing(missing...) } - actTime, err := utils.ParseTimeDetectLayout(attr.ActivationDate, self.Config.DefaultTimezone) + actTime, err := utils.ParseTimeDetectLayout(attr.ActivationDate, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { *reply = err.Error() return err @@ -261,14 +262,16 @@ func (self *ApierV1) SetAccountActionTriggers(attr AttrSetAccountActionTriggers, at.MinSleep = minSleep } if attr.ExpirationDate != nil { - expTime, err := utils.ParseTimeDetectLayout(*attr.ExpirationDate, self.Config.DefaultTimezone) + expTime, err := utils.ParseTimeDetectLayout(*attr.ExpirationDate, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { return 0, err } at.ExpirationDate = expTime } if attr.ActivationDate != nil { - actTime, err := utils.ParseTimeDetectLayout(*attr.ActivationDate, self.Config.DefaultTimezone) + actTime, err := utils.ParseTimeDetectLayout(*attr.ActivationDate, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { return 0, err } @@ -451,7 +454,8 @@ func (self *ApierV1) SetActionTrigger(attr AttrSetActionTrigger, reply *string) newAtr.MinSleep = minSleep } if attr.ExpirationDate != nil { - expTime, err := utils.ParseTimeDetectLayout(*attr.ExpirationDate, self.Config.DefaultTimezone) + expTime, err := utils.ParseTimeDetectLayout(*attr.ExpirationDate, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { *reply = err.Error() return err @@ -459,7 +463,8 @@ func (self *ApierV1) SetActionTrigger(attr AttrSetActionTrigger, reply *string) newAtr.ExpirationDate = expTime } if attr.ActivationDate != nil { - actTime, err := utils.ParseTimeDetectLayout(*attr.ActivationDate, self.Config.DefaultTimezone) + actTime, err := utils.ParseTimeDetectLayout(*attr.ActivationDate, + self.Config.GeneralCfg().DefaultTimezone) if err != nil { *reply = err.Error() return err @@ -604,7 +609,8 @@ func (self *ApierV1) AddTriggeredAction(attr AttrAddActionTrigger, reply *string if attr.BalanceWeight != 0.0 { at.Balance.Weight = utils.Float64Pointer(attr.BalanceWeight) } - if balExpiryTime, err := utils.ParseTimeDetectLayout(attr.BalanceExpiryTime, self.Config.DefaultTimezone); err != nil { + if balExpiryTime, err := utils.ParseTimeDetectLayout(attr.BalanceExpiryTime, + self.Config.GeneralCfg().DefaultTimezone); err != nil { return utils.NewErrServerError(err) } else { at.Balance.ExpirationDate = &balExpiryTime diff --git a/apier/v2/apier.go b/apier/v2/apier.go index ae9d535e2..48e45c2d7 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -48,7 +48,8 @@ func (self *ApierV2) LoadRatingProfile(attrs AttrLoadRatingProfile, reply *strin return utils.NewErrMandatoryIeMissing("TPid") } tpRpf := &utils.TPRatingProfile{TPid: attrs.TPid} - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadRatingProfilesFiltered(tpRpf); err != nil { return utils.NewErrServerError(err) } @@ -66,7 +67,8 @@ func (self *ApierV2) LoadAccountActions(attrs AttrLoadAccountActions, reply *str if len(attrs.TPid) == 0 { return utils.NewErrMandatoryIeMissing("TPid") } - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) tpAa := &utils.TPAccountActions{TPid: attrs.TPid} tpAa.SetAccountActionsId(attrs.AccountActionsId) if _, err := guardian.Guardian.Guard(func() (interface{}, error) { @@ -97,11 +99,13 @@ func (self *ApierV2) LoadDerivedChargers(attrs AttrLoadDerivedChargers, reply *s } tpDc := &utils.TPDerivedChargers{TPid: attrs.TPid} tpDc.SetDerivedChargersId(attrs.DerivedChargersId) - dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, attrs.TPid, self.Config.DefaultTimezone) + dbReader := engine.NewTpReader(self.DataManager.DataDB(), self.StorDb, + attrs.TPid, self.Config.GeneralCfg().DefaultTimezone) if err := dbReader.LoadDerivedChargersFiltered(tpDc, true); err != nil { return utils.NewErrServerError(err) } - if err := self.DataManager.CacheDataFromDB(utils.DERIVEDCHARGERS_PREFIX, []string{attrs.DerivedChargersId}, true); err != nil { + if err := self.DataManager.CacheDataFromDB(utils.DERIVEDCHARGERS_PREFIX, + []string{attrs.DerivedChargersId}, true); err != nil { return utils.NewErrServerError(err) } *reply = v1.OK @@ -145,7 +149,7 @@ func (self *ApierV2) LoadTariffPlanFromFolder(attrs utils.AttrLoadTpFromFolder, path.Join(attrs.FolderPath, utils.SuppliersCsv), path.Join(attrs.FolderPath, utils.AttributesCsv), path.Join(attrs.FolderPath, utils.ChargersCsv), - ), "", self.Config.DefaultTimezone) + ), "", self.Config.GeneralCfg().DefaultTimezone) if err := loader.LoadAll(); err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v2/apierv2_it_test.go b/apier/v2/apierv2_it_test.go index 4859452f6..89bbcca0e 100644 --- a/apier/v2/apierv2_it_test.go +++ b/apier/v2/apierv2_it_test.go @@ -71,7 +71,7 @@ func TestApierV2itConnectDataDB(t *testing.T) { rdsDb, _ := strconv.Atoi(apierCfg.DataDbCfg().DataDbName) if rdsITdb, err := engine.NewRedisStorage( fmt.Sprintf("%s:%s", apierCfg.DataDbCfg().DataDbHost, apierCfg.DataDbCfg().DataDbPort), - rdsDb, apierCfg.DataDbCfg().DataDbPass, apierCfg.DBDataEncoding, + rdsDb, apierCfg.DataDbCfg().DataDbPass, apierCfg.GeneralCfg().DBDataEncoding, utils.REDIS_MAX_CONNS, nil, ""); err != nil { t.Fatal("Could not connect to Redis", err.Error()) } else { diff --git a/apier/v2/cdre.go b/apier/v2/cdre.go index 7ce7dff57..44f025650 100644 --- a/apier/v2/cdre.go +++ b/apier/v2/cdre.go @@ -123,7 +123,7 @@ func (self *ApierV2) ExportCdrsToFile(attr AttrExportCdrsToFile, reply *Exported if attr.CostMultiplyFactor != nil && *attr.CostMultiplyFactor != 0.0 { costMultiplyFactor = *attr.CostMultiplyFactor } - cdrsFltr, err := attr.RPCCDRsFilter.AsCDRsFilter(self.Config.DefaultTimezone) + cdrsFltr, err := attr.RPCCDRsFilter.AsCDRsFilter(self.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } @@ -134,13 +134,15 @@ func (self *ApierV2) ExportCdrsToFile(attr AttrExportCdrsToFile, reply *Exported *reply = ExportedFileCdrs{ExportedFilePath: ""} return nil } - roundingDecimals := self.Config.RoundingDecimals + roundingDecimals := self.Config.GeneralCfg().RoundingDecimals if attr.RoundingDecimals != nil { roundingDecimals = *attr.RoundingDecimals } - cdrexp, err := engine.NewCDRExporter(cdrs, exportTemplate, exportFormat, filePath, utils.META_NONE, exportID, - exportTemplate.Synchronous, exportTemplate.Attempts, fieldSep, usageMultiplyFactor, - costMultiplyFactor, roundingDecimals, self.Config.HttpSkipTlsVerify, self.HTTPPoster, self.FilterS) + cdrexp, err := engine.NewCDRExporter(cdrs, exportTemplate, exportFormat, + filePath, utils.META_NONE, exportID, exportTemplate.Synchronous, + exportTemplate.Attempts, fieldSep, usageMultiplyFactor, costMultiplyFactor, + roundingDecimals, self.Config.GeneralCfg().HttpSkipTlsVerify, + self.HTTPPoster, self.FilterS) if err != nil { return utils.NewErrServerError(err) } diff --git a/apier/v2/cdrs.go b/apier/v2/cdrs.go index 56a0755f5..130aaa39e 100644 --- a/apier/v2/cdrs.go +++ b/apier/v2/cdrs.go @@ -27,7 +27,7 @@ import ( // Retrieves CDRs based on the filters func (apier *ApierV2) GetCdrs(attrs utils.RPCCDRsFilter, reply *[]*engine.ExternalCDR) error { - cdrsFltr, err := attrs.AsCDRsFilter(apier.Config.DefaultTimezone) + cdrsFltr, err := attrs.AsCDRsFilter(apier.Config.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } @@ -47,7 +47,7 @@ func (apier *ApierV2) GetCdrs(attrs utils.RPCCDRsFilter, reply *[]*engine.Extern } func (apier *ApierV2) CountCdrs(attrs utils.RPCCDRsFilter, reply *int64) error { - cdrsFltr, err := attrs.AsCDRsFilter(apier.Config.DefaultTimezone) + cdrsFltr, err := attrs.AsCDRsFilter(apier.Config.GeneralCfg().DefaultTimezone) if err != nil { if err.Error() != utils.NotFoundCaps { err = utils.NewErrServerError(err) diff --git a/apier/v2/triggers.go b/apier/v2/triggers.go index 5a93919de..3fa279ab3 100644 --- a/apier/v2/triggers.go +++ b/apier/v2/triggers.go @@ -169,7 +169,8 @@ func (self *ApierV2) SetAccountActionTriggers(attr AttrSetAccountActionTriggers, } var foundOne bool for _, at := range account.ActionTriggers { - if updated, err := attr.UpdateActionTrigger(at, self.Config.DefaultTimezone); err != nil { + if updated, err := attr.UpdateActionTrigger(at, + self.Config.GeneralCfg().DefaultTimezone); err != nil { return 0, err } else if updated && !foundOne { foundOne = true @@ -177,7 +178,8 @@ func (self *ApierV2) SetAccountActionTriggers(attr AttrSetAccountActionTriggers, } if !foundOne { // Did not find one to update, create a new AT at := new(engine.ActionTrigger) - if updated, err := attr.UpdateActionTrigger(at, self.Config.DefaultTimezone); err != nil { + if updated, err := attr.UpdateActionTrigger(at, + self.Config.GeneralCfg().DefaultTimezone); err != nil { return 0, err } else if updated { // Adding a new AT account.ActionTriggers = append(account.ActionTriggers, at) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 91d5b651f..665f1f708 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -98,8 +98,9 @@ func startCdrcs(internalCdrSChan, internalRaterChan chan rpcclient.RpcClientConn } } if len(enabledCfgs) != 0 { - go startCdrc(internalCdrSChan, internalRaterChan, enabledCfgs, cfg.HttpSkipTlsVerify, - cdrcChildrenChan, exitChan, filterSChan) + go startCdrc(internalCdrSChan, internalRaterChan, enabledCfgs, + cfg.GeneralCfg().HttpSkipTlsVerify, cdrcChildrenChan, + exitChan, filterSChan) } else { utils.Logger.Info(" No enabled CDRC clients") } @@ -117,16 +118,19 @@ func startCdrc(internalCdrSChan, internalRaterChan chan rpcclient.RpcClientConne for _, cdrcCfg = range cdrcCfgs { // Take the first config out, does not matter which one break } - cdrsConn, err := engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cdrcCfg.CdrsConns, internalCdrSChan, cfg.InternalTtl) + cdrsConn, err := engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, + cfg.TLSClientCerificate, cfg.GeneralCfg().ConnectAttempts, + cfg.GeneralCfg().Reconnects, cfg.GeneralCfg().ConnectTimeout, + cfg.GeneralCfg().ReplyTimeout, cdrcCfg.CdrsConns, internalCdrSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to CDRS via RPC: %s", err.Error())) exitChan <- true return } - cdrc, err := cdrc.NewCdrc(cdrcCfgs, httpSkipTlsCheck, cdrsConn, - closeChan, cfg.DefaultTimezone, cfg.RoundingDecimals, filterS) + cdrc, err := cdrc.NewCdrc(cdrcCfgs, httpSkipTlsCheck, cdrsConn, closeChan, + cfg.GeneralCfg().DefaultTimezone, cfg.GeneralCfg().RoundingDecimals, + filterS) if err != nil { utils.Logger.Crit(fmt.Sprintf("Cdrc config parsing error: %s", err.Error())) exitChan <- true @@ -146,94 +150,129 @@ func startSessionS(internalSMGChan, internalRaterChan, internalResourceSChan, in var err error var ralsConns, resSConns, threshSConns, statSConns, suplSConns, attrSConns, cdrsConn, chargerSConn *rpcclient.RpcClientPool if len(cfg.SessionSCfg().ChargerSConns) != 0 { - chargerSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().ChargerSConns, internalChargerSChan, cfg.InternalTtl) + chargerSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().ChargerSConns, internalChargerSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", utils.SessionS, utils.ChargerS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", + utils.SessionS, utils.ChargerS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().RALsConns) != 0 { - ralsConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().RALsConns, internalRaterChan, cfg.InternalTtl) + ralsConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().RALsConns, internalRaterChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to RALs: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to RALs: %s", + utils.SessionS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().ResSConns) != 0 { - resSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().ResSConns, internalResourceSChan, cfg.InternalTtl) + resSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().ResSConns, internalResourceSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ResourceS: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ResourceS: %s", + utils.SessionS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().ThreshSConns) != 0 { - threshSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().ThreshSConns, internalThresholdSChan, cfg.InternalTtl) + threshSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().ThreshSConns, internalThresholdSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ThresholdS: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ThresholdS: %s", + utils.SessionS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().StatSConns) != 0 { - statSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().StatSConns, internalStatSChan, cfg.InternalTtl) + statSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().StatSConns, internalStatSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to StatS: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to StatS: %s", + utils.SessionS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().SupplSConns) != 0 { - suplSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().SupplSConns, internalSupplierSChan, cfg.InternalTtl) + suplSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().SupplSConns, internalSupplierSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to SupplierS: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to SupplierS: %s", + utils.SessionS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().AttrSConns) != 0 { - attrSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().AttrSConns, internalAttrSChan, cfg.InternalTtl) + attrSConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().AttrSConns, internalAttrSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to AttributeS: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to AttributeS: %s", + utils.SessionS, err.Error())) exitChan <- true return } } if len(cfg.SessionSCfg().CDRsConns) != 0 { - cdrsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SessionSCfg().CDRsConns, internalCDRSChan, cfg.InternalTtl) + cdrsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SessionSCfg().CDRsConns, internalCDRSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to RALs: %s", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to RALs: %s", + utils.SessionS, err.Error())) exitChan <- true return } } smgReplConns, err := sessions.NewSessionReplicationConns(cfg.SessionSCfg().SessionReplicationConns, - cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout) + cfg.GeneralCfg().Reconnects, cfg.GeneralCfg().ConnectTimeout, + cfg.GeneralCfg().ReplyTimeout) if err != nil { - utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to SMGReplicationConnection error: <%s>", utils.SessionS, err.Error())) + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to SMGReplicationConnection error: <%s>", + utils.SessionS, err.Error())) exitChan <- true return } - sm := sessions.NewSMGeneric(cfg, ralsConns, resSConns, threshSConns, statSConns, - suplSConns, attrSConns, cdrsConn, chargerSConn, smgReplConns, cfg.DefaultTimezone) + sm := sessions.NewSMGeneric(cfg, ralsConns, resSConns, threshSConns, + statSConns, suplSConns, attrSConns, cdrsConn, chargerSConn, + smgReplConns, cfg.GeneralCfg().DefaultTimezone) if err = sm.Connect(); err != nil { utils.Logger.Err(fmt.Sprintf("<%s> error: %s!", utils.SessionS, err)) } @@ -286,9 +325,12 @@ func startDiameterAgent(internalSMGChan chan rpcclient.RpcClientConnection, filterSChan <- filterS var smgConn *rpcclient.RpcClientPool if len(cfg.DiameterAgentCfg().SessionSConns) != 0 { - smgConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DiameterAgentCfg().SessionSConns, internalSMGChan, cfg.InternalTtl) + smgConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DiameterAgentCfg().SessionSConns, internalSMGChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", utils.DiameterAgent, utils.SessionS, err.Error())) @@ -316,9 +358,12 @@ func startRadiusAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitCh var err error var smgConn *rpcclient.RpcClientPool if len(cfg.RadiusAgentCfg().SessionSConns) != 0 { - smgConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RadiusAgentCfg().SessionSConns, internalSMGChan, cfg.InternalTtl) + smgConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RadiusAgentCfg().SessionSConns, internalSMGChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to SMG: %s", err.Error())) exitChan <- true @@ -343,7 +388,7 @@ func startFsAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitChan c smgRpcConn := <-internalSMGChan internalSMGChan <- smgRpcConn birpcClnt := utils.NewBiRPCInternalClient(smgRpcConn.(*sessions.SMGeneric)) - sm := agents.NewFSsessions(cfg.FsAgentCfg(), birpcClnt, cfg.DefaultTimezone) + sm := agents.NewFSsessions(cfg.FsAgentCfg(), birpcClnt, cfg.GeneralCfg().DefaultTimezone) var reply string if err = birpcClnt.Call(utils.SessionSv1RegisterInternalBiJSONConn, "", &reply); err != nil { // for session sync utils.Logger.Err(fmt.Sprintf("<%s> error: %s!", utils.FreeSWITCHAgent, err)) @@ -361,8 +406,8 @@ func startKamAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitChan smgRpcConn := <-internalSMGChan internalSMGChan <- smgRpcConn birpcClnt := utils.NewBiRPCInternalClient(smgRpcConn.(*sessions.SMGeneric)) - ka := agents.NewKamailioAgent(cfg.KamAgentCfg(), - birpcClnt, utils.FirstNonEmpty(cfg.KamAgentCfg().Timezone, cfg.DefaultTimezone)) + ka := agents.NewKamailioAgent(cfg.KamAgentCfg(), birpcClnt, + utils.FirstNonEmpty(cfg.KamAgentCfg().Timezone, cfg.GeneralCfg().DefaultTimezone)) var reply string if err = birpcClnt.Call(utils.SessionSv1RegisterInternalBiJSONConn, "", &reply); err != nil { // for session sync utils.Logger.Err(fmt.Sprintf("<%s> error: %s!", utils.KamailioAgent, err)) @@ -383,10 +428,12 @@ func startHTTPAgent(internalSMGChan chan rpcclient.RpcClientConnection, for _, agntCfg := range cfg.HttpAgentCfg() { var sSConn *rpcclient.RpcClientPool if len(agntCfg.SessionSConns) != 0 { - sSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, - cfg.TLSClientCerificate, cfg.ConnectAttempts, cfg.Reconnects, - cfg.ConnectTimeout, cfg.ReplyTimeout, - agntCfg.SessionSConns, internalSMGChan, cfg.InternalTtl) + sSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + agntCfg.SessionSConns, internalSMGChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> could not connect to %s, error: %s", utils.HTTPAgent, utils.SessionS, err.Error())) @@ -414,19 +461,26 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, var ralConn, pubSubConn, usersConn, attrSConn, aliasesConn, cdrstatsConn, thresholdSConn, statsConn, chargerSConn *rpcclient.RpcClientPool if len(cfg.CDRSChargerSConns) != 0 { // Conn pool towards RAL - chargerSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSChargerSConns, internalChargerSChan, cfg.InternalTtl) + chargerSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSChargerSConns, internalChargerSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { - utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", utils.ChargerS, err.Error())) + utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", + utils.ChargerS, err.Error())) exitChan <- true return } } if len(cfg.CDRSRaterConns) != 0 { // Conn pool towards RAL - ralConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSRaterConns, internalRaterChan, cfg.InternalTtl) + ralConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSRaterConns, internalRaterChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to RAL: %s", err.Error())) exitChan <- true @@ -434,9 +488,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSPubSubSConns) != 0 { // Pubsub connection init - pubSubConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSPubSubSConns, internalPubSubSChan, cfg.InternalTtl) + pubSubConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSPubSubSConns, internalPubSubSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to PubSubSystem: %s", err.Error())) exitChan <- true @@ -444,9 +501,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSAttributeSConns) != 0 { // Users connection init - attrSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSAttributeSConns, internalAttributeSChan, cfg.InternalTtl) + attrSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSAttributeSConns, internalAttributeSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to %s: %s", utils.AttributeS, err.Error())) @@ -455,9 +515,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSUserSConns) != 0 { // Users connection init - usersConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSUserSConns, internalUserSChan, cfg.InternalTtl) + usersConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSUserSConns, internalUserSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to UserS: %s", err.Error())) exitChan <- true @@ -465,9 +528,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSAliaseSConns) != 0 { // Aliases connection init - aliasesConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSAliaseSConns, internalAliaseSChan, cfg.InternalTtl) + aliasesConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSAliaseSConns, internalAliaseSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to AliaseS: %s", err.Error())) exitChan <- true @@ -475,9 +541,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSCDRStatSConns) != 0 { // Stats connection init - cdrstatsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSCDRStatSConns, internalCdrStatSChan, cfg.InternalTtl) + cdrstatsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSCDRStatSConns, internalCdrStatSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to CDRStatS: %s", err.Error())) exitChan <- true @@ -485,9 +554,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSThresholdSConns) != 0 { // Stats connection init - thresholdSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSThresholdSConns, internalThresholdSChan, cfg.InternalTtl) + thresholdSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSThresholdSConns, internalThresholdSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to ThresholdS: %s", err.Error())) exitChan <- true @@ -495,9 +567,12 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } if len(cfg.CDRSStatSConns) != 0 { // Stats connection init - statsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.CDRSStatSConns, internalStatSChan, cfg.InternalTtl) + statsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.CDRSStatSConns, internalStatSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to StatS: %s", err.Error())) exitChan <- true @@ -505,8 +580,9 @@ func startCDRS(internalCdrSChan chan rpcclient.RpcClientConnection, } } cdrServer, _ := engine.NewCdrServer(cfg, cdrDb, dm, ralConn, pubSubConn, - attrSConn, usersConn, aliasesConn, cdrstatsConn, thresholdSConn, statsConn, chargerSConn, filterS) - cdrServer.SetTimeToLive(cfg.ResponseCacheTTL, nil) + attrSConn, usersConn, aliasesConn, cdrstatsConn, + thresholdSConn, statsConn, chargerSConn, filterS) + cdrServer.SetTimeToLive(cfg.GeneralCfg().ResponseCacheTTL, nil) utils.Logger.Info("Registering CDRS HTTP Handlers.") cdrServer.RegisterHandlersToServer(server) utils.Logger.Info("Registering CDRS RPC service.") @@ -538,7 +614,7 @@ func startCdrStats(internalCdrStatSChan chan rpcclient.RpcClientConnection, dm * } func startPubSubServer(internalPubSubSChan chan rpcclient.RpcClientConnection, dm *engine.DataManager, server *utils.Server, exitChan chan bool) { - pubSubServer, err := engine.NewPubSub(dm, cfg.HttpSkipTlsVerify) + pubSubServer, err := engine.NewPubSub(dm, cfg.GeneralCfg().HttpSkipTlsVerify) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not start, error: %s", err.Error())) exitChan <- true @@ -620,9 +696,12 @@ func startChargerService(internalChargerSChan chan rpcclient.RpcClientConnection var attrSConn *rpcclient.RpcClientPool var err error if len(cfg.ChargerSCfg().AttributeSConns) != 0 { // AttributeS connection init - attrSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.ChargerSCfg().AttributeSConns, internalAttributeSChan, cfg.InternalTtl) + attrSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.ChargerSCfg().AttributeSConns, internalAttributeSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", utils.ChargerS, utils.AttributeS, err.Error())) @@ -661,9 +740,12 @@ func startResourceService(internalRsChan chan rpcclient.RpcClientConnection, cac filterS := <-filterSChan filterSChan <- filterS if len(cfg.ResourceSCfg().ThresholdSConns) != 0 { // Stats connection init - thdSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.ResourceSCfg().ThresholdSConns, internalThresholdSChan, cfg.InternalTtl) + thdSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.ResourceSCfg().ThresholdSConns, internalThresholdSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to ThresholdS: %s", err.Error())) exitChan <- true @@ -704,9 +786,12 @@ func startStatService(internalStatSChan chan rpcclient.RpcClientConnection, cach filterS := <-filterSChan filterSChan <- filterS if len(cfg.StatSCfg().ThresholdSConns) != 0 { // Stats connection init - thdSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.StatSCfg().ThresholdSConns, internalThresholdSChan, cfg.InternalTtl) + thdSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.StatSCfg().ThresholdSConns, internalThresholdSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to ThresholdS: %s", err.Error())) exitChan <- true @@ -778,9 +863,12 @@ func startSupplierService(internalSupplierSChan chan rpcclient.RpcClientConnecti filterSChan <- filterS var attrSConn, resourceSConn, statSConn *rpcclient.RpcClientPool if len(cfg.SupplierSCfg().AttributeSConns) != 0 { - attrSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SupplierSCfg().AttributeSConns, internalAttrSChan, cfg.InternalTtl) + attrSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SupplierSCfg().AttributeSConns, internalAttrSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", utils.SupplierS, utils.AttributeS, err.Error())) @@ -789,9 +877,12 @@ func startSupplierService(internalSupplierSChan chan rpcclient.RpcClientConnecti } } if len(cfg.SupplierSCfg().StatSConns) != 0 { - statSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, - cfg.ReplyTimeout, cfg.SupplierSCfg().StatSConns, internalStatSChan, cfg.InternalTtl) + statSConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SupplierSCfg().StatSConns, internalStatSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to StatS: %s", utils.SupplierS, err.Error())) @@ -801,7 +892,8 @@ func startSupplierService(internalSupplierSChan chan rpcclient.RpcClientConnecti } <-cacheS.GetPrecacheChannel(utils.CacheSupplierProfiles) - splS, err := engine.NewSupplierService(dm, cfg.DefaultTimezone, filterS, cfg.SupplierSCfg().StringIndexedFields, + splS, err := engine.NewSupplierService(dm, cfg.GeneralCfg().DefaultTimezone, + filterS, cfg.SupplierSCfg().StringIndexedFields, cfg.SupplierSCfg().PrefixIndexedFields, resourceSConn, statSConn, attrSConn) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not init, error: %s", @@ -836,7 +928,8 @@ func loaderService(cacheS *engine.CacheS, cfg *config.CGRConfig, dm *engine.DataManager, server *utils.Server, exitChan chan bool, filterSChan chan *engine.FilterS) { filterS := <-filterSChan filterSChan <- filterS - ldrS := loaders.NewLoaderService(dm, cfg.LoaderCfg(), cfg.DefaultTimezone, filterS) + ldrS := loaders.NewLoaderService(dm, cfg.LoaderCfg(), + cfg.GeneralCfg().DefaultTimezone, filterS) if !ldrS.Enabled() { return } @@ -855,9 +948,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc cfg.DispatcherSCfg().DispatchingStrategy = strings.TrimPrefix(cfg.DispatcherSCfg().DispatchingStrategy, utils.Meta) // remote * from DispatchingStrategy if len(cfg.DispatcherSCfg().RALsConns) != 0 { - ralsConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().RALsConns, internalRaterChan, cfg.InternalTtl) + ralsConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().RALsConns, internalRaterChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to RALs: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -865,9 +961,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().ResSConns) != 0 { - resSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().ResSConns, nil, cfg.InternalTtl) + resSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().ResSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ResoruceS: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -875,9 +974,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().ThreshSConns) != 0 { - threshSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().ThreshSConns, nil, cfg.InternalTtl) + threshSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().ThreshSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ThresholdS: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -885,9 +987,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().StatSConns) != 0 { - statSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().StatSConns, nil, cfg.InternalTtl) + statSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().StatSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to StatQueueS: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -895,9 +1000,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().SupplSConns) != 0 { - suplSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().SupplSConns, nil, cfg.InternalTtl) + suplSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().SupplSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to SupplierS: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -905,9 +1013,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().AttrSConns) != 0 { - attrSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().AttrSConns, nil, cfg.InternalTtl) + attrSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().AttrSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to AttributeS: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -915,9 +1026,12 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().SessionSConns) != 0 { - sessionsSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().SessionSConns, nil, cfg.InternalTtl) + sessionsSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().SessionSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to SessionS: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -925,17 +1039,20 @@ func startDispatcherService(internalDispatcherSChan, internalRaterChan chan rpcc } } if len(cfg.DispatcherSCfg().ChargerSConns) != 0 { - chargerSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.DispatcherSCfg().ChargerSConns, nil, cfg.InternalTtl) + chargerSConns, err = engine.NewRPCPool(cfg.DispatcherSCfg().DispatchingStrategy, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.DispatcherSCfg().ChargerSConns, nil, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to ChargerS: %s", utils.DispatcherS, err.Error())) exitChan <- true return } } - dspS, err := dispatcher.NewDispatcherService(dm, ralsConns, resSConns, threshSConns, statSConns, - suplSConns, attrSConns, sessionsSConns, chargerSConns) + dspS, err := dispatcher.NewDispatcherService(dm, ralsConns, resSConns, + threshSConns, statSConns, suplSConns, attrSConns, sessionsSConns, chargerSConns) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not init, error: %s", utils.DispatcherS, err.Error())) exitChan <- true @@ -1070,11 +1187,11 @@ func writePid() { // initLogger will initialize syslog writter, needs to be called after config init func initLogger(cfg *config.CGRConfig) error { - sylogger := cfg.Logger + sylogger := cfg.GeneralCfg().Logger if *syslogger != "" { // Modify the log level if provided by command arguments sylogger = *syslogger } - err := utils.Newlogger(sylogger, cfg.NodeID) + err := utils.Newlogger(sylogger, cfg.GeneralCfg().NodeID) if err != nil { return err } @@ -1084,9 +1201,12 @@ func initLogger(cfg *config.CGRConfig) error { func schedCDRsConns(internalCDRSChan chan rpcclient.RpcClientConnection, exitChan chan bool) { var err error var cdrsConn *rpcclient.RpcClientPool - cdrsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.SchedulerCfg().CDRsConns, internalCDRSChan, cfg.InternalTtl) + cdrsConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.SchedulerCfg().CDRsConns, internalCDRSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to CDRServer: %s", utils.SchedulerS, err.Error())) exitChan <- true @@ -1136,7 +1256,7 @@ func main() { return } if *nodeID != "" { - cfg.NodeID = *nodeID + cfg.GeneralCfg().NodeID = *nodeID } config.SetCgrConfig(cfg) // Share the config object @@ -1145,7 +1265,7 @@ func main() { log.Fatalf("Could not initialize syslog connection, err: <%s>", err.Error()) return } - lgLevel := cfg.LogLevel + lgLevel := cfg.GeneralCfg().LogLevel if *logLevel != -1 { // Modify the log level if provided by command arguments lgLevel = *logLevel } @@ -1160,7 +1280,7 @@ func main() { dm, err = engine.ConfigureDataStorage(cfg.DataDbCfg().DataDbType, cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, - cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, cfg.CacheCfg(), cfg.DataDbCfg().DataDbSentinelName) if err != nil { // Cannot configure getter database, show stopper utils.Logger.Crit(fmt.Sprintf("Could not configure dataDb: %s exiting!", err)) @@ -1177,7 +1297,7 @@ func main() { storDb, err := engine.ConfigureStorStorage(cfg.StorDbCfg().StorDBType, cfg.StorDbCfg().StorDBHost, cfg.StorDbCfg().StorDBPort, cfg.StorDbCfg().StorDBName, cfg.StorDbCfg().StorDBUser, - cfg.StorDbCfg().StorDBPass, cfg.DBDataEncoding, + cfg.StorDbCfg().StorDBPass, cfg.GeneralCfg().DBDataEncoding, cfg.StorDbCfg().StorDBMaxOpenConns, cfg.StorDbCfg().StorDBMaxIdleConns, cfg.StorDbCfg().StorDBConnMaxLifetime, cfg.StorDbCfg().StorDBCDRSIndexes) if err != nil { // Cannot configure logger database, show stopper @@ -1195,7 +1315,7 @@ func main() { } } // Done initing DBs - engine.SetRoundingDecimals(cfg.RoundingDecimals) + engine.SetRoundingDecimals(cfg.GeneralCfg().RoundingDecimals) engine.SetRpSubjectPrefixMatching(cfg.RpSubjectPrefixMatching) engine.SetLcrSubjectPrefixMatching(cfg.LcrSubjectPrefixMatching) stopHandled := false @@ -1305,7 +1425,8 @@ func main() { } if len(cfg.HttpAgentCfg()) != 0 { - go startHTTPAgent(internalSMGChan, exitChan, server, filterSChan, cfg.DefaultTenant) + go startHTTPAgent(internalSMGChan, exitChan, server, filterSChan, + cfg.GeneralCfg().DefaultTenant) } // Start PubSubS service @@ -1330,8 +1451,8 @@ func main() { cfg, dm, server, exitChan, filterSChan) } if cfg.ChargerSCfg().Enabled { - go startChargerService(internalChargerSChan, cacheS, internalAttributeSChan, - cfg, dm, server, exitChan, filterSChan) + go startChargerService(internalChargerSChan, cacheS, + internalAttributeSChan, cfg, dm, server, exitChan, filterSChan) } // Start RL service diff --git a/cmd/cgr-engine/rater.go b/cmd/cgr-engine/rater.go index a3f995ad3..1edc1b19e 100755 --- a/cmd/cgr-engine/rater.go +++ b/cmd/cgr-engine/rater.go @@ -65,9 +65,12 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en go func() { defer close(thdsTaskChan) var err error - thdS, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RALsThresholdSConns, internalThdSChan, cfg.InternalTtl) + thdS, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RALsThresholdSConns, internalThdSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to ThresholdS, error: %s", err.Error())) exitChan <- true @@ -83,9 +86,12 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en go func() { defer close(cdrstatTaskChan) var err error - cdrStats, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RALsCDRStatSConns, internalCdrStatSChan, cfg.InternalTtl) + cdrStats, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RALsCDRStatSConns, internalCdrStatSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to CDRStatS, error: %s", err.Error())) exitChan <- true @@ -101,9 +107,12 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en go func() { defer close(statsTaskChan) var err error - stats, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RALsStatSConns, internalStatSChan, cfg.InternalTtl) + stats, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RALsStatSConns, internalStatSChan, + cfg.GeneralCfg().InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to StatS, error: %s", err.Error())) exitChan <- true @@ -117,9 +126,12 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en waitTasks = append(waitTasks, pubsubTaskChan) go func() { defer close(pubsubTaskChan) - if pubSubSConns, err := engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RALsPubSubSConns, internalPubSubSChan, cfg.InternalTtl); err != nil { + if pubSubSConns, err := engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RALsPubSubSConns, internalPubSubSChan, + cfg.GeneralCfg().InternalTtl); err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to PubSubS: %s", err.Error())) exitChan <- true return @@ -134,9 +146,12 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en waitTasks = append(waitTasks, aliasesTaskChan) go func() { defer close(aliasesTaskChan) - if aliaseSCons, err := engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RALsAliasSConns, internalAliaseSChan, cfg.InternalTtl); err != nil { + if aliaseSCons, err := engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RALsAliasSConns, internalAliaseSChan, + cfg.GeneralCfg().InternalTtl); err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect to AliaseS, error: %s", err.Error())) exitChan <- true return @@ -153,9 +168,12 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en go func() { defer close(usersTaskChan) var err error - if usersConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.TLSClientKey, cfg.TLSClientCerificate, - cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, - cfg.RALsUserSConns, internalUserSChan, cfg.InternalTtl); err != nil { + if usersConns, err = engine.NewRPCPool(rpcclient.POOL_FIRST, + cfg.TLSClientKey, cfg.TLSClientCerificate, + cfg.GeneralCfg().ConnectAttempts, cfg.GeneralCfg().Reconnects, + cfg.GeneralCfg().ConnectTimeout, cfg.GeneralCfg().ReplyTimeout, + cfg.RALsUserSConns, internalUserSChan, + cfg.GeneralCfg().InternalTtl); err != nil { utils.Logger.Crit(fmt.Sprintf(" Could not connect UserS, error: %s", err.Error())) exitChan <- true return @@ -168,11 +186,20 @@ func startRater(internalRaterChan chan rpcclient.RpcClientConnection, cacheS *en for _, chn := range waitTasks { <-chn } - responder := &engine.Responder{ExitChan: exitChan, MaxComputedUsage: cfg.RALsMaxComputedUsage} - responder.SetTimeToLive(cfg.ResponseCacheTTL, nil) - apierRpcV1 := &v1.ApierV1{StorDb: loadDb, DataManager: dm, CdrDb: cdrDb, - Config: cfg, Responder: responder, ServManager: serviceManager, - HTTPPoster: engine.NewHTTPPoster(cfg.HttpSkipTlsVerify, cfg.ReplyTimeout), FilterS: filterS} + responder := &engine.Responder{ + ExitChan: exitChan, + MaxComputedUsage: cfg.RALsMaxComputedUsage} + responder.SetTimeToLive(cfg.GeneralCfg().ResponseCacheTTL, nil) + apierRpcV1 := &v1.ApierV1{ + StorDb: loadDb, + DataManager: dm, + CdrDb: cdrDb, + Config: cfg, + Responder: responder, + ServManager: serviceManager, + HTTPPoster: engine.NewHTTPPoster(cfg.GeneralCfg().HttpSkipTlsVerify, + cfg.GeneralCfg().ReplyTimeout), + FilterS: filterS} if thdS != nil { engine.SetThresholdS(thdS) // temporary architectural fix until we will have separate AccountS } diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index 4dd8f83bd..2b8c51fed 100755 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -49,7 +49,7 @@ var ( "The DataDb user to sign in as.") dataDBPasswd = flag.String("datadb_passwd", dfltCfg.DataDbCfg().DataDbPass, "The DataDb user's password.") - dbDataEncoding = flag.String("dbdata_encoding", dfltCfg.DBDataEncoding, + dbDataEncoding = flag.String("dbdata_encoding", dfltCfg.GeneralCfg().DBDataEncoding, "The encoding used to store object data in strings") dbRedisSentinel = flag.String("redis_sentinel", dfltCfg.DataDbCfg().DataDbSentinelName, "The name of redis sentinel") @@ -169,7 +169,7 @@ func main() { } if *dbDataEncoding != "" { - ldrCfg.DBDataEncoding = *dbDataEncoding + ldrCfg.GeneralCfg().DBDataEncoding = *dbDataEncoding } if *tpid != "" { @@ -205,8 +205,8 @@ func main() { *importID = utils.UUIDSha1Prefix() } - if *timezone != dfltCfg.DefaultTimezone { - ldrCfg.DefaultTimezone = *timezone + if *timezone != dfltCfg.GeneralCfg().DefaultTimezone { + ldrCfg.GeneralCfg().DefaultTimezone = *timezone } if *disableReverse != dfltCfg.LoaderCgrConfig.DisableReverse { @@ -217,7 +217,7 @@ func main() { if dm, err = engine.ConfigureDataStorage(ldrCfg.DataDbCfg().DataDbType, ldrCfg.DataDbCfg().DataDbHost, ldrCfg.DataDbCfg().DataDbPort, ldrCfg.DataDbCfg().DataDbName, ldrCfg.DataDbCfg().DataDbUser, - ldrCfg.DataDbCfg().DataDbPass, ldrCfg.DBDataEncoding, + ldrCfg.DataDbCfg().DataDbPass, ldrCfg.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), ldrCfg.DataDbCfg().DataDbSentinelName); err != nil { log.Fatalf("Coud not open dataDB connection: %s", err.Error()) } @@ -228,7 +228,7 @@ func main() { if storDb, err = engine.ConfigureLoadStorage(ldrCfg.StorDbCfg().StorDBType, ldrCfg.StorDbCfg().StorDBHost, ldrCfg.StorDbCfg().StorDBPort, ldrCfg.StorDbCfg().StorDBName, ldrCfg.StorDbCfg().StorDBUser, - ldrCfg.StorDbCfg().StorDBPass, ldrCfg.DBDataEncoding, + ldrCfg.StorDbCfg().StorDBPass, ldrCfg.GeneralCfg().DBDataEncoding, config.CgrConfig().StorDbCfg().StorDBMaxOpenConns, config.CgrConfig().StorDbCfg().StorDBMaxIdleConns, config.CgrConfig().StorDbCfg().StorDBConnMaxLifetime, @@ -295,7 +295,7 @@ func main() { } tpReader := engine.NewTpReader(dm.DataDB(), loader, - ldrCfg.LoaderCgrConfig.TpID, ldrCfg.DefaultTimezone) + ldrCfg.LoaderCgrConfig.TpID, ldrCfg.GeneralCfg().DefaultTimezone) if err = tpReader.LoadAll(); err != nil { log.Fatal(err) diff --git a/cmd/cgr-migrator/cgr-migrator.go b/cmd/cgr-migrator/cgr-migrator.go index 91d501465..40563d66f 100755 --- a/cmd/cgr-migrator/cgr-migrator.go +++ b/cmd/cgr-migrator/cgr-migrator.go @@ -54,7 +54,7 @@ var ( "the DataDB user") inDataDBPass = flag.String("datadb_passwd", dfltCfg.DataDbCfg().DataDbPass, "the DataDB password") - inDBDataEncoding = flag.String("dbdata_encoding", dfltCfg.DBDataEncoding, + inDBDataEncoding = flag.String("dbdata_encoding", dfltCfg.GeneralCfg().DBDataEncoding, "the encoding used to store object Data in strings") inDataDBRedisSentinel = flag.String("redis_sentinel", dfltCfg.DataDbCfg().DataDbSentinelName, "the name of redis sentinel") @@ -140,8 +140,8 @@ func main() { if *inDataDBPass != dfltCfg.DataDbCfg().DataDbPass { mgrCfg.DataDbCfg().DataDbPass = *inDataDBPass } - if *inDBDataEncoding != dfltCfg.DBDataEncoding { - mgrCfg.DBDataEncoding = *inDBDataEncoding + if *inDBDataEncoding != dfltCfg.GeneralCfg().DBDataEncoding { + mgrCfg.GeneralCfg().DBDataEncoding = *inDBDataEncoding } if *inDataDBRedisSentinel != dfltCfg.DataDbCfg().DataDbSentinelName { mgrCfg.DataDbCfg().DataDbSentinelName = *inDataDBRedisSentinel @@ -193,7 +193,7 @@ func main() { } if *outDBDataEncoding == utils.MetaDataDB { if dfltCfg.MigratorCgrConfig.OutDataDBEncoding == mgrCfg.MigratorCgrConfig.OutDataDBEncoding { - mgrCfg.MigratorCgrConfig.OutDataDBEncoding = mgrCfg.DBDataEncoding + mgrCfg.MigratorCgrConfig.OutDataDBEncoding = mgrCfg.GeneralCfg().DBDataEncoding } } else { mgrCfg.MigratorCgrConfig.OutDataDBEncoding = *outDBDataEncoding @@ -210,12 +210,12 @@ func main() { mgrCfg.MigratorCgrConfig.OutDataDBHost == mgrCfg.DataDbCfg().DataDbHost && mgrCfg.MigratorCgrConfig.OutDataDBPort == mgrCfg.DataDbCfg().DataDbPort && mgrCfg.MigratorCgrConfig.OutDataDBName == mgrCfg.DataDbCfg().DataDbName && - mgrCfg.MigratorCgrConfig.OutDataDBEncoding == mgrCfg.DBDataEncoding + mgrCfg.MigratorCgrConfig.OutDataDBEncoding == mgrCfg.GeneralCfg().DBDataEncoding if dmIN, err = migrator.NewMigratorDataDB(mgrCfg.DataDbCfg().DataDbType, mgrCfg.DataDbCfg().DataDbHost, mgrCfg.DataDbCfg().DataDbPort, mgrCfg.DataDbCfg().DataDbName, mgrCfg.DataDbCfg().DataDbUser, - mgrCfg.DataDbCfg().DataDbPass, mgrCfg.DBDataEncoding, + mgrCfg.DataDbCfg().DataDbPass, mgrCfg.GeneralCfg().DBDataEncoding, mgrCfg.CacheCfg(), mgrCfg.DataDbCfg().DataDbSentinelName); err != nil { log.Fatal(err) } diff --git a/cmd/cgr-tester/cgr-tester.go b/cmd/cgr-tester/cgr-tester.go index f62f50fbc..28c258303 100644 --- a/cmd/cgr-tester/cgr-tester.go +++ b/cmd/cgr-tester/cgr-tester.go @@ -51,7 +51,7 @@ var ( datadb_name = flag.String("datadb_name", cgrConfig.DataDbCfg().DataDbName, "The name/number of the DataDb to connect to.") datadb_user = flag.String("datadb_user", cgrConfig.DataDbCfg().DataDbUser, "The DataDb user to sign in as.") datadb_pass = flag.String("datadb_pass", cgrConfig.DataDbCfg().DataDbPass, "The DataDb user's password.") - dbdata_encoding = flag.String("dbdata_encoding", cgrConfig.DBDataEncoding, "The encoding used to store object data in strings.") + dbdata_encoding = flag.String("dbdata_encoding", cgrConfig.GeneralCfg().DBDataEncoding, "The encoding used to store object data in strings.") redis_sentinel = flag.String("redis_sentinel", cgrConfig.DataDbCfg().DataDbSentinelName, "The name of redis sentinel") raterAddress = flag.String("rater_address", "", "Rater address for remote tests. Empty for internal rater.") tor = flag.String("tor", utils.VOICE, "The type of record to use in queries.") @@ -73,7 +73,7 @@ func durInternalRater(cd *engine.CallDescriptor) (time.Duration, error) { dm, err := engine.ConfigureDataStorage(tstCfg.DataDbCfg().DataDbType, tstCfg.DataDbCfg().DataDbHost, tstCfg.DataDbCfg().DataDbPort, tstCfg.DataDbCfg().DataDbName, tstCfg.DataDbCfg().DataDbUser, - tstCfg.DataDbCfg().DataDbPass, tstCfg.DBDataEncoding, + tstCfg.DataDbCfg().DataDbPass, tstCfg.GeneralCfg().DBDataEncoding, cgrConfig.CacheCfg(), tstCfg.DataDbCfg().DataDbSentinelName) // for the momentn we use here "" for sentinelName if err != nil { return nilDuration, fmt.Errorf("Could not connect to data database: %s", err.Error()) @@ -186,7 +186,7 @@ func main() { tstCfg.DataDbCfg().DataDbPass = *datadb_pass } if *dbdata_encoding != "" { - tstCfg.DBDataEncoding = *dbdata_encoding + tstCfg.GeneralCfg().DBDataEncoding = *dbdata_encoding } if *redis_sentinel != "" { tstCfg.DataDbCfg().DataDbSentinelName = *redis_sentinel diff --git a/config/config.go b/config/config.go index 413622c48..96165c153 100755 --- a/config/config.go +++ b/config/config.go @@ -138,10 +138,13 @@ func SetCgrConfig(cfg *CGRConfig) { func NewDefaultCGRConfig() (*CGRConfig, error) { cfg := new(CGRConfig) cfg.RALsMaxComputedUsage = make(map[string]time.Duration) - cfg.NodeID = utils.UUIDSha1Prefix() cfg.DataFolderPath = "/usr/share/cgrates/" + cfg.generalCfg = new(GeneralCfg) cfg.dataDbCfg = new(DataDbCfg) cfg.storDbCfg = new(StorDbCfg) + + cfg.generalCfg.NodeID = utils.UUIDSha1Prefix() + cfg.sessionSCfg = new(SessionSCfg) cfg.cacheConfig = make(CacheConfig) cfg.fsAgentCfg = new(FsAgentConfig) @@ -251,8 +254,6 @@ func NewCGRConfigFromFolder(cfgDir string) (*CGRConfig, error) { // Holds system configuration, defaults are overwritten with values from config file if found type CGRConfig struct { - NodeID string // Identifier for this engine instance - DBDataEncoding string // The encoding used to store object data in strings: cacheConfig CacheConfig RPCJSONListen string // RPC JSON listening address RPCGOBListen string // RPC GOB listening address @@ -270,30 +271,10 @@ type CGRConfig struct { HTTPWSURL string // WebSocket relative URL ("" to disable) HTTPUseBasicAuth bool // Use basic auth for HTTP API HTTPAuthUsers map[string]string // Basic auth user:password map (base64 passwords) - DefaultReqType string // Use this request type if not defined on top - DefaultCategory string // set default type of record - DefaultTenant string // set default tenant - DefaultTimezone string // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> - Reconnects int // number of recconect attempts in case of connection lost <-1 for infinite | nb> - ConnectTimeout time.Duration // timeout for RPC connection attempts - ReplyTimeout time.Duration // timeout replies if not reaching back - ConnectAttempts int // number of initial connection attempts before giving up - ResponseCacheTTL time.Duration // the life span of a cached response - InternalTtl time.Duration // maximum duration to wait for internal connections before giving up - RoundingDecimals int // Number of decimals to round end prices at - HttpSkipTlsVerify bool // If enabled Http Client will accept any TLS certificate - TpExportPath string // Path towards export folder for offline Tariff Plans - PosterAttempts int - FailedPostsDir string // Directory path where we store failed http requests - MaxCallDuration time.Duration // The maximum call duration (used by responder when querying DerivedCharging) // ToDo: export it in configuration file - LockingTimeout time.Duration // locking mechanism timeout to avoid deadlocks - DigestSeparator string - DigestEqual string - Logger string // dictates the way logs are displayed/stored - LogLevel int // system wide log level, nothing higher than this will be logged - RALsEnabled bool // start standalone server (no balancer) - RALsThresholdSConns []*HaPoolConfig // address where to reach ThresholdS config - RALsCDRStatSConns []*HaPoolConfig // address where to reach the cdrstats service. Empty to disable stats gathering <""|internal|x.y.z.y:1234> + MaxCallDuration time.Duration // The maximum call duration (used by responder when querying DerivedCharging) // ToDo: export it in configuration file + RALsEnabled bool // start standalone server (no balancer) + RALsThresholdSConns []*HaPoolConfig // address where to reach ThresholdS config + RALsCDRStatSConns []*HaPoolConfig // address where to reach the cdrstats service. Empty to disable stats gathering <""|internal|x.y.z.y:1234> RALsStatSConns []*HaPoolConfig RALsPubSubSConns []*HaPoolConfig RALsUserSConns []*HaPoolConfig @@ -355,8 +336,9 @@ type CGRConfig struct { dfltCdreProfile *CdreConfig // Default cdreConfig profile dfltCdrcProfile *CdrcConfig // Default cdrcConfig profile - dataDbCfg *DataDbCfg // Database config - storDbCfg *StorDbCfg //StroreDb config + generalCfg *GeneralCfg // General config + dataDbCfg *DataDbCfg // Database config + storDbCfg *StorDbCfg //StroreDb config } func (self *CGRConfig) checkConfigSanity() error { @@ -894,84 +876,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) { return err } - if jsnGeneralCfg != nil { - if jsnGeneralCfg.Node_id != nil && *jsnGeneralCfg.Node_id != "" { - self.NodeID = *jsnGeneralCfg.Node_id - } - if jsnGeneralCfg.Logger != nil { - self.Logger = *jsnGeneralCfg.Logger - } - if jsnGeneralCfg.Log_level != nil { - self.LogLevel = *jsnGeneralCfg.Log_level - } - - if jsnGeneralCfg.Dbdata_encoding != nil { - self.DBDataEncoding = *jsnGeneralCfg.Dbdata_encoding - } - if jsnGeneralCfg.Default_request_type != nil { - self.DefaultReqType = *jsnGeneralCfg.Default_request_type - } - if jsnGeneralCfg.Default_category != nil { - self.DefaultCategory = *jsnGeneralCfg.Default_category - } - if jsnGeneralCfg.Default_tenant != nil { - self.DefaultTenant = *jsnGeneralCfg.Default_tenant - } - if jsnGeneralCfg.Connect_attempts != nil { - self.ConnectAttempts = *jsnGeneralCfg.Connect_attempts - } - if jsnGeneralCfg.Response_cache_ttl != nil { - if self.ResponseCacheTTL, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Response_cache_ttl); err != nil { - return err - } - } - if jsnGeneralCfg.Reconnects != nil { - self.Reconnects = *jsnGeneralCfg.Reconnects - } - if jsnGeneralCfg.Connect_timeout != nil { - if self.ConnectTimeout, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Connect_timeout); err != nil { - return err - } - } - if jsnGeneralCfg.Reply_timeout != nil { - if self.ReplyTimeout, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Reply_timeout); err != nil { - return err - } - } - if jsnGeneralCfg.Rounding_decimals != nil { - self.RoundingDecimals = *jsnGeneralCfg.Rounding_decimals - } - if jsnGeneralCfg.Http_skip_tls_verify != nil { - self.HttpSkipTlsVerify = *jsnGeneralCfg.Http_skip_tls_verify - } - if jsnGeneralCfg.Tpexport_dir != nil { - self.TpExportPath = *jsnGeneralCfg.Tpexport_dir - } - if jsnGeneralCfg.Poster_attempts != nil { - self.PosterAttempts = *jsnGeneralCfg.Poster_attempts - } - if jsnGeneralCfg.Failed_posts_dir != nil { - self.FailedPostsDir = *jsnGeneralCfg.Failed_posts_dir - } - if jsnGeneralCfg.Default_timezone != nil { - self.DefaultTimezone = *jsnGeneralCfg.Default_timezone - } - if jsnGeneralCfg.Internal_ttl != nil { - if self.InternalTtl, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Internal_ttl); err != nil { - return err - } - } - if jsnGeneralCfg.Locking_timeout != nil { - if self.LockingTimeout, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Locking_timeout); err != nil { - return err - } - } - if jsnGeneralCfg.Digest_separator != nil { - self.DigestSeparator = *jsnGeneralCfg.Digest_separator - } - if jsnGeneralCfg.Digest_equal != nil { - self.DigestEqual = *jsnGeneralCfg.Digest_equal - } + if err := self.generalCfg.loadFromJsonCfg(jsnGeneralCfg); err != nil { + return err } if jsnCacheCfg != nil { @@ -1547,3 +1453,7 @@ func (cfg *CGRConfig) DataDbCfg() *DataDbCfg { func (cfg *CGRConfig) StorDbCfg() *StorDbCfg { return cfg.storDbCfg } + +func (cfg *CGRConfig) GeneralCfg() *GeneralCfg { + return cfg.generalCfg +} diff --git a/config/config_test.go b/config/config_test.go index 52861b489..54a437449 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -319,74 +319,74 @@ func TestCgrCfgLoadJSONDefaults(t *testing.T) { } func TestCgrCfgJSONDefaultsGeneral(t *testing.T) { - if cgrCfg.HttpSkipTlsVerify != false { - t.Error(cgrCfg.HttpSkipTlsVerify) + if cgrCfg.GeneralCfg().HttpSkipTlsVerify != false { + t.Errorf("Expected: false, received: %+v", cgrCfg.GeneralCfg().HttpSkipTlsVerify) } - if cgrCfg.RoundingDecimals != 5 { - t.Error(cgrCfg.RoundingDecimals) + if cgrCfg.GeneralCfg().RoundingDecimals != 5 { + t.Errorf("Expected: 5, received: %+v", cgrCfg.GeneralCfg().RoundingDecimals) } - if cgrCfg.DBDataEncoding != "msgpack" { - t.Error(cgrCfg.DBDataEncoding) + if cgrCfg.GeneralCfg().DBDataEncoding != "msgpack" { + t.Errorf("Expected: msgpack, received: %+v", cgrCfg.GeneralCfg().DBDataEncoding) } - if cgrCfg.TpExportPath != "/var/spool/cgrates/tpe" { - t.Error(cgrCfg.TpExportPath) + if expected := "/var/spool/cgrates/tpe"; cgrCfg.GeneralCfg().TpExportPath != expected { + t.Errorf("Expected: %+v, received: %+v", expected, cgrCfg.GeneralCfg().TpExportPath) } - if cgrCfg.PosterAttempts != 3 { - t.Error(cgrCfg.PosterAttempts) + if cgrCfg.GeneralCfg().PosterAttempts != 3 { + t.Errorf("Expected: 3, received: %+v", cgrCfg.GeneralCfg().PosterAttempts) } - if cgrCfg.FailedPostsDir != "/var/spool/cgrates/failed_posts" { - t.Error(cgrCfg.FailedPostsDir) + if expected := "/var/spool/cgrates/failed_posts"; cgrCfg.GeneralCfg().FailedPostsDir != expected { + t.Errorf("Expected: %+v, received: %+v", expected, cgrCfg.GeneralCfg().FailedPostsDir) } - if cgrCfg.DefaultReqType != "*rated" { - t.Error(cgrCfg.DefaultReqType) + if cgrCfg.GeneralCfg().DefaultReqType != "*rated" { + t.Errorf("Expected: *rated, received: %+v", cgrCfg.GeneralCfg().DefaultReqType) } - if cgrCfg.DefaultCategory != "call" { - t.Error(cgrCfg.DefaultCategory) + if cgrCfg.GeneralCfg().DefaultCategory != "call" { + t.Errorf("Expected: call, received: %+v", cgrCfg.GeneralCfg().DefaultCategory) } - if cgrCfg.DefaultTenant != "cgrates.org" { - t.Error(cgrCfg.DefaultTenant) + if cgrCfg.GeneralCfg().DefaultTenant != "cgrates.org" { + t.Errorf("Expected: cgrates.org, received: %+v", cgrCfg.GeneralCfg().DefaultTenant) } - if cgrCfg.DefaultTimezone != "Local" { - t.Error(cgrCfg.DefaultTimezone) + if cgrCfg.GeneralCfg().DefaultTimezone != "Local" { + t.Errorf("Expected: Local, received: %+v", cgrCfg.GeneralCfg().DefaultTimezone) } - if cgrCfg.ConnectAttempts != 3 { - t.Error(cgrCfg.ConnectAttempts) + if cgrCfg.GeneralCfg().ConnectAttempts != 3 { + t.Errorf("Expected: 3, received: %+v", cgrCfg.GeneralCfg().ConnectAttempts) } - if cgrCfg.Reconnects != -1 { - t.Error(cgrCfg.Reconnects) + if cgrCfg.GeneralCfg().Reconnects != -1 { + t.Errorf("Expected: -1, received: %+v", cgrCfg.GeneralCfg().Reconnects) } - if cgrCfg.ConnectTimeout != 1*time.Second { - t.Error(cgrCfg.ConnectTimeout) + if cgrCfg.GeneralCfg().ConnectTimeout != 1*time.Second { + t.Errorf("Expected: 1s, received: %+v", cgrCfg.GeneralCfg().ConnectTimeout) } - if cgrCfg.ReplyTimeout != 2*time.Second { - t.Error(cgrCfg.ReplyTimeout) + if cgrCfg.GeneralCfg().ReplyTimeout != 2*time.Second { + t.Errorf("Expected: 2s, received: %+v", cgrCfg.GeneralCfg().ReplyTimeout) } - if cgrCfg.ResponseCacheTTL != 0*time.Second { - t.Error(cgrCfg.ResponseCacheTTL) + if cgrCfg.GeneralCfg().ResponseCacheTTL != 0*time.Second { + t.Errorf("Expected: 0s, received: %+v", cgrCfg.GeneralCfg().ResponseCacheTTL) } - if cgrCfg.InternalTtl != 2*time.Minute { - t.Error(cgrCfg.InternalTtl) + if cgrCfg.GeneralCfg().InternalTtl != 2*time.Minute { + t.Errorf("Expected: 2m, received: %+v", cgrCfg.GeneralCfg().InternalTtl) } - if cgrCfg.LockingTimeout != 0 { - t.Error(cgrCfg.LockingTimeout) + if cgrCfg.GeneralCfg().LockingTimeout != 0 { + t.Errorf("Expected: 0, received: %+v", cgrCfg.GeneralCfg().LockingTimeout) } - if cgrCfg.Logger != utils.MetaSysLog { - t.Error(cgrCfg.Logger) + if cgrCfg.GeneralCfg().Logger != utils.MetaSysLog { + t.Errorf("Expected: %+v, received: %+v", utils.MetaSysLog, cgrCfg.GeneralCfg().Logger) } - if cgrCfg.LogLevel != 6 { - t.Error(cgrCfg.LogLevel) + if cgrCfg.GeneralCfg().LogLevel != 6 { + t.Errorf("Expected: 6, received: %+v", cgrCfg.GeneralCfg().LogLevel) } - if cgrCfg.DigestSeparator != "," { - t.Error(cgrCfg.DigestSeparator) + if cgrCfg.GeneralCfg().DigestSeparator != "," { + t.Errorf("Expected: ',' , received: %+v", cgrCfg.GeneralCfg().DigestSeparator) } - if cgrCfg.DigestEqual != ":" { - t.Error(cgrCfg.DigestEqual) + if cgrCfg.GeneralCfg().DigestEqual != ":" { + t.Errorf("Expected: ':' , received: %+v", cgrCfg.GeneralCfg().DigestEqual) } if cgrCfg.TLSServerCerificate != "" { - t.Error(cgrCfg.TLSServerCerificate) + t.Errorf("Expected: '', received: %+v", cgrCfg.TLSServerCerificate) } if cgrCfg.TLSServerKey != "" { - t.Error(cgrCfg.TLSServerKey) + t.Errorf("Expected: '', received: %+v", cgrCfg.TLSServerKey) } } @@ -933,7 +933,7 @@ func TestCgrCfgJSONDefaultsDiameterAgentCfg(t *testing.T) { Listen: "127.0.0.1:3868", DictionariesPath: "/usr/share/cgrates/diameter/dict/", SessionSConns: []*HaPoolConfig{ - &HaPoolConfig{Address: "*internal"}}, + {Address: "*internal"}}, OriginHost: "CGR-DA", OriginRealm: "cgrates.org", VendorId: 0, @@ -1052,7 +1052,7 @@ func TestRadiusAgentCfg(t *testing.T) { ListenAcct: "127.0.0.1:1813", ClientSecrets: map[string]string{utils.META_DEFAULT: "CGRateS.org"}, ClientDictionaries: map[string]string{utils.META_DEFAULT: "/usr/share/cgrates/radius/dict/"}, - SessionSConns: []*HaPoolConfig{&HaPoolConfig{Address: utils.MetaInternal}}, + SessionSConns: []*HaPoolConfig{{Address: utils.MetaInternal}}, RequestProcessors: nil, } if !reflect.DeepEqual(cgrCfg.radiusAgentCfg, testRA) { diff --git a/config/datadbcfg.go b/config/datadbcfg.go index 3c7a11818..416cc119b 100644 --- a/config/datadbcfg.go +++ b/config/datadbcfg.go @@ -28,11 +28,11 @@ import ( // DataDbCfg Database config type DataDbCfg struct { DataDbType string - DataDbHost string - DataDbPort string - DataDbName string - DataDbUser string - DataDbPass string + DataDbHost string // The host to connect to. Values that start with / are for UNIX domain sockets. + DataDbPort string // The port to bind to. + DataDbName string // The name of the database to connect to. + DataDbUser string // The user to sign in as. + DataDbPass string // The user's password. DataDbSentinelName string } diff --git a/config/generalcfg.go b/config/generalcfg.go new file mode 100644 index 000000000..81b9f2a01 --- /dev/null +++ b/config/generalcfg.go @@ -0,0 +1,136 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package config + +import ( + "time" + + "github.com/cgrates/cgrates/utils" +) + +// General config section +type GeneralCfg struct { + NodeID string // Identifier for this engine instance + Logger string // dictates the way logs are displayed/stored + LogLevel int // system wide log level, nothing higher than this will be logged + HttpSkipTlsVerify bool // If enabled Http Client will accept any TLS certificate + RoundingDecimals int // Number of decimals to round end prices at + DBDataEncoding string // The encoding used to store object data in strings: + TpExportPath string // Path towards export folder for offline Tariff Plans + PosterAttempts int + FailedPostsDir string // Directory path where we store failed http requests + DefaultReqType string // Use this request type if not defined on top + DefaultCategory string // set default type of record + DefaultTenant string // set default tenant + DefaultTimezone string // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> + ConnectAttempts int // number of initial connection attempts before giving up + Reconnects int // number of recconect attempts in case of connection lost <-1 for infinite | nb> + ConnectTimeout time.Duration // timeout for RPC connection attempts + ReplyTimeout time.Duration // timeout replies if not reaching back + ResponseCacheTTL time.Duration // the life span of a cached response + InternalTtl time.Duration // maximum duration to wait for internal connections before giving up + LockingTimeout time.Duration // locking mechanism timeout to avoid deadlocks + DigestSeparator string + DigestEqual string +} + +//loadFromJsonCfg loads General config from JsonCfg +func (gencfg *GeneralCfg) loadFromJsonCfg(jsnGeneralCfg *GeneralJsonCfg) (err error) { + if jsnGeneralCfg == nil { + return nil + } + if jsnGeneralCfg.Node_id != nil && *jsnGeneralCfg.Node_id != "" { + gencfg.NodeID = *jsnGeneralCfg.Node_id + } + if jsnGeneralCfg.Logger != nil { + gencfg.Logger = *jsnGeneralCfg.Logger + } + if jsnGeneralCfg.Log_level != nil { + gencfg.LogLevel = *jsnGeneralCfg.Log_level + } + + if jsnGeneralCfg.Dbdata_encoding != nil { + gencfg.DBDataEncoding = *jsnGeneralCfg.Dbdata_encoding + } + if jsnGeneralCfg.Default_request_type != nil { + gencfg.DefaultReqType = *jsnGeneralCfg.Default_request_type + } + if jsnGeneralCfg.Default_category != nil { + gencfg.DefaultCategory = *jsnGeneralCfg.Default_category + } + if jsnGeneralCfg.Default_tenant != nil { + gencfg.DefaultTenant = *jsnGeneralCfg.Default_tenant + } + if jsnGeneralCfg.Connect_attempts != nil { + gencfg.ConnectAttempts = *jsnGeneralCfg.Connect_attempts + } + if jsnGeneralCfg.Response_cache_ttl != nil { + if gencfg.ResponseCacheTTL, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Response_cache_ttl); err != nil { + return err + } + } + if jsnGeneralCfg.Reconnects != nil { + gencfg.Reconnects = *jsnGeneralCfg.Reconnects + } + if jsnGeneralCfg.Connect_timeout != nil { + if gencfg.ConnectTimeout, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Connect_timeout); err != nil { + return err + } + } + if jsnGeneralCfg.Reply_timeout != nil { + if gencfg.ReplyTimeout, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Reply_timeout); err != nil { + return err + } + } + if jsnGeneralCfg.Rounding_decimals != nil { + gencfg.RoundingDecimals = *jsnGeneralCfg.Rounding_decimals + } + if jsnGeneralCfg.Http_skip_tls_verify != nil { + gencfg.HttpSkipTlsVerify = *jsnGeneralCfg.Http_skip_tls_verify + } + if jsnGeneralCfg.Tpexport_dir != nil { + gencfg.TpExportPath = *jsnGeneralCfg.Tpexport_dir + } + if jsnGeneralCfg.Poster_attempts != nil { + gencfg.PosterAttempts = *jsnGeneralCfg.Poster_attempts + } + if jsnGeneralCfg.Failed_posts_dir != nil { + gencfg.FailedPostsDir = *jsnGeneralCfg.Failed_posts_dir + } + if jsnGeneralCfg.Default_timezone != nil { + gencfg.DefaultTimezone = *jsnGeneralCfg.Default_timezone + } + if jsnGeneralCfg.Internal_ttl != nil { + if gencfg.InternalTtl, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Internal_ttl); err != nil { + return err + } + } + if jsnGeneralCfg.Locking_timeout != nil { + if gencfg.LockingTimeout, err = utils.ParseDurationWithNanosecs(*jsnGeneralCfg.Locking_timeout); err != nil { + return err + } + } + if jsnGeneralCfg.Digest_separator != nil { + gencfg.DigestSeparator = *jsnGeneralCfg.Digest_separator + } + if jsnGeneralCfg.Digest_equal != nil { + gencfg.DigestEqual = *jsnGeneralCfg.Digest_equal + } + return nil +} diff --git a/config/generalcfg_test.go b/config/generalcfg_test.go new file mode 100644 index 000000000..32994fd3f --- /dev/null +++ b/config/generalcfg_test.go @@ -0,0 +1,98 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ +package config + +import ( + "reflect" + "strings" + "testing" + "time" +) + +func TestGeneralCfgloadFromJsonCfg(t *testing.T) { + var gencfg, expected GeneralCfg + if err := gencfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(gencfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, gencfg) + } + if err := gencfg.loadFromJsonCfg(new(GeneralJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(gencfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, gencfg) + } + cfgJSONStr := `{ +"general": { + "node_id": "", // identifier of this instance in the cluster, if empty it will be autogenerated + "logger":"*syslog", // controls the destination of logs <*syslog|*stdout> + "log_level": 6, // control the level of messages logged (0-emerg to 7-debug) + "http_skip_tls_verify": false, // if enabled Http Client will accept any TLS certificate + "rounding_decimals": 5, // system level precision for floats + "dbdata_encoding": "msgpack", // encoding used to store object data in strings: + "tpexport_dir": "/var/spool/cgrates/tpe", // path towards export folder for offline Tariff Plans + "poster_attempts": 3, // number of attempts before considering post request failed (eg: *call_url, CDR replication) + "failed_posts_dir": "/var/spool/cgrates/failed_posts", // directory path where we store failed requests + "default_request_type": "*rated", // default request type to consider when missing from requests: <""|*prepaid|*postpaid|*pseudoprepaid|*rated> + "default_category": "call", // default category to consider when missing from requests + "default_tenant": "cgrates.org", // default tenant to consider when missing from requests + "default_timezone": "Local", // default timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB> + "connect_attempts": 3, // initial server connect attempts + "reconnects": -1, // number of retries in case of connection lost + "connect_timeout": "1s", // consider connection unsuccessful on timeout, 0 to disable the feature + "reply_timeout": "2s", // consider connection down for replies taking longer than this value + "response_cache_ttl": "0s", // the life span of a cached response + "internal_ttl": "2m", // maximum duration to wait for internal connections before giving up + "locking_timeout": "0", // timeout internal locks to avoid deadlocks + "digest_separator": ",", + "digest_equal": ":", +} +}` + expected = GeneralCfg{ + NodeID: "", + Logger: "*syslog", + LogLevel: 6, + HttpSkipTlsVerify: false, + RoundingDecimals: 5, + DBDataEncoding: "msgpack", + TpExportPath: "/var/spool/cgrates/tpe", + PosterAttempts: 3, + FailedPostsDir: "/var/spool/cgrates/failed_posts", + DefaultReqType: "*rated", + DefaultCategory: "call", + DefaultTenant: "cgrates.org", + DefaultTimezone: "Local", + ConnectAttempts: 3, + Reconnects: -1, + ConnectTimeout: time.Duration(1 * time.Second), + ReplyTimeout: time.Duration(2 * time.Second), + ResponseCacheTTL: time.Duration(0), + InternalTtl: time.Duration(2 * time.Minute), + LockingTimeout: time.Duration(0), + DigestSeparator: ",", + DigestEqual: ":", + } + if jsnCfg, err := NewCgrJsonCfgFromReader(strings.NewReader(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDataDbCfg, err := jsnCfg.GeneralJsonCfg(); err != nil { + t.Error(err) + } else if err = gencfg.loadFromJsonCfg(jsnDataDbCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, gencfg) { + t.Errorf("Expected: %+v , recived: %+v", expected, gencfg) + } +} diff --git a/config/multifiles_it_test.go b/config/multifiles_it_test.go index 25a0ea364..a28430ad1 100644 --- a/config/multifiles_it_test.go +++ b/config/multifiles_it_test.go @@ -35,11 +35,11 @@ func TestMfInitConfig(t *testing.T) { } func TestMfGeneralItems(t *testing.T) { - if mfCgrCfg.DefaultReqType != utils.META_PSEUDOPREPAID { // Twice reconfigured - t.Error("DefaultReqType: ", mfCgrCfg.DefaultReqType) + if mfCgrCfg.GeneralCfg().DefaultReqType != utils.META_PSEUDOPREPAID { // Twice reconfigured + t.Error("DefaultReqType: ", mfCgrCfg.GeneralCfg().DefaultReqType) } - if mfCgrCfg.DefaultCategory != "call" { // Not configred, should be inherited from default - t.Error("DefaultCategory: ", mfCgrCfg.DefaultCategory) + if mfCgrCfg.GeneralCfg().DefaultCategory != "call" { // Not configred, should be inherited from default + t.Error("DefaultCategory: ", mfCgrCfg.GeneralCfg().DefaultCategory) } } diff --git a/engine/action.go b/engine/action.go index 9f2649017..fd94aecd1 100644 --- a/engine/action.go +++ b/engine/action.go @@ -374,12 +374,17 @@ func callUrl(ub *Account, sq *CDRStatsQueueTriggered, a *Action, acs Actions) er return err } cfg := config.CgrConfig() - ffn := &utils.FallbackFileName{Module: fmt.Sprintf("%s>%s", utils.ActionsPoster, a.ActionType), - Transport: utils.MetaHTTPjson, Address: a.ExtraParameters, - RequestID: utils.GenUUID(), FileSuffix: utils.JSNSuffix} - _, err = NewHTTPPoster(config.CgrConfig().HttpSkipTlsVerify, - config.CgrConfig().ReplyTimeout).Post(a.ExtraParameters, utils.CONTENT_JSON, jsn, - config.CgrConfig().PosterAttempts, path.Join(cfg.FailedPostsDir, ffn.AsString())) + ffn := &utils.FallbackFileName{ + Module: fmt.Sprintf("%s>%s", utils.ActionsPoster, a.ActionType), + Transport: utils.MetaHTTPjson, + Address: a.ExtraParameters, + RequestID: utils.GenUUID(), + FileSuffix: utils.JSNSuffix, + } + _, err = NewHTTPPoster(config.CgrConfig().GeneralCfg().HttpSkipTlsVerify, + config.CgrConfig().GeneralCfg().ReplyTimeout).Post(a.ExtraParameters, + utils.CONTENT_JSON, jsn, config.CgrConfig().GeneralCfg().PosterAttempts, + path.Join(cfg.GeneralCfg().FailedPostsDir, ffn.AsString())) return err } @@ -397,12 +402,17 @@ func callUrlAsync(ub *Account, sq *CDRStatsQueueTriggered, a *Action, acs Action return err } cfg := config.CgrConfig() - ffn := &utils.FallbackFileName{Module: fmt.Sprintf("%s>%s", utils.ActionsPoster, a.ActionType), - Transport: utils.MetaHTTPjson, Address: a.ExtraParameters, - RequestID: utils.GenUUID(), FileSuffix: utils.JSNSuffix} - go NewHTTPPoster(config.CgrConfig().HttpSkipTlsVerify, - config.CgrConfig().ReplyTimeout).Post(a.ExtraParameters, utils.CONTENT_JSON, jsn, - config.CgrConfig().PosterAttempts, path.Join(cfg.FailedPostsDir, ffn.AsString())) + ffn := &utils.FallbackFileName{ + Module: fmt.Sprintf("%s>%s", utils.ActionsPoster, a.ActionType), + Transport: utils.MetaHTTPjson, + Address: a.ExtraParameters, + RequestID: utils.GenUUID(), + FileSuffix: utils.JSNSuffix, + } + go NewHTTPPoster(config.CgrConfig().GeneralCfg().HttpSkipTlsVerify, + config.CgrConfig().GeneralCfg().ReplyTimeout).Post(a.ExtraParameters, + utils.CONTENT_JSON, jsn, config.CgrConfig().GeneralCfg().PosterAttempts, + path.Join(cfg.GeneralCfg().FailedPostsDir, ffn.AsString())) return nil } @@ -672,8 +682,10 @@ func cgrRPCAction(account *Account, sq *CDRStatsQueueTriggered, a *Action, acs A } var client rpcclient.RpcClientConnection if req.Address != utils.MetaInternal { - if client, err = rpcclient.NewRpcClient("tcp", req.Address, "", "", req.Attempts, 0, - config.CgrConfig().ConnectTimeout, config.CgrConfig().ReplyTimeout, req.Transport, nil, false); err != nil { + if client, err = rpcclient.NewRpcClient("tcp", req.Address, "", "", + req.Attempts, 0, config.CgrConfig().GeneralCfg().ConnectTimeout, + config.CgrConfig().GeneralCfg().ReplyTimeout, req.Transport, + nil, false); err != nil { return err } } else { diff --git a/engine/attributes_test.go b/engine/attributes_test.go index 70e11dabf..86cb793af 100644 --- a/engine/attributes_test.go +++ b/engine/attributes_test.go @@ -32,8 +32,8 @@ var ( attrService *AttributeService dmAtr *DataManager mapSubstitutes = map[string]map[interface{}]*Attribute{ - utils.Account: map[interface{}]*Attribute{ - utils.META_ANY: &Attribute{ + utils.Account: { + utils.META_ANY: { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1010", true), @@ -42,9 +42,9 @@ var ( }, } attrEvs = []*AttrArgsProcessEvent{ - &AttrArgsProcessEvent{ + { CGREvent: utils.CGREvent{ //matching AttributeProfile1 - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -55,9 +55,9 @@ var ( }, }, }, - &AttrArgsProcessEvent{ + { CGREvent: utils.CGREvent{ //matching AttributeProfile2 - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -65,9 +65,9 @@ var ( }, }, }, - &AttrArgsProcessEvent{ + { CGREvent: utils.CGREvent{ //matching AttributeProfilePrefix - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -75,9 +75,9 @@ var ( }, }, }, - &AttrArgsProcessEvent{ + { CGREvent: utils.CGREvent{ //matching AttributeProfilePrefix - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -88,7 +88,7 @@ var ( } atrPs = AttributeProfiles{ &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "AttributeProfile1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"FLTR_ATTR_1"}, @@ -97,7 +97,7 @@ var ( ExpiryTime: cloneExpTimeAttributes, }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1010", true), @@ -108,7 +108,7 @@ var ( attributesIdx: mapSubstitutes, }, &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "AttributeProfile2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"FLTR_ATTR_2"}, @@ -117,7 +117,7 @@ var ( ExpiryTime: cloneExpTimeAttributes, }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1010", true), @@ -128,7 +128,7 @@ var ( attributesIdx: mapSubstitutes, }, &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "AttributeProfilePrefix", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"FLTR_ATTR_3"}, @@ -137,7 +137,7 @@ var ( ExpiryTime: cloneExpTimeAttributes, }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1010", true), @@ -148,7 +148,7 @@ var ( Weight: 20, }, &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "AttributeIDMatch", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*gte:DistinctMatch:20"}, @@ -157,7 +157,7 @@ var ( ExpiryTime: cloneExpTimeAttributes, }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("1010", true), @@ -189,20 +189,20 @@ func TestAttributePopulateAttrService(t *testing.T) { func TestAttributeAddFilters(t *testing.T) { fltrAttr1 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_ATTR_1", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Attribute", Values: []string{"AttributeProfile1"}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: "UsageInterval", Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"9.0"}, @@ -211,10 +211,10 @@ func TestAttributeAddFilters(t *testing.T) { } dmAtr.SetFilter(fltrAttr1) fltrAttr2 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_ATTR_2", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Attribute", Values: []string{"AttributeProfile2"}, @@ -223,10 +223,10 @@ func TestAttributeAddFilters(t *testing.T) { } dmAtr.SetFilter(fltrAttr2) fltrAttrPrefix := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_ATTR_3", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaPrefix, FieldName: "Attribute", Values: []string{"AttributeProfilePrefix"}, @@ -235,10 +235,10 @@ func TestAttributeAddFilters(t *testing.T) { } dmAtr.SetFilter(fltrAttrPrefix) fltrAttr4 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_ATTR_4", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"200.00"}, @@ -459,7 +459,7 @@ func TestAttributeIndexer(t *testing.T) { ExpiryTime: cloneExpTimeAttributes, }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: utils.Account, Initial: utils.META_ANY, Append: true, @@ -472,7 +472,7 @@ func TestAttributeIndexer(t *testing.T) { t.Error(err) } eIdxes := map[string]utils.StringMap{ - "*string:Account:1007": utils.StringMap{ + "*string:Account:1007": { "AttrPrf": true, }, } @@ -519,7 +519,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:InitialField:InitialValue"}, @@ -527,7 +527,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field1", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value1", true), @@ -537,7 +537,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { Weight: 10, } attrPrf2 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -545,7 +545,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value2", true), @@ -555,7 +555,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { Weight: 20, } attrPrf3 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_3", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field2:Value2"}, @@ -563,7 +563,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field3", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value3", true), @@ -585,7 +585,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(4), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -597,7 +597,7 @@ func TestAttributeProcessWithMultipleRuns1(t *testing.T) { MatchedProfiles: []string{"ATTR_1", "ATTR_2", "ATTR_3"}, AlteredFields: []string{"Field1", "Field2", "Field3"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -634,7 +634,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:InitialField:InitialValue"}, @@ -642,7 +642,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field1", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value1", true), @@ -652,7 +652,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { Weight: 10, } attrPrf2 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -660,7 +660,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value2", true), @@ -670,7 +670,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { Weight: 20, } attrPrf3 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_3", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:NotFound:NotFound"}, @@ -678,7 +678,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field3", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value3", true), @@ -700,7 +700,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(4), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -712,7 +712,7 @@ func TestAttributeProcessWithMultipleRuns2(t *testing.T) { MatchedProfiles: []string{"ATTR_1", "ATTR_2"}, AlteredFields: []string{"Field1", "Field2"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -748,7 +748,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:InitialField:InitialValue"}, @@ -756,7 +756,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field1", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value1", true), @@ -766,7 +766,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { Weight: 10, } attrPrf2 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -774,7 +774,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value2", true), @@ -784,7 +784,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { Weight: 20, } attrPrf3 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_3", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field2:Value2"}, @@ -792,7 +792,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field3", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value3", true), @@ -814,7 +814,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(2), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -826,7 +826,7 @@ func TestAttributeProcessWithMultipleRuns3(t *testing.T) { MatchedProfiles: []string{"ATTR_1", "ATTR_2"}, AlteredFields: []string{"Field1", "Field2"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -862,7 +862,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:InitialField:InitialValue"}, @@ -870,7 +870,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field1", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value1", true), @@ -880,7 +880,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { Weight: 10, } attrPrf2 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -888,7 +888,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value2", true), @@ -907,7 +907,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(4), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -919,7 +919,7 @@ func TestAttributeProcessWithMultipleRuns4(t *testing.T) { MatchedProfiles: []string{"ATTR_1", "ATTR_2"}, AlteredFields: []string{"Field1", "Field2"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -955,7 +955,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:InitialField:InitialValue"}, @@ -963,7 +963,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field1", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value1", true), @@ -973,7 +973,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { Weight: 10, } attrPrf2 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -981,7 +981,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value2", true), @@ -992,7 +992,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { Weight: 20, } attrPrf3 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_3", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field2:Value2"}, @@ -1000,7 +1000,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field3", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value3", true), @@ -1022,7 +1022,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(4), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -1034,7 +1034,7 @@ func TestAttributeMultipleProcessWithBlocker(t *testing.T) { MatchedProfiles: []string{"ATTR_1", "ATTR_2"}, AlteredFields: []string{"Field1", "Field2"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -1070,7 +1070,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:InitialField:InitialValue"}, @@ -1078,7 +1078,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field1", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value1", true), @@ -1089,7 +1089,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { Weight: 10, } attrPrf2 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_2", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -1097,7 +1097,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value2", true), @@ -1107,7 +1107,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { Weight: 20, } attrPrf3 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_3", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field2:Value2"}, @@ -1115,7 +1115,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field3", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("Value3", true), @@ -1137,7 +1137,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(4), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -1149,7 +1149,7 @@ func TestAttributeMultipleProcessWithBlocker2(t *testing.T) { MatchedProfiles: []string{"ATTR_1"}, AlteredFields: []string{"Field1"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -1184,7 +1184,7 @@ func TestAttributeProcessSubstitute(t *testing.T) { t.Errorf("\nExpecting: true got :%+v", test) } attrPrf1 := &AttributeProfile{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ATTR_1", Contexts: []string{utils.MetaSessionS}, FilterIDs: []string{"*string:Field1:Value1"}, @@ -1192,7 +1192,7 @@ func TestAttributeProcessSubstitute(t *testing.T) { ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC), }, Attributes: []*Attribute{ - &Attribute{ + { FieldName: "Field2", Initial: utils.META_ANY, Substitute: config.NewRSRParsersMustCompile("~Field1", true), @@ -1209,7 +1209,7 @@ func TestAttributeProcessSubstitute(t *testing.T) { attrArgs := &AttrArgsProcessEvent{ ProcessRuns: utils.IntPointer(1), CGREvent: utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -1221,7 +1221,7 @@ func TestAttributeProcessSubstitute(t *testing.T) { MatchedProfiles: []string{"ATTR_1"}, AlteredFields: []string{"Field2"}, CGREvent: &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ diff --git a/engine/calldesc.go b/engine/calldesc.go index 240ab4d68..391b83e27 100644 --- a/engine/calldesc.go +++ b/engine/calldesc.go @@ -255,7 +255,8 @@ func (cd *CallDescriptor) UpdateFromCGREvent(cgrEv *utils.CGREvent, fields []str return } case utils.AnswerTime: - if cd.TimeStart, err = cgrEv.FieldAsTime(fldName, config.CgrConfig().DefaultTimezone); err != nil { + if cd.TimeStart, err = cgrEv.FieldAsTime(fldName, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return } case utils.Usage: diff --git a/engine/cdr.go b/engine/cdr.go index 25b6e41a7..251c5fcb7 100644 --- a/engine/cdr.go +++ b/engine/cdr.go @@ -69,9 +69,14 @@ func NewCDRFromExternalCDR(extCdr *ExternalCDR, timezone string) (*CDR, error) { } func NewCDRWithDefaults(cfg *config.CGRConfig) *CDR { - return &CDR{ToR: utils.VOICE, RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, Category: cfg.DefaultCategory, - ExtraFields: make(map[string]string), Cost: -1} + return &CDR{ + ToR: utils.VOICE, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, + ExtraFields: make(map[string]string), + Cost: -1, + } } type CDR struct { @@ -112,13 +117,13 @@ func (cdr *CDR) AddDefaults(cfg *config.CGRConfig) { cdr.ToR = utils.VOICE } if cdr.RequestType == utils.EmptyString { - cdr.RequestType = cfg.DefaultReqType + cdr.RequestType = cfg.GeneralCfg().DefaultReqType } if cdr.Tenant == utils.EmptyString { - cdr.Tenant = cfg.DefaultTenant + cdr.Tenant = cfg.GeneralCfg().DefaultTenant } if cdr.Category == utils.EmptyString { - cdr.Category = cfg.DefaultCategory + cdr.Category = cfg.GeneralCfg().DefaultCategory } if cdr.Subject == utils.EmptyString { cdr.Subject = cdr.Account @@ -716,11 +721,13 @@ func (cdr *CDR) UpdateFromCGREvent(cgrEv *utils.CGREvent, fields []string) (err return } case utils.SetupTime: - if cdr.SetupTime, err = cgrEv.FieldAsTime(fldName, config.CgrConfig().DefaultTimezone); err != nil { + if cdr.SetupTime, err = cgrEv.FieldAsTime(fldName, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return } case utils.AnswerTime: - if cdr.AnswerTime, err = cgrEv.FieldAsTime(fldName, config.CgrConfig().DefaultTimezone); err != nil { + if cdr.AnswerTime, err = cgrEv.FieldAsTime(fldName, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return } case utils.Usage: diff --git a/engine/cdrecsv_test.go b/engine/cdrecsv_test.go index 225144f1e..a7863b4dc 100644 --- a/engine/cdrecsv_test.go +++ b/engine/cdrecsv_test.go @@ -44,10 +44,9 @@ func TestCsvCdrWriter(t *testing.T) { "extra2": "val_extra2", "extra3": "val_extra3"}, } cdre, err := NewCDRExporter([]*CDR{storedCdr1}, - cfg.CdreProfiles["*default"], utils.MetaFileCSV, - "", "", "firstexport", - true, 1, ',', map[string]float64{}, 0.0, - cfg.RoundingDecimals, cfg.HttpSkipTlsVerify, nil, nil) + cfg.CdreProfiles["*default"], utils.MetaFileCSV, "", "", "firstexport", + true, 1, ',', map[string]float64{}, 0.0, cfg.GeneralCfg().RoundingDecimals, + cfg.GeneralCfg().HttpSkipTlsVerify, nil, nil) if err != nil { t.Error("Unexpected error received: ", err) } @@ -84,9 +83,9 @@ func TestAlternativeFieldSeparator(t *testing.T) { "extra2": "val_extra2", "extra3": "val_extra3"}, } cdre, err := NewCDRExporter([]*CDR{storedCdr1}, cfg.CdreProfiles["*default"], - utils.MetaFileCSV, "", "", "firstexport", - true, 1, '|', map[string]float64{}, 0.0, - cfg.RoundingDecimals, cfg.HttpSkipTlsVerify, nil, nil) + utils.MetaFileCSV, "", "", "firstexport", true, 1, '|', + map[string]float64{}, 0.0, cfg.GeneralCfg().RoundingDecimals, + cfg.GeneralCfg().HttpSkipTlsVerify, nil, nil) if err != nil { t.Error("Unexpected error received: ", err) } @@ -112,33 +111,33 @@ func TestExportVoiceWithConvert(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() cdreCfg := cfg.CdreProfiles["*default"] cdreCfg.ContentFields = []*config.FCTemplate{ - &config.FCTemplate{Tag: "ToR", Type: "*composed", + {Tag: "ToR", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"ToR", true)}, - &config.FCTemplate{Tag: "OriginID", Type: "*composed", + {Tag: "OriginID", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"OriginID", true)}, - &config.FCTemplate{Tag: "RequestType", Type: "*composed", + {Tag: "RequestType", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"RequestType", true)}, - &config.FCTemplate{Tag: "Tenant", Type: "*composed", + {Tag: "Tenant", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Tenant", true)}, - &config.FCTemplate{Tag: "Category", Type: "*composed", + {Tag: "Category", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Category", true)}, - &config.FCTemplate{Tag: "Account", Type: "*composed", + {Tag: "Account", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Account", true)}, - &config.FCTemplate{Tag: "Destination", Type: "*composed", + {Tag: "Destination", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Destination", true)}, - &config.FCTemplate{Tag: "AnswerTime", Type: "*composed", + {Tag: "AnswerTime", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"AnswerTime", true), Layout: "2006-01-02T15:04:05Z07:00"}, - &config.FCTemplate{Tag: "UsageVoice", Type: "*composed", + {Tag: "UsageVoice", Type: "*composed", Filters: []string{"*string:ToR:*voice"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_seconds}", true)}, - &config.FCTemplate{Tag: "UsageData", Type: "*composed", + {Tag: "UsageData", Type: "*composed", Filters: []string{"*string:ToR:*data"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_nanoseconds}", true)}, - &config.FCTemplate{Tag: "UsageSMS", Type: "*composed", + {Tag: "UsageSMS", Type: "*composed", Filters: []string{"*string:ToR:*sms"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_nanoseconds}", true)}, - &config.FCTemplate{Tag: "Cost", Type: "*composed", + {Tag: "Cost", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Cost", true), RoundingDecimals: 4}, } @@ -210,33 +209,33 @@ func TestExportWithFilter(t *testing.T) { cdreCfg := cfg.CdreProfiles["*default"] cdreCfg.Filters = []string{"*string:Tenant:cgrates.org"} cdreCfg.ContentFields = []*config.FCTemplate{ - &config.FCTemplate{Tag: "ToR", Type: "*composed", + {Tag: "ToR", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"ToR", true)}, - &config.FCTemplate{Tag: "OriginID", Type: "*composed", + {Tag: "OriginID", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"OriginID", true)}, - &config.FCTemplate{Tag: "RequestType", Type: "*composed", + {Tag: "RequestType", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"RequestType", true)}, - &config.FCTemplate{Tag: "Tenant", Type: "*composed", + {Tag: "Tenant", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Tenant", true)}, - &config.FCTemplate{Tag: "Category", Type: "*composed", + {Tag: "Category", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Category", true)}, - &config.FCTemplate{Tag: "Account", Type: "*composed", + {Tag: "Account", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Account", true)}, - &config.FCTemplate{Tag: "Destination", Type: "*composed", + {Tag: "Destination", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Destination", true)}, - &config.FCTemplate{Tag: "AnswerTime", Type: "*composed", + {Tag: "AnswerTime", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"AnswerTime", true), Layout: "2006-01-02T15:04:05Z07:00"}, - &config.FCTemplate{Tag: "UsageVoice", Type: "*composed", + {Tag: "UsageVoice", Type: "*composed", Filters: []string{"*string:ToR:*voice"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_seconds}", true)}, - &config.FCTemplate{Tag: "UsageData", Type: "*composed", + {Tag: "UsageData", Type: "*composed", Filters: []string{"*string:ToR:*data"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_nanoseconds}", true)}, - &config.FCTemplate{Tag: "UsageSMS", Type: "*composed", + {Tag: "UsageSMS", Type: "*composed", Filters: []string{"*string:ToR:*sms"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_nanoseconds}", true)}, - &config.FCTemplate{Tag: "Cost", Type: "*composed", + {Tag: "Cost", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Cost", true), RoundingDecimals: 4}, } @@ -307,33 +306,33 @@ func TestExportWithFilter2(t *testing.T) { cdreCfg := cfg.CdreProfiles["*default"] cdreCfg.Filters = []string{"*string:Tenant:cgrates.org", "*lte:Cost:0.5"} cdreCfg.ContentFields = []*config.FCTemplate{ - &config.FCTemplate{Tag: "ToR", Type: "*composed", + {Tag: "ToR", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"ToR", true)}, - &config.FCTemplate{Tag: "OriginID", Type: "*composed", + {Tag: "OriginID", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"OriginID", true)}, - &config.FCTemplate{Tag: "RequestType", Type: "*composed", + {Tag: "RequestType", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"RequestType", true)}, - &config.FCTemplate{Tag: "Tenant", Type: "*composed", + {Tag: "Tenant", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Tenant", true)}, - &config.FCTemplate{Tag: "Category", Type: "*composed", + {Tag: "Category", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Category", true)}, - &config.FCTemplate{Tag: "Account", Type: "*composed", + {Tag: "Account", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Account", true)}, - &config.FCTemplate{Tag: "Destination", Type: "*composed", + {Tag: "Destination", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Destination", true)}, - &config.FCTemplate{Tag: "AnswerTime", Type: "*composed", + {Tag: "AnswerTime", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"AnswerTime", true), Layout: "2006-01-02T15:04:05Z07:00"}, - &config.FCTemplate{Tag: "UsageVoice", Type: "*composed", + {Tag: "UsageVoice", Type: "*composed", Filters: []string{"*string:ToR:*voice"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_seconds}", true)}, - &config.FCTemplate{Tag: "UsageData", Type: "*composed", + {Tag: "UsageData", Type: "*composed", Filters: []string{"*string:ToR:*data"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_nanoseconds}", true)}, - &config.FCTemplate{Tag: "UsageSMS", Type: "*composed", + {Tag: "UsageSMS", Type: "*composed", Filters: []string{"*string:ToR:*sms"}, Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Usage{*duration_nanoseconds}", true)}, - &config.FCTemplate{Tag: "Cost", Type: "*composed", + {Tag: "Cost", Type: "*composed", Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+"Cost", true), RoundingDecimals: 4}, } diff --git a/engine/cdrefwv_test.go b/engine/cdrefwv_test.go index 701bf8108..7ad3a58f1 100644 --- a/engine/cdrefwv_test.go +++ b/engine/cdrefwv_test.go @@ -28,96 +28,96 @@ import ( ) var hdrJsnCfgFlds = []*config.FcTemplateJsonCfg{ - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("TypeOfRecord"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("10"), Width: utils.IntPointer(2)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Filler1"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(3)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("DistributorCode"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("VOI"), Width: utils.IntPointer(3)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("FileSeqNr"), Type: utils.StringPointer(utils.META_HANDLER), Value: utils.StringPointer(META_EXPORTID), Width: utils.IntPointer(5), Strip: utils.StringPointer("right"), Padding: utils.StringPointer("zeroleft")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("LastCdr"), Type: utils.StringPointer(utils.META_HANDLER), Width: utils.IntPointer(12), Value: utils.StringPointer(META_LASTCDRATIME), Layout: utils.StringPointer("020106150400")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("FileCreationfTime"), Type: utils.StringPointer(utils.META_HANDLER), Value: utils.StringPointer(META_TIMENOW), Width: utils.IntPointer(12), Layout: utils.StringPointer("020106150400")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("FileVersion"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("01"), Width: utils.IntPointer(2)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Filler2"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(105)}, } var contentJsnCfgFlds = []*config.FcTemplateJsonCfg{ - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("TypeOfRecord"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("20"), Width: utils.IntPointer(2)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Account"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~" + utils.Account), Width: utils.IntPointer(12), Strip: utils.StringPointer("left"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Subject"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~" + utils.Subject), Width: utils.IntPointer(5), Strip: utils.StringPointer("right"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("CLI"), Type: utils.StringPointer(utils.META_COMPOSED), Width: utils.IntPointer(15), Value: utils.StringPointer("cli"), Strip: utils.StringPointer("xright"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Destination"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~" + utils.Destination), Width: utils.IntPointer(24), Strip: utils.StringPointer("xright"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("ToR"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("02"), Width: utils.IntPointer(2)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("SubtypeTOR"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("11"), Padding: utils.StringPointer("right"), Width: utils.IntPointer(4)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("SetupTime"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~" + utils.SetupTime), @@ -125,7 +125,7 @@ var contentJsnCfgFlds = []*config.FcTemplateJsonCfg{ Strip: utils.StringPointer("right"), Padding: utils.StringPointer("right"), Layout: utils.StringPointer("020106150400")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Duration"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~" + utils.Usage), @@ -133,115 +133,115 @@ var contentJsnCfgFlds = []*config.FcTemplateJsonCfg{ Strip: utils.StringPointer("right"), Padding: utils.StringPointer("right"), Layout: utils.StringPointer(utils.SECONDS)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("DataVolume"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(6)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("TaxCode"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("1"), Width: utils.IntPointer(1)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("OperatorCode"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("opercode"), Width: utils.IntPointer(2), Strip: utils.StringPointer("right"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("ProductId"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~productid"), Width: utils.IntPointer(5), Strip: utils.StringPointer("right"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("NetworkId"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("3"), Width: utils.IntPointer(1)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("CallId"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~" + utils.OriginID), Width: utils.IntPointer(16), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Filler"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(8)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Filler"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(8)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("TerminationCode"), Type: utils.StringPointer(utils.META_COMPOSED), Value: utils.StringPointer("~operator;~product"), Width: utils.IntPointer(5), Strip: utils.StringPointer("right"), Padding: utils.StringPointer("right")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Cost"), Type: utils.StringPointer(utils.META_COMPOSED), Width: utils.IntPointer(9), Value: utils.StringPointer("~" + utils.COST), Padding: utils.StringPointer("zeroleft")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("DestinationPrivacy"), Type: utils.StringPointer(utils.MetaMaskedDestination), Width: utils.IntPointer(1)}, } var trailerJsnCfgFlds = []*config.FcTemplateJsonCfg{ - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("TypeOfRecord"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("90"), Width: utils.IntPointer(2)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Filler1"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(3)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("DistributorCode"), Type: utils.StringPointer(utils.META_CONSTANT), Value: utils.StringPointer("VOI"), Width: utils.IntPointer(3)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("FileSeqNr"), Type: utils.StringPointer(utils.META_HANDLER), Value: utils.StringPointer(META_EXPORTID), Width: utils.IntPointer(5), Strip: utils.StringPointer("right"), Padding: utils.StringPointer("zeroleft")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("NumberOfRecords"), Type: utils.StringPointer(utils.META_HANDLER), Value: utils.StringPointer(META_NRCDRS), Width: utils.IntPointer(6), Padding: utils.StringPointer("zeroleft")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("CdrsDuration"), Type: utils.StringPointer(utils.META_HANDLER), Value: utils.StringPointer(META_DURCDRS), Width: utils.IntPointer(8), Padding: utils.StringPointer("zeroleft"), Layout: utils.StringPointer(utils.SECONDS)}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("FirstCdrTime"), Type: utils.StringPointer(utils.META_HANDLER), Width: utils.IntPointer(12), Value: utils.StringPointer(META_FIRSTCDRATIME), Layout: utils.StringPointer("020106150400")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("LastCdrTime"), Type: utils.StringPointer(utils.META_HANDLER), Width: utils.IntPointer(12), Value: utils.StringPointer(META_LASTCDRATIME), Layout: utils.StringPointer("020106150400")}, - &config.FcTemplateJsonCfg{ + { Tag: utils.StringPointer("Filler2"), Type: utils.StringPointer(utils.META_FILLER), Width: utils.IntPointer(93)}, @@ -282,7 +282,8 @@ func TestWriteCdr(t *testing.T) { } cdre, err := NewCDRExporter([]*CDR{cdr}, cdreCfg, utils.MetaFileFWV, "", "", "fwv_1", - true, 1, '|', map[string]float64{}, 0.0, cfg.RoundingDecimals, cfg.HttpSkipTlsVerify, nil, nil) + true, 1, '|', map[string]float64{}, 0.0, cfg.GeneralCfg().RoundingDecimals, + cfg.GeneralCfg().HttpSkipTlsVerify, nil, nil) if err != nil { t.Error(err) } @@ -367,8 +368,10 @@ func TestWriteCdrs(t *testing.T) { ExtraFields: map[string]string{"productnumber": "12344", "fieldextr2": "valextr2"}, } cfg, _ := config.NewDefaultCGRConfig() - cdre, err := NewCDRExporter([]*CDR{cdr1, cdr2, cdr3, cdr4}, cdreCfg, utils.MetaFileFWV, "", "", "fwv_1", - true, 1, ',', map[string]float64{}, 0.0, cfg.RoundingDecimals, cfg.HttpSkipTlsVerify, nil, nil) + cdre, err := NewCDRExporter([]*CDR{cdr1, cdr2, cdr3, cdr4}, cdreCfg, + utils.MetaFileFWV, "", "", "fwv_1", true, 1, ',', map[string]float64{}, + 0.0, cfg.GeneralCfg().RoundingDecimals, + cfg.GeneralCfg().HttpSkipTlsVerify, nil, nil) if err != nil { t.Error(err) } diff --git a/engine/cdrs.go b/engine/cdrs.go index 015e2b6ad..83e86b4e4 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -45,12 +45,12 @@ type CallCostLog struct { // Handler for generic cgr cdr http func cgrCdrHandler(w http.ResponseWriter, r *http.Request) { - cgrCdr, err := NewCgrCdrFromHttpReq(r, cdrServer.cgrCfg.DefaultTimezone) + cgrCdr, err := NewCgrCdrFromHttpReq(r, cdrServer.cgrCfg.GeneralCfg().DefaultTimezone) if err != nil { utils.Logger.Err(fmt.Sprintf(" Could not create CDR entry: %s", err.Error())) return } - if err := cdrServer.processCdr(cgrCdr.AsCDR(cdrServer.cgrCfg.DefaultTimezone)); err != nil { + if err := cdrServer.processCdr(cgrCdr.AsCDR(cdrServer.cgrCfg.GeneralCfg().DefaultTimezone)); err != nil { utils.Logger.Err(fmt.Sprintf(" Errors when storing CDR entry: %s", err.Error())) } } @@ -102,8 +102,8 @@ func NewCdrServer(cgrCfg *config.CGRConfig, cdrDb CdrStorage, dm *DataManager, r users: users, aliases: aliases, cdrstats: cdrstats, stats: stats, thdS: thdS, chargerS: chargerS, guard: guardian.Guardian, - httpPoster: NewHTTPPoster(cgrCfg.HttpSkipTlsVerify, - cgrCfg.ReplyTimeout), filterS: filterS}, nil + httpPoster: NewHTTPPoster(cgrCfg.GeneralCfg().HttpSkipTlsVerify, + cgrCfg.GeneralCfg().ReplyTimeout), filterS: filterS}, nil } type CdrServer struct { @@ -126,7 +126,7 @@ type CdrServer struct { } func (self *CdrServer) Timezone() string { - return self.cgrCfg.DefaultTimezone + return self.cgrCfg.GeneralCfg().DefaultTimezone } func (self *CdrServer) SetTimeToLive(timeToLive time.Duration, out *int) error { self.responseCache = utils.NewResponseCache(timeToLive) @@ -148,7 +148,7 @@ func (self *CdrServer) RegisterHandlersToServer(server *utils.Server) { // Used to process external CDRs func (self *CdrServer) ProcessExternalCdr(eCDR *ExternalCDR) error { - cdr, err := NewCDRFromExternalCDR(eCDR, self.cgrCfg.DefaultTimezone) + cdr, err := NewCDRFromExternalCDR(eCDR, self.cgrCfg.GeneralCfg().DefaultTimezone) if err != nil { return err } @@ -177,13 +177,13 @@ func (self *CdrServer) storeSMCost(smCost *SMCost, checkDuplicate bool) error { // Returns error if not able to properly store the CDR, mediation is async since we can always recover offline func (self *CdrServer) processCdr(cdr *CDR) (err error) { if cdr.RequestType == "" { - cdr.RequestType = self.cgrCfg.DefaultReqType + cdr.RequestType = self.cgrCfg.GeneralCfg().DefaultReqType } if cdr.Tenant == "" { - cdr.Tenant = self.cgrCfg.DefaultTenant + cdr.Tenant = self.cgrCfg.GeneralCfg().DefaultTenant } if cdr.Category == "" { - cdr.Category = self.cgrCfg.DefaultCategory + cdr.Category = self.cgrCfg.GeneralCfg().DefaultCategory } if cdr.Subject == "" { // Use account information as rating subject if missing cdr.Subject = cdr.Account @@ -373,12 +373,14 @@ func (self *CdrServer) deriveCdrs(cdr *CDR) (drvdCDRs []*CDR, err error) { dcCostFld, _ := utils.NewRSRField(dc.CostField) dcExtraFields := []*utils.RSRField{} - for key, _ := range cdr.ExtraFields { + for key := range cdr.ExtraFields { dcExtraFields = append(dcExtraFields, &utils.RSRField{Id: key}) } - forkedCdr, err := cdr.ForkCdr(dc.RunID, dcRequestTypeFld, dcTenantFld, dcCategoryFld, dcAcntFld, dcSubjFld, dcDstFld, - dcSTimeFld, dcATimeFld, dcDurFld, dcRatedFld, dcCostFld, dcExtraFields, true, self.cgrCfg.DefaultTimezone) + forkedCdr, err := cdr.ForkCdr(dc.RunID, dcRequestTypeFld, dcTenantFld, + dcCategoryFld, dcAcntFld, dcSubjFld, dcDstFld, dcSTimeFld, dcATimeFld, + dcDurFld, dcRatedFld, dcCostFld, dcExtraFields, true, + self.cgrCfg.GeneralCfg().DefaultTimezone) if err != nil { utils.Logger.Err(fmt.Sprintf("Could not fork CGR with cgrid %s, run: %s, error: %s", cdr.CGRID, dc.RunID, err.Error())) continue // do not add it to the forked CDR list @@ -491,9 +493,13 @@ func (self *CdrServer) replicateCDRs(cdrs []*CDR) (err error) { for _, exportID := range self.cgrCfg.CDRSOnlineCDRExports { expTpl := self.cgrCfg.CdreProfiles[exportID] // not checking for existence of profile since this should be done in a higher layer var cdre *CDRExporter - if cdre, err = NewCDRExporter(cdrs, expTpl, expTpl.ExportFormat, expTpl.ExportPath, self.cgrCfg.FailedPostsDir, "CDRSReplication", - expTpl.Synchronous, expTpl.Attempts, expTpl.FieldSeparator, expTpl.UsageMultiplyFactor, - expTpl.CostMultiplyFactor, self.cgrCfg.RoundingDecimals, self.cgrCfg.HttpSkipTlsVerify, self.httpPoster, self.filterS); err != nil { + if cdre, err = NewCDRExporter(cdrs, expTpl, expTpl.ExportFormat, + expTpl.ExportPath, self.cgrCfg.GeneralCfg().FailedPostsDir, + "CDRSReplication", expTpl.Synchronous, expTpl.Attempts, + expTpl.FieldSeparator, expTpl.UsageMultiplyFactor, + expTpl.CostMultiplyFactor, self.cgrCfg.GeneralCfg().RoundingDecimals, + self.cgrCfg.GeneralCfg().HttpSkipTlsVerify, self.httpPoster, + self.filterS); err != nil { utils.Logger.Err(fmt.Sprintf(" Building CDRExporter for online exports got error: <%s>", err.Error())) continue } @@ -610,7 +616,7 @@ func (cdrs *CdrServer) V2StoreSMCost(args ArgsV2CDRSStoreSMCost, reply *string) // Called by rate/re-rate API, RPC method func (self *CdrServer) V1RateCDRs(attrs utils.AttrRateCDRs, reply *string) error { - cdrFltr, err := attrs.RPCCDRsFilter.AsCDRsFilter(self.cgrCfg.DefaultTimezone) + cdrFltr, err := attrs.RPCCDRsFilter.AsCDRsFilter(self.cgrCfg.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } @@ -801,7 +807,7 @@ func (cdrS *CdrServer) V2RateCDRs(attrs *utils.RPCCDRsFilter, reply *string) err if cdrS.chargerS == nil { return utils.NewErrNotConnected(utils.ChargerS) } - cdrFltr, err := attrs.AsCDRsFilter(cdrS.cgrCfg.DefaultTimezone) + cdrFltr, err := attrs.AsCDRsFilter(cdrS.cgrCfg.GeneralCfg().DefaultTimezone) if err != nil { return utils.NewErrServerError(err) } diff --git a/engine/chargers_test.go b/engine/chargers_test.go index 45b9e5aa7..a5000f5fa 100755 --- a/engine/chargers_test.go +++ b/engine/chargers_test.go @@ -65,8 +65,8 @@ var ( }, } chargerEvents = []*utils.CGREvent{ - &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -76,8 +76,8 @@ var ( utils.Weight: "200.0", }, }, - &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -85,8 +85,8 @@ var ( utils.AnswerTime: time.Date(2014, 7, 14, 14, 30, 0, 0, time.UTC), }, }, - &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: utils.GenUUID(), Context: utils.StringPointer(utils.MetaSessionS), Event: map[string]interface{}{ @@ -113,15 +113,15 @@ func TestChargerPopulateChargerService(t *testing.T) { func TestChargerAddFilter(t *testing.T) { fltrCP1 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_CP_1", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Charger", Values: []string{"ChargerProfile1"}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: "UsageInterval", Values: []string{(1 * time.Second).String()}, @@ -130,10 +130,10 @@ func TestChargerAddFilter(t *testing.T) { } dmCharger.SetFilter(fltrCP1) fltrCP2 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_CP_2", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Charger", Values: []string{"ChargerProfile2"}, @@ -142,10 +142,10 @@ func TestChargerAddFilter(t *testing.T) { } dmCharger.SetFilter(fltrCP2) fltrCPPrefix := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_CP_3", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaPrefix, FieldName: "Charger", Values: []string{"Charger"}, @@ -154,10 +154,10 @@ func TestChargerAddFilter(t *testing.T) { } dmCharger.SetFilter(fltrCPPrefix) fltrCP4 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_CP_4", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"200.00"}, @@ -210,7 +210,7 @@ func TestChargerMatchingChargerProfilesForEvent(t *testing.T) { func TestChargerProcessEvent(t *testing.T) { rpl := []*ChrgSProcessEventReply{ - &ChrgSProcessEventReply{ + { ChargerSProfile: "CPP_1", CGREvent: chargerEvents[0], }, diff --git a/engine/datamanager_it_test.go b/engine/datamanager_it_test.go index 624952ace..e18cef2ba 100644 --- a/engine/datamanager_it_test.go +++ b/engine/datamanager_it_test.go @@ -43,8 +43,8 @@ func TestDMitRedis(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() dataDB, err := NewRedisStorage( fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), - 4, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, - nil, "") + 4, cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + utils.REDIS_MAX_CONNS, nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } diff --git a/engine/filterhelpers.go b/engine/filterhelpers.go index 535003b48..39a8270d7 100644 --- a/engine/filterhelpers.go +++ b/engine/filterhelpers.go @@ -33,7 +33,7 @@ import ( func matchingItemIDsForEvent(ev map[string]interface{}, stringFldIDs, prefixFldIDs *[]string, dm *DataManager, cacheID, itemIDPrefix string, indexedSelects bool) (itemIDs utils.StringMap, err error) { lockID := utils.CacheInstanceToPrefix[cacheID] + itemIDPrefix - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lockID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lockID) defer guardian.Guardian.UnguardIDs(lockID) itemIDs = make(utils.StringMap) if !indexedSelects { diff --git a/engine/filterhelpers_test.go b/engine/filterhelpers_test.go index fd019e751..59f2ec8f7 100644 --- a/engine/filterhelpers_test.go +++ b/engine/filterhelpers_test.go @@ -44,26 +44,32 @@ func TestFilterMatchingItemIDsForEvent(t *testing.T) { t.Errorf("Error: %+v", err) } stringFilter = append(stringFilter, x) - attribStringF := &Filter{Tenant: config.CgrConfig().DefaultTenant, - ID: "stringFilter", Rules: stringFilter} + attribStringF := &Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: "stringFilter", + Rules: stringFilter} dmMatch.SetFilter(attribStringF) x, err = NewFilterRule(MetaPrefix, "Field", []string{"profilePrefix"}) if err != nil { t.Errorf("Error: %+v", err) } prefixFilter = append(prefixFilter, x) - attribPrefF := &Filter{Tenant: config.CgrConfig().DefaultTenant, - ID: "prefFilter", Rules: prefixFilter} + attribPrefF := &Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: "prefFilter", + Rules: prefixFilter} dmMatch.SetFilter(attribPrefF) x, err = NewFilterRule(MetaGreaterOrEqual, "Weight", []string{"200.00"}) if err != nil { t.Errorf("Error: %+v", err) } defaultFilter = append(defaultFilter, x) - attribDefaultF := &Filter{Tenant: config.CgrConfig().DefaultTenant, - ID: "defaultFilter", Rules: defaultFilter} + attribDefaultF := &Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: "defaultFilter", + Rules: defaultFilter} dmMatch.SetFilter(attribDefaultF) - prefix := utils.ConcatenatedKey(config.CgrConfig().DefaultTenant, context) + prefix := utils.ConcatenatedKey(config.CgrConfig().GeneralCfg().DefaultTenant, context) atrRFI := NewFilterIndexer(dmMatch, utils.AttributeProfilePrefix, prefix) atrRFI.IndexTPFilter(FilterToTPFilter(attribStringF), stringFilterID) atrRFI.IndexTPFilter(FilterToTPFilter(attribPrefF), prefixFilterID) diff --git a/engine/filterindexer.go b/engine/filterindexer.go index df69e9c65..ab7a6ea02 100644 --- a/engine/filterindexer.go +++ b/engine/filterindexer.go @@ -103,7 +103,7 @@ func (rfi *FilterIndexer) cacheRemItemType() { // ToDo: tune here by removing pe // StoreIndexes handles storing the indexes to dataDB func (rfi *FilterIndexer) StoreIndexes(commit bool, transactionID string) (err error) { lockID := utils.CacheInstanceToPrefix[utils.PrefixToIndexCache[rfi.itemType]] + rfi.dbKeySuffix - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lockID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lockID) defer guardian.Guardian.UnguardIDs(lockID) if err = rfi.dm.SetFilterIndexes( utils.PrefixToIndexCache[rfi.itemType], rfi.dbKeySuffix, @@ -216,7 +216,7 @@ func (rfi *FilterIndexer) RemoveItemFromIndex(tenant, itemID string, oldFilters Tenant: tenant, ID: itemID, Rules: []*FilterRule{ - &FilterRule{ + { Type: utils.META_NONE, FieldName: utils.META_ANY, Values: []string{utils.META_ANY}, @@ -277,7 +277,7 @@ func createAndIndex(itemPrefix, tenant, context, itemID string, filterIDs []stri Tenant: tenant, ID: itemID, Rules: []*FilterRule{ - &FilterRule{ + { Type: utils.META_NONE, FieldName: utils.META_ANY, Values: []string{utils.META_ANY}, diff --git a/engine/filterindexer_it_test.go b/engine/filterindexer_it_test.go index cbedc14c9..47a7e644e 100644 --- a/engine/filterindexer_it_test.go +++ b/engine/filterindexer_it_test.go @@ -64,8 +64,8 @@ func TestFilterIndexerITRedis(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() redisDB, err := NewRedisStorage( fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), - 4, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, - nil, "") + 4, cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + utils.REDIS_MAX_CONNS, nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } diff --git a/engine/filters.go b/engine/filters.go index d7999409c..f6597c157 100644 --- a/engine/filters.go +++ b/engine/filters.go @@ -68,10 +68,10 @@ func (fS *FilterS) connStatS() (err error) { } fS.statSConns, err = NewRPCPool(rpcclient.POOL_FIRST, fS.cfg.TLSClientKey, fS.cfg.TLSClientCerificate, - fS.cfg.ConnectAttempts, fS.cfg.Reconnects, - fS.cfg.ConnectTimeout, fS.cfg.ReplyTimeout, + fS.cfg.GeneralCfg().ConnectAttempts, fS.cfg.GeneralCfg().Reconnects, + fS.cfg.GeneralCfg().ConnectTimeout, fS.cfg.GeneralCfg().ReplyTimeout, fS.cfg.FilterSCfg().StatSConns, - fS.statSChan, fS.cfg.InternalTtl) + fS.statSChan, fS.cfg.GeneralCfg().InternalTtl) return } @@ -113,7 +113,7 @@ func NewFilterFromInline(tenant, inlnRule string) (f *Filter, err error) { Tenant: tenant, ID: inlnRule, Rules: []*FilterRule{ - &FilterRule{ + { Type: ruleSplt[0], FieldName: ruleSplt[1], Values: strings.Split(ruleSplt[2], utils.INFIELD_SEP)}}, diff --git a/engine/fscdr.go b/engine/fscdr.go index 0cd8f8185..93fff3e09 100644 --- a/engine/fscdr.go +++ b/engine/fscdr.go @@ -142,16 +142,25 @@ func (fsCdr FSCdr) AsCDR(timezone string) *CDR { storCdr.CGRID = fsCdr.getCGRID() storCdr.ToR = utils.VOICE storCdr.OriginID = fsCdr.vars[FS_UUID] - storCdr.OriginHost = utils.FirstNonEmpty(fsCdr.vars[utils.CGROriginHost], fsCdr.vars[FsIPv4]) + storCdr.OriginHost = utils.FirstNonEmpty(fsCdr.vars[utils.CGROriginHost], + fsCdr.vars[FsIPv4]) storCdr.Source = FS_CDR_SOURCE - storCdr.RequestType = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_REQTYPE], fsCdr.cgrCfg.DefaultReqType) - storCdr.Tenant = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_TENANT], fsCdr.cgrCfg.DefaultTenant) - storCdr.Category = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_CATEGORY], fsCdr.cgrCfg.DefaultCategory) - storCdr.Account = fsCdr.firstDefined([]string{utils.CGR_ACCOUNT, FS_USERNAME}, FsUsername) - storCdr.Subject = fsCdr.firstDefined([]string{utils.CGR_SUBJECT, utils.CGR_ACCOUNT, FS_USERNAME}, FsUsername) - storCdr.Destination = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_DESTINATION], fsCdr.vars[FS_CALL_DEST_NR], fsCdr.vars[FS_SIP_REQUSER]) - storCdr.SetupTime, _ = utils.ParseTimeDetectLayout(fsCdr.vars[FS_SETUP_TIME], timezone) // Not interested to process errors, should do them if necessary in a previous step - storCdr.AnswerTime, _ = utils.ParseTimeDetectLayout(fsCdr.vars[FS_ANSWER_TIME], timezone) + storCdr.RequestType = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_REQTYPE], + fsCdr.cgrCfg.GeneralCfg().DefaultReqType) + storCdr.Tenant = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_TENANT], + fsCdr.cgrCfg.GeneralCfg().DefaultTenant) + storCdr.Category = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_CATEGORY], + fsCdr.cgrCfg.GeneralCfg().DefaultCategory) + storCdr.Account = fsCdr.firstDefined([]string{utils.CGR_ACCOUNT, FS_USERNAME}, + FsUsername) + storCdr.Subject = fsCdr.firstDefined([]string{utils.CGR_SUBJECT, + utils.CGR_ACCOUNT, FS_USERNAME}, FsUsername) + storCdr.Destination = utils.FirstNonEmpty(fsCdr.vars[utils.CGR_DESTINATION], + fsCdr.vars[FS_CALL_DEST_NR], fsCdr.vars[FS_SIP_REQUSER]) + storCdr.SetupTime, _ = utils.ParseTimeDetectLayout(fsCdr.vars[FS_SETUP_TIME], + timezone) // Not interested to process errors, should do them if necessary in a previous step + storCdr.AnswerTime, _ = utils.ParseTimeDetectLayout(fsCdr.vars[FS_ANSWER_TIME], + timezone) storCdr.Usage, _ = utils.ParseDurationWithSecs(fsCdr.vars[FS_DURATION]) storCdr.ExtraFields = fsCdr.getExtraFields() storCdr.Cost = -1 diff --git a/engine/lcr.go b/engine/lcr.go index fbfa8838a..132cc67ec 100644 --- a/engine/lcr.go +++ b/engine/lcr.go @@ -75,10 +75,10 @@ func (self *LcrRequest) AsCallDescriptor(timezone string) (*CallDescriptor, erro self.Direction = utils.OUT } if len(self.Tenant) == 0 { - self.Tenant = config.CgrConfig().DefaultTenant + self.Tenant = config.CgrConfig().GeneralCfg().DefaultTenant } if len(self.Category) == 0 { - self.Category = config.CgrConfig().DefaultCategory + self.Category = config.CgrConfig().GeneralCfg().DefaultCategory } if len(self.Subject) == 0 { self.Subject = self.Account diff --git a/engine/lcr_test.go b/engine/lcr_test.go index 0866e007d..022468e6b 100644 --- a/engine/lcr_test.go +++ b/engine/lcr_test.go @@ -238,8 +238,8 @@ func TestLcrRequestAsCallDescriptor(t *testing.T) { lcrReq = &LcrRequest{Account: "2001", Destination: "2002", SetupTime: sTime.String()} eCd := &CallDescriptor{ Direction: utils.OUT, - Tenant: config.CgrConfig().DefaultTenant, - Category: config.CgrConfig().DefaultCategory, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + Category: config.CgrConfig().GeneralCfg().DefaultCategory, Account: lcrReq.Account, Subject: lcrReq.Account, Destination: lcrReq.Destination, @@ -261,9 +261,9 @@ func TestLCRCostSuppliersSlice(t *testing.T) { lcrCost = &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_STATIC, StrategyParams: "ivo12;dan12;rif12", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{Supplier: "*out:tenant12:call:ivo12", Cost: 1.8, Duration: 60 * time.Second}, - &LCRSupplierCost{Supplier: "*out:tenant12:call:dan12", Cost: 0.6, Duration: 60 * time.Second}, - &LCRSupplierCost{Supplier: "*out:tenant12:call:rif12", Cost: 1.2, Duration: 60 * time.Second}, + {Supplier: "*out:tenant12:call:ivo12", Cost: 1.8, Duration: 60 * time.Second}, + {Supplier: "*out:tenant12:call:dan12", Cost: 0.6, Duration: 60 * time.Second}, + {Supplier: "*out:tenant12:call:rif12", Cost: 1.2, Duration: 60 * time.Second}, }, } eSuppls := []string{"ivo12", "dan12", "rif12"} @@ -282,9 +282,9 @@ func TestLCRCostSuppliersString(t *testing.T) { lcrCost = &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_STATIC, StrategyParams: "ivo12;dan12;rif12", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{Supplier: "*out:tenant12:call:ivo12", Cost: 1.8, Duration: 60 * time.Second}, - &LCRSupplierCost{Supplier: "*out:tenant12:call:dan12", Cost: 0.6, Duration: 60 * time.Second}, - &LCRSupplierCost{Supplier: "*out:tenant12:call:rif12", Cost: 1.2, Duration: 60 * time.Second}, + {Supplier: "*out:tenant12:call:ivo12", Cost: 1.8, Duration: 60 * time.Second}, + {Supplier: "*out:tenant12:call:dan12", Cost: 0.6, Duration: 60 * time.Second}, + {Supplier: "*out:tenant12:call:rif12", Cost: 1.2, Duration: 60 * time.Second}, }, } eSupplStr := "ivo12,dan12,rif12" @@ -300,25 +300,25 @@ func TestLCRCostSuppliersLoad(t *testing.T) { lcrCost := &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_LOAD, StrategyParams: "ivo12:10;dan12:3;*default:7", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:ivo12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 3 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, @@ -326,25 +326,25 @@ func TestLCRCostSuppliersLoad(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:dan12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, @@ -352,32 +352,32 @@ func TestLCRCostSuppliersLoad(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:rif12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, @@ -398,25 +398,25 @@ func TestLCRCostSuppliersLoadAllRounded(t *testing.T) { lcrCost := &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_LOAD, StrategyParams: "ivo12:3;dan12:5;*default:2", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:ivo12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 3 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, @@ -424,25 +424,25 @@ func TestLCRCostSuppliersLoadAllRounded(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:dan12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(200 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime.Add(200 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, @@ -450,32 +450,32 @@ func TestLCRCostSuppliersLoadAllRounded(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:rif12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime.Add(400 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime.Add(400 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, @@ -498,25 +498,25 @@ func TestLCRCostSuppliersLoadAllOver(t *testing.T) { lcrCost := &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_LOAD, StrategyParams: "ivo12:2;dan12:4;*default:2", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:ivo12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 3 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, @@ -524,25 +524,25 @@ func TestLCRCostSuppliersLoadAllOver(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:dan12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(200 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime.Add(200 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, @@ -550,32 +550,32 @@ func TestLCRCostSuppliersLoadAllOver(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:rif12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(400 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime.Add(400 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, @@ -598,25 +598,25 @@ func TestLCRCostSuppliersLoadAllOverMisingDefault(t *testing.T) { lcrCost := &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_LOAD, StrategyParams: "ivo12:2;dan12:4", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:ivo12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 3 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, @@ -624,25 +624,25 @@ func TestLCRCostSuppliersLoadAllOverMisingDefault(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:dan12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(200 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime.Add(200 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, @@ -650,32 +650,32 @@ func TestLCRCostSuppliersLoadAllOverMisingDefault(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:rif12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(400 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime.Add(400 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, @@ -698,25 +698,25 @@ func TestLCRCostSuppliersLoadAllOverMisingParams(t *testing.T) { lcrCost := &LCRCost{ Entry: &LCREntry{DestinationId: utils.ANY, RPCategory: "call", Strategy: LCR_STRATEGY_LOAD, StrategyParams: "", Weight: 10.0}, SupplierCosts: []*LCRSupplierCost{ - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:ivo12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 3 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{SetupTime: setupTime}, {SetupTime: setupTime}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, @@ -724,25 +724,25 @@ func TestLCRCostSuppliersLoadAllOverMisingParams(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:dan12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(60 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime.Add(60 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {}, {}, {}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, @@ -750,32 +750,32 @@ func TestLCRCostSuppliersLoadAllOverMisingParams(t *testing.T) { }, }, }, - &LCRSupplierCost{ + { Supplier: "*out:tenant12:call:rif12", supplierQueues: []*CDRStatsQueue{ - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 7 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{}, &QCdr{SetupTime: setupTime.Add(200 * time.Minute)}}, + { + Cdrs: []*QCdr{{}, {}, {SetupTime: setupTime.Add(200 * time.Minute)}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 10 * time.Minute, }, }, - &CDRStatsQueue{ - Cdrs: []*QCdr{&QCdr{}, &QCdr{SetupTime: setupTime}}, + { + Cdrs: []*QCdr{{}, {SetupTime: setupTime}}, conf: &CdrStats{ QueueLength: 0, TimeWindow: 1 * time.Minute, diff --git a/engine/libtest.go b/engine/libtest.go index 39d1b8220..70c553369 100644 --- a/engine/libtest.go +++ b/engine/libtest.go @@ -37,7 +37,7 @@ func InitDataDb(cfg *config.CGRConfig) error { dm, err := ConfigureDataStorage(cfg.DataDbCfg().DataDbType, cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, - cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, cfg.CacheCfg(), cfg.DataDbCfg().DataDbSentinelName) if err != nil { return err @@ -58,7 +58,7 @@ func InitStorDb(cfg *config.CGRConfig) error { storDb, err := ConfigureLoadStorage(cfg.StorDbCfg().StorDBType, cfg.StorDbCfg().StorDBHost, cfg.StorDbCfg().StorDBPort, cfg.StorDbCfg().StorDBName, cfg.StorDbCfg().StorDBUser, - cfg.StorDbCfg().StorDBPass, cfg.DBDataEncoding, + cfg.StorDbCfg().StorDBPass, cfg.GeneralCfg().DBDataEncoding, cfg.StorDbCfg().StorDBMaxOpenConns, cfg.StorDbCfg().StorDBMaxIdleConns, cfg.StorDbCfg().StorDBConnMaxLifetime, cfg.StorDbCfg().StorDBCDRSIndexes) if err != nil { diff --git a/engine/loader_it_test.go b/engine/loader_it_test.go index 9cfce2651..3966f3b81 100644 --- a/engine/loader_it_test.go +++ b/engine/loader_it_test.go @@ -46,19 +46,19 @@ func TestLoaderITConnDataDbs(t *testing.T) { if dataDbCsv, err = ConfigureDataStorage(lCfg.DataDbCfg().DataDbType, lCfg.DataDbCfg().DataDbHost, lCfg.DataDbCfg().DataDbPort, "7", lCfg.DataDbCfg().DataDbUser, lCfg.DataDbCfg().DataDbPass, - lCfg.DBDataEncoding, nil, ""); err != nil { + lCfg.GeneralCfg().DBDataEncoding, nil, ""); err != nil { t.Fatal("Error on dataDb connection: ", err.Error()) } if dataDbStor, err = ConfigureDataStorage(lCfg.DataDbCfg().DataDbType, lCfg.DataDbCfg().DataDbHost, lCfg.DataDbCfg().DataDbPort, "8", lCfg.DataDbCfg().DataDbUser, lCfg.DataDbCfg().DataDbPass, - lCfg.DBDataEncoding, nil, ""); err != nil { + lCfg.GeneralCfg().DBDataEncoding, nil, ""); err != nil { t.Fatal("Error on dataDb connection: ", err.Error()) } if dataDbApier, err = ConfigureDataStorage(lCfg.DataDbCfg().DataDbType, lCfg.DataDbCfg().DataDbHost, lCfg.DataDbCfg().DataDbPort, "9", lCfg.DataDbCfg().DataDbUser, lCfg.DataDbCfg().DataDbPass, - lCfg.DBDataEncoding, nil, ""); err != nil { + lCfg.GeneralCfg().DBDataEncoding, nil, ""); err != nil { t.Fatal("Error on dataDb connection: ", err.Error()) } for _, db := range []Storage{dataDbCsv.DataDB(), dataDbStor.DataDB(), dataDbApier.DataDB(), diff --git a/engine/mapevent_test.go b/engine/mapevent_test.go index 76554375c..6fa9207bb 100644 --- a/engine/mapevent_test.go +++ b/engine/mapevent_test.go @@ -272,9 +272,9 @@ func TestMapEventAsCDR(t *testing.T) { Cost: -1.0, RunID: utils.MetaRaw, ToR: utils.VOICE, - RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, - Category: cfg.DefaultCategory, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, ExtraFields: make(map[string]string), } if rply, err := me.AsCDR(cfg, utils.EmptyString); err != nil { @@ -335,9 +335,9 @@ func TestMapEventAsCDR(t *testing.T) { }, RunID: utils.MetaRaw, ToR: utils.VOICE, - RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, - Category: cfg.DefaultCategory, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, } if rply, err := me.AsCDR(cfg, utils.EmptyString); err != nil { t.Error(err) @@ -368,9 +368,9 @@ func TestMapEventAsCDR(t *testing.T) { }, RunID: utils.MetaRaw, ToR: utils.VOICE, - RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, - Category: cfg.DefaultCategory, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, } if rply, err := me.AsCDR(cfg, utils.EmptyString); err != nil { t.Error(err) diff --git a/engine/onstor_it_test.go b/engine/onstor_it_test.go index f6050da85..cc6820aeb 100644 --- a/engine/onstor_it_test.go +++ b/engine/onstor_it_test.go @@ -95,8 +95,8 @@ func TestOnStorITRedis(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() rdsITdb, err = NewRedisStorage( fmt.Sprintf("%s:%s", cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort), - 4, cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, utils.REDIS_MAX_CONNS, - nil, "") + 4, cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, + utils.REDIS_MAX_CONNS, nil, "") if err != nil { t.Fatal("Could not connect to Redis", err.Error()) } diff --git a/engine/resources.go b/engine/resources.go index 5999f4f92..2a1be30e8 100644 --- a/engine/resources.go +++ b/engine/resources.go @@ -248,7 +248,7 @@ func (rs Resources) allocateResource(ru *ResourceUsage, dryRun bool) (alcMessage return "", utils.ErrResourceUnavailable } lockIDs := utils.PrefixSliceItems(rs.tenatIDsStr(), utils.ResourcesPrefix) - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lockIDs...) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lockIDs...) defer guardian.Guardian.UnguardIDs(lockIDs...) // Simulate resource usage for _, r := range rs { @@ -417,7 +417,7 @@ func (rS *ResourceService) cachedResourcesForEvent(evUUID string) (rs Resources) for i, rTid := range rIDs { lockIDs[i] = utils.ResourcesPrefix + rTid.TenantID() } - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lockIDs...) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lockIDs...) defer guardian.Guardian.UnguardIDs(lockIDs...) for i, rTid := range rIDs { if r, err := rS.dm.GetResource(rTid.Tenant, rTid.ID, true, true, ""); err != nil { diff --git a/engine/resources_test.go b/engine/resources_test.go index ab1c0ef98..8c028e691 100644 --- a/engine/resources_test.go +++ b/engine/resources_test.go @@ -36,8 +36,8 @@ var ( resService *ResourceService dmRES *DataManager resprf = []*ResourceProfile{ - &ResourceProfile{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ResourceProfile1", FilterIDs: []string{"FLTR_RES_1"}, ActivationInterval: &utils.ActivationInterval{ @@ -49,8 +49,8 @@ var ( Weight: 20.00, ThresholdIDs: []string{""}, }, - &ResourceProfile{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ResourceProfile2", // identifier of this resource FilterIDs: []string{"FLTR_RES_2"}, ActivationInterval: &utils.ActivationInterval{ @@ -62,8 +62,8 @@ var ( Weight: 20.00, ThresholdIDs: []string{""}, }, - &ResourceProfile{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ResourceProfile3", FilterIDs: []string{"FLTR_RES_3"}, ActivationInterval: &utils.ActivationInterval{ @@ -77,22 +77,22 @@ var ( }, } resourceTest = []*Resource{ - &Resource{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ResourceProfile1", Usages: map[string]*ResourceUsage{}, TTLIdx: []string{}, rPrf: resprf[0], }, - &Resource{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ResourceProfile2", Usages: map[string]*ResourceUsage{}, TTLIdx: []string{}, rPrf: resprf[1], }, - &Resource{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "ResourceProfile3", Usages: map[string]*ResourceUsage{}, TTLIdx: []string{}, @@ -100,8 +100,8 @@ var ( }, } resEvs = []*utils.CGREvent{ - &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "event1", Event: map[string]interface{}{ "Resources": "ResourceProfile1", @@ -113,8 +113,8 @@ var ( utils.COST: 123.0, }, }, - &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "event2", Event: map[string]interface{}{ "Resources": "ResourceProfile2", @@ -125,8 +125,8 @@ var ( utils.Usage: time.Duration(45 * time.Second), }, }, - &utils.CGREvent{ - Tenant: config.CgrConfig().DefaultTenant, + { + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "event3", Event: map[string]interface{}{ "Resources": "ResourceProfilePrefix", @@ -342,7 +342,7 @@ func TestRSCacheSetGet(t *testing.T) { UsageTTL: time.Duration(1 * time.Millisecond), }, Usages: map[string]*ResourceUsage{ - "RU2": &ResourceUsage{ + "RU2": { Tenant: "cgrates.org", ID: "RU2", ExpiryTime: time.Date(2014, 7, 3, 13, 43, 0, 1, time.UTC), @@ -404,25 +404,25 @@ func TestResourceV1AuthorizeResourceMissingStruct(t *testing.T) { func TestResourceAddFilters(t *testing.T) { fltrRes1 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_RES_1", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Resources", Values: []string{"ResourceProfile1"}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: "UsageInterval", Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Usage, Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"9.0"}, @@ -431,25 +431,25 @@ func TestResourceAddFilters(t *testing.T) { } dmRES.SetFilter(fltrRes1) fltrRes2 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_RES_2", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Resources", Values: []string{"ResourceProfile2"}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: "PddInterval", Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Usage, Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"15.0"}, @@ -458,10 +458,10 @@ func TestResourceAddFilters(t *testing.T) { } dmRES.SetFilter(fltrRes2) fltrRes3 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_RES_3", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaPrefix, FieldName: "Resources", Values: []string{"ResourceProfilePrefix"}, @@ -478,13 +478,13 @@ func TestResourceCachedResourcesForEvent(t *testing.T) { Units: 10.0, } val := []*utils.TenantID{ - &utils.TenantID{ + { Tenant: "cgrates.org", ID: "RL", }, } resources := []*Resource{ - &Resource{ + { Tenant: "cgrates.org", ID: "RL", rPrf: &ResourceProfile{ @@ -502,7 +502,7 @@ func TestResourceCachedResourcesForEvent(t *testing.T) { UsageTTL: time.Duration(1 * time.Millisecond), }, Usages: map[string]*ResourceUsage{ - "RU2": &ResourceUsage{ + "RU2": { Tenant: "cgrates.org", ID: "RU2", ExpiryTime: time.Date(2014, 7, 3, 13, 43, 0, 1, time.UTC), diff --git a/engine/responder.go b/engine/responder.go index eeb467b7c..c6f96fe13 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -585,7 +585,7 @@ func (rs *Responder) Status(arg string, reply *map[string]interface{}) (err erro memstats := new(runtime.MemStats) runtime.ReadMemStats(memstats) response := make(map[string]interface{}) - response[utils.NodeID] = config.CgrConfig().NodeID + response[utils.NodeID] = config.CgrConfig().GeneralCfg().NodeID response["MemoryUsage"] = utils.SizeFmt(float64(memstats.HeapAlloc), "") response[utils.ActiveGoroutines] = runtime.NumGoroutine() response["Footprint"] = utils.SizeFmt(float64(memstats.Sys), "") diff --git a/engine/safevent_test.go b/engine/safevent_test.go index 7caf6d972..3af955d4b 100644 --- a/engine/safevent_test.go +++ b/engine/safevent_test.go @@ -628,9 +628,9 @@ func TestSafEventAsCDR(t *testing.T) { Cost: -1.0, RunID: utils.MetaRaw, ToR: utils.VOICE, - RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, - Category: cfg.DefaultCategory, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, ExtraFields: make(map[string]string), } if rply, err := se.AsCDR(cfg, utils.EmptyString); err != nil { @@ -691,9 +691,9 @@ func TestSafEventAsCDR(t *testing.T) { }, RunID: utils.MetaRaw, ToR: utils.VOICE, - RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, - Category: cfg.DefaultCategory, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, } if rply, err := se.AsCDR(cfg, utils.EmptyString); err != nil { t.Error(err) @@ -724,9 +724,9 @@ func TestSafEventAsCDR(t *testing.T) { }, RunID: utils.MetaRaw, ToR: utils.VOICE, - RequestType: cfg.DefaultReqType, - Tenant: cfg.DefaultTenant, - Category: cfg.DefaultCategory, + RequestType: cfg.GeneralCfg().DefaultReqType, + Tenant: cfg.GeneralCfg().DefaultTenant, + Category: cfg.GeneralCfg().DefaultCategory, } if rply, err := se.AsCDR(cfg, utils.EmptyString); err != nil { t.Error(err) diff --git a/engine/statmetrics.go b/engine/statmetrics.go index d2248a415..3a5e74150 100644 --- a/engine/statmetrics.go +++ b/engine/statmetrics.go @@ -80,7 +80,7 @@ func (asr *StatASR) getValue() float64 { asr.val = utils.Float64Pointer(STATS_NA) } else { asr.val = utils.Float64Pointer(utils.Round((asr.Answered / asr.Count * 100), - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE)) + config.CgrConfig().GeneralCfg().RoundingDecimals, utils.ROUNDING_MIDDLE)) } } return *asr.val @@ -108,7 +108,8 @@ func (asr *StatASR) GetFloat64Value() (val float64) { // AddEvent is part of StatMetric interface func (asr *StatASR) AddEvent(ev *utils.CGREvent) (err error) { var answered bool - if at, err := ev.FieldAsTime(utils.AnswerTime, config.CgrConfig().DefaultTimezone); err != nil && + if at, err := ev.FieldAsTime(utils.AnswerTime, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil && err != utils.ErrNotFound { return err } else if !at.IsZero() { @@ -196,7 +197,8 @@ func (acd *StatACD) GetFloat64Value() (v float64) { func (acd *StatACD) AddEvent(ev *utils.CGREvent) (err error) { var value time.Duration - if at, err := ev.FieldAsTime(utils.AnswerTime, config.CgrConfig().DefaultTimezone); err != nil { + if at, err := ev.FieldAsTime(utils.AnswerTime, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if duration, err := ev.FieldAsDuration(utils.Usage); err != nil && @@ -283,7 +285,8 @@ func (tcd *StatTCD) GetFloat64Value() (v float64) { func (tcd *StatTCD) AddEvent(ev *utils.CGREvent) (err error) { var value time.Duration - if at, err := ev.FieldAsTime(utils.AnswerTime, config.CgrConfig().DefaultTimezone); err != nil { + if at, err := ev.FieldAsTime(utils.AnswerTime, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if duration, err := ev.FieldAsDuration(utils.Usage); err != nil && @@ -343,7 +346,7 @@ func (acc *StatACC) getValue() float64 { acc.val = utils.Float64Pointer(STATS_NA) } else { acc.val = utils.Float64Pointer(utils.Round((acc.Sum / acc.Count), - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE)) + config.CgrConfig().GeneralCfg().RoundingDecimals, utils.ROUNDING_MIDDLE)) } } return *acc.val @@ -369,7 +372,8 @@ func (acc *StatACC) GetFloat64Value() (v float64) { func (acc *StatACC) AddEvent(ev *utils.CGREvent) (err error) { var value float64 - if at, err := ev.FieldAsTime(utils.AnswerTime, config.CgrConfig().DefaultTimezone); err != nil { + if at, err := ev.FieldAsTime(utils.AnswerTime, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if cost, err := ev.FieldAsFloat64(utils.COST); err != nil && @@ -428,7 +432,8 @@ func (tcc *StatTCC) getValue() float64 { tcc.val = utils.Float64Pointer(STATS_NA) } else { tcc.val = utils.Float64Pointer(utils.Round(tcc.Sum, - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE)) + config.CgrConfig().GeneralCfg().RoundingDecimals, + utils.ROUNDING_MIDDLE)) } } return *tcc.val @@ -453,7 +458,8 @@ func (tcc *StatTCC) GetFloat64Value() (v float64) { func (tcc *StatTCC) AddEvent(ev *utils.CGREvent) (err error) { var value float64 - if at, err := ev.FieldAsTime(utils.AnswerTime, config.CgrConfig().DefaultTimezone); err != nil { + if at, err := ev.FieldAsTime(utils.AnswerTime, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { return err } else if !at.IsZero() { if cost, err := ev.FieldAsFloat64(utils.COST); err != nil && @@ -541,7 +547,8 @@ func (pdd *StatPDD) GetFloat64Value() (v float64) { func (pdd *StatPDD) AddEvent(ev *utils.CGREvent) (err error) { var value time.Duration - if at, err := ev.FieldAsTime(utils.AnswerTime, config.CgrConfig().DefaultTimezone); err != nil && + if at, err := ev.FieldAsTime(utils.AnswerTime, + config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil && err != utils.ErrNotFound { return err } else if !at.IsZero() { @@ -665,7 +672,8 @@ func (sum *StatSum) getValue() float64 { sum.val = utils.Float64Pointer(STATS_NA) } else { sum.val = utils.Float64Pointer(utils.Round(sum.Sum, - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE)) + config.CgrConfig().GeneralCfg().RoundingDecimals, + utils.ROUNDING_MIDDLE)) } } return *sum.val @@ -744,7 +752,7 @@ func (avg *StatAverage) getValue() float64 { avg.val = utils.Float64Pointer(STATS_NA) } else { avg.val = utils.Float64Pointer(utils.Round((avg.Sum / avg.Count), - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE)) + config.CgrConfig().GeneralCfg().RoundingDecimals, utils.ROUNDING_MIDDLE)) } } return *avg.val diff --git a/engine/stats.go b/engine/stats.go index a83a17acf..846af5977 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -108,7 +108,7 @@ func (sS *StatService) storeStats() { break // no more keys, backup completed } lkID := utils.StatQueuePrefix + sID - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lkID) if sqIf, ok := Cache.Get(utils.CacheStatQueues, sID); !ok || sqIf == nil { utils.Logger.Warning( fmt.Sprintf("<%s> failed retrieving from cache stat queue with ID: %s", @@ -177,7 +177,7 @@ func (sS *StatService) matchingStatQueuesForEvent(args *StatsArgsProcessEvent) ( continue } lkID := utils.StatQueuePrefix + utils.ConcatenatedKey(sqPrfl.Tenant, sqPrfl.ID) - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lkID) s, err := sS.dm.GetStatQueue(sqPrfl.Tenant, sqPrfl.ID, true, true, "") guardian.Guardian.UnguardIDs(lkID) if err != nil { @@ -235,7 +235,7 @@ func (sS *StatService) processEvent(args *StatsArgsProcessEvent) (statQueueIDs [ for _, sq := range matchSQs { stsIDs = append(stsIDs, sq.ID) lkID := utils.StatQueuePrefix + sq.TenantID() - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lkID) err = sq.ProcessEvent(&args.CGREvent) guardian.Guardian.UnguardIDs(lkID) if err != nil { @@ -334,7 +334,7 @@ func (sS *StatService) V1GetQueueStringMetrics(args *utils.TenantID, reply *map[ return utils.NewErrMandatoryIeMissing(missing...) } lkID := utils.StatQueuePrefix + args.TenantID() - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lkID) defer guardian.Guardian.UnguardIDs(lkID) sq, err := sS.dm.GetStatQueue(args.Tenant, args.ID, true, true, "") if err != nil { @@ -357,7 +357,7 @@ func (sS *StatService) V1GetQueueFloatMetrics(args *utils.TenantID, reply *map[s return utils.NewErrMandatoryIeMissing(missing...) } lkID := utils.StatQueuePrefix + args.TenantID() - guardian.Guardian.GuardIDs(config.CgrConfig().LockingTimeout, lkID) + guardian.Guardian.GuardIDs(config.CgrConfig().GeneralCfg().LockingTimeout, lkID) defer guardian.Guardian.UnguardIDs(lkID) sq, err := sS.dm.GetStatQueue(args.Tenant, args.ID, true, true, "") if err != nil { diff --git a/engine/stats_test.go b/engine/stats_test.go index 6fbe35381..1814a4907 100644 --- a/engine/stats_test.go +++ b/engine/stats_test.go @@ -161,7 +161,7 @@ func TestStatQueuesPopulateService(t *testing.T) { func TestStatQueuesAddFilters(t *testing.T) { fltrSts1 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_STATS_1", Rules: []*FilterRule{ { @@ -188,7 +188,7 @@ func TestStatQueuesAddFilters(t *testing.T) { } dmSTS.SetFilter(fltrSts1) fltrSts2 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_STATS_2", Rules: []*FilterRule{ { @@ -215,7 +215,7 @@ func TestStatQueuesAddFilters(t *testing.T) { } dmSTS.SetFilter(fltrSts2) fltrSts3 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_STATS_3", Rules: []*FilterRule{ { diff --git a/engine/suppliers.go b/engine/suppliers.go index 909ee3044..0d8deff96 100644 --- a/engine/suppliers.go +++ b/engine/suppliers.go @@ -432,7 +432,8 @@ func (args *ArgsGetSuppliers) asOptsGetSuppliers() (opts *optsGetSuppliers, err utils.Destination, utils.SetupTime, utils.Usage}); err != nil { return } - cd, err := NewCallDescriptorFromCGREvent(&args.CGREvent, config.CgrConfig().DefaultTimezone) + cd, err := NewCallDescriptorFromCGREvent(&args.CGREvent, + config.CgrConfig().GeneralCfg().DefaultTimezone) if err != nil { return nil, err } diff --git a/engine/suppliers_test.go b/engine/suppliers_test.go index 28632cec5..099c19297 100644 --- a/engine/suppliers_test.go +++ b/engine/suppliers_test.go @@ -43,7 +43,7 @@ var ( Sorting: utils.MetaWeight, SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -68,7 +68,7 @@ var ( Sorting: utils.MetaWeight, SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier2", FilterIDs: []string{}, AccountIDs: []string{}, @@ -78,7 +78,7 @@ var ( Weight: 20.0, SupplierParameters: "param2", }, - &Supplier{ + { ID: "supplier3", FilterIDs: []string{}, AccountIDs: []string{}, @@ -88,7 +88,7 @@ var ( Weight: 10.0, SupplierParameters: "param3", }, - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -113,7 +113,7 @@ var ( Sorting: utils.MetaWeight, SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -129,7 +129,7 @@ var ( }, } argsGetSuppliers = []*ArgsGetSuppliers{ - &ArgsGetSuppliers{ //matching SupplierProfile1 + { //matching SupplierProfile1 CGREvent: utils.CGREvent{ Tenant: "cgrates.org", ID: "utils.CGREvent1", @@ -142,7 +142,7 @@ var ( }, }, }, - &ArgsGetSuppliers{ //matching SupplierProfile2 + { //matching SupplierProfile2 CGREvent: utils.CGREvent{ Tenant: "cgrates.org", ID: "utils.CGREvent1", @@ -155,7 +155,7 @@ var ( }, }, }, - &ArgsGetSuppliers{ //matching SupplierProfilePrefix + { //matching SupplierProfilePrefix CGREvent: utils.CGREvent{ Tenant: "cgrates.org", ID: "utils.CGREvent1", @@ -164,7 +164,7 @@ var ( }, }, }, - &ArgsGetSuppliers{ //matching + { //matching CGREvent: utils.CGREvent{ Tenant: "cgrates.org", ID: "CGR", @@ -190,7 +190,7 @@ func TestSuppliersSort(t *testing.T) { Sorting: "", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -215,7 +215,7 @@ func TestSuppliersSort(t *testing.T) { Sorting: "", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -242,7 +242,7 @@ func TestSuppliersSort(t *testing.T) { Sorting: "", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -267,7 +267,7 @@ func TestSuppliersSort(t *testing.T) { Sorting: "", SortingParameters: []string{}, Suppliers: []*Supplier{ - &Supplier{ + { ID: "supplier1", FilterIDs: []string{}, AccountIDs: []string{}, @@ -300,8 +300,10 @@ func TestSuppliersPopulateSupplierService(t *testing.T) { t.Errorf("Error: %+v", err) } - splService, err = NewSupplierService(dmSPP, config.CgrConfig().DefaultTimezone, - &FilterS{dm: dmSPP, cfg: defaultCfg}, nil, nil, nil, nil, nil) + splService, err = NewSupplierService(dmSPP, + config.CgrConfig().GeneralCfg().DefaultTimezone, &FilterS{ + dm: dmSPP, + cfg: defaultCfg}, nil, nil, nil, nil, nil) if err != nil { t.Errorf("Error: %+v", err) } @@ -309,20 +311,20 @@ func TestSuppliersPopulateSupplierService(t *testing.T) { func TestSuppliersAddFilters(t *testing.T) { fltrSupp1 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_SUPP_1", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Supplier", Values: []string{"SupplierProfile1"}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: "UsageInterval", Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"9.0"}, @@ -331,20 +333,20 @@ func TestSuppliersAddFilters(t *testing.T) { } dmSPP.SetFilter(fltrSupp1) fltrSupp2 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_SUPP_2", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaString, FieldName: "Supplier", Values: []string{"SupplierProfile2"}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: "PddInterval", Values: []string{(1 * time.Second).String()}, }, - &FilterRule{ + { Type: MetaGreaterOrEqual, FieldName: utils.Weight, Values: []string{"15.0"}, @@ -353,10 +355,10 @@ func TestSuppliersAddFilters(t *testing.T) { } dmSPP.SetFilter(fltrSupp2) fltrSupp3 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_SUPP_3", Rules: []*FilterRule{ - &FilterRule{ + { Type: MetaPrefix, FieldName: "Supplier", Values: []string{"SupplierProfilePrefix"}, @@ -414,7 +416,7 @@ func TestSuppliersSortedForEvent(t *testing.T) { ProfileID: "SupplierProfile1", Sorting: utils.MetaWeight, SortedSuppliers: []*SortedSupplier{ - &SortedSupplier{ + { SupplierID: "supplier1", SortingData: map[string]interface{}{ "Weight": 10.0, @@ -435,21 +437,21 @@ func TestSuppliersSortedForEvent(t *testing.T) { ProfileID: "SupplierProfile2", Sorting: utils.MetaWeight, SortedSuppliers: []*SortedSupplier{ - &SortedSupplier{ + { SupplierID: "supplier1", SortingData: map[string]interface{}{ "Weight": 30.0, }, SupplierParameters: "param1", }, - &SortedSupplier{ + { SupplierID: "supplier2", SortingData: map[string]interface{}{ "Weight": 20.0, }, SupplierParameters: "param2", }, - &SortedSupplier{ + { SupplierID: "supplier3", SortingData: map[string]interface{}{ "Weight": 10.0, @@ -471,7 +473,7 @@ func TestSuppliersSortedForEvent(t *testing.T) { ProfileID: "SupplierProfilePrefix", Sorting: utils.MetaWeight, SortedSuppliers: []*SortedSupplier{ - &SortedSupplier{ + { SupplierID: "supplier1", SortingData: map[string]interface{}{ "Weight": 10.0, @@ -495,14 +497,14 @@ func TestSuppliersSortedForEventWithLimit(t *testing.T) { ProfileID: "SupplierProfile2", Sorting: utils.MetaWeight, SortedSuppliers: []*SortedSupplier{ - &SortedSupplier{ + { SupplierID: "supplier1", SortingData: map[string]interface{}{ "Weight": 30.0, }, SupplierParameters: "param1", }, - &SortedSupplier{ + { SupplierID: "supplier2", SortingData: map[string]interface{}{ "Weight": 20.0, @@ -528,7 +530,7 @@ func TestSuppliersSortedForEventWithOffset(t *testing.T) { ProfileID: "SupplierProfile2", Sorting: utils.MetaWeight, SortedSuppliers: []*SortedSupplier{ - &SortedSupplier{ + { SupplierID: "supplier3", SortingData: map[string]interface{}{ "Weight": 10.0, @@ -554,7 +556,7 @@ func TestSuppliersSortedForEventWithLimitAndOffset(t *testing.T) { ProfileID: "SupplierProfile2", Sorting: utils.MetaWeight, SortedSuppliers: []*SortedSupplier{ - &SortedSupplier{ + { SupplierID: "supplier2", SortingData: map[string]interface{}{ "Weight": 20.0, diff --git a/engine/suretax.go b/engine/suretax.go index e67d3e02b..1245c7b05 100644 --- a/engine/suretax.go +++ b/engine/suretax.go @@ -63,7 +63,7 @@ func NewSureTaxRequest(cdr *CDR, stCfg *config.SureTaxCfg) (*SureTaxRequest, err stReq.ResponseGroup = stCfg.ResponseGroup stReq.ResponseType = stCfg.ResponseType stReq.ItemList = []*STRequestItem{ - &STRequestItem{ + { CustomerNumber: cdr.FieldsAsStringWithRSRFields(stCfg.CustomerNumber), OrigNumber: cdr.FieldsAsStringWithRSRFields(stCfg.OrigNumber), TermNumber: cdr.FieldsAsStringWithRSRFields(stCfg.TermNumber), @@ -183,7 +183,9 @@ func SureTaxProcessCdr(cdr *CDR) error { } if sureTaxClient == nil { // First time used, init the client here tr := &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: config.CgrConfig().HttpSkipTlsVerify}, + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: config.CgrConfig().GeneralCfg().HttpSkipTlsVerify, + }, } sureTaxClient = &http.Client{Transport: tr} } @@ -225,9 +227,13 @@ func SureTaxProcessCdr(cdr *CDR) error { cdr.ExtraInfo = err.Error() } if !stCfg.IncludeLocalCost { - cdr.Cost = utils.Round(totalTax, config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE) + cdr.Cost = utils.Round(totalTax, + config.CgrConfig().GeneralCfg().RoundingDecimals, + utils.ROUNDING_MIDDLE) } else { - cdr.Cost = utils.Round(cdr.Cost+totalTax, config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE) + cdr.Cost = utils.Round(cdr.Cost+totalTax, + config.CgrConfig().GeneralCfg().RoundingDecimals, + utils.ROUNDING_MIDDLE) } // Add response into extra fields to be available for later review cdr.ExtraFields[utils.META_SURETAX] = respFull.D diff --git a/engine/thresholds_test.go b/engine/thresholds_test.go index bc1938ae5..0ed4eb023 100644 --- a/engine/thresholds_test.go +++ b/engine/thresholds_test.go @@ -158,7 +158,7 @@ func TestThresholdsPopulateThresholdService(t *testing.T) { func TestThresholdsAddFilters(t *testing.T) { fltrTh1 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_TH_1", Rules: []*FilterRule{ { @@ -175,7 +175,7 @@ func TestThresholdsAddFilters(t *testing.T) { } dmTH.SetFilter(fltrTh1) fltrTh2 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_TH_2", Rules: []*FilterRule{ { @@ -192,7 +192,7 @@ func TestThresholdsAddFilters(t *testing.T) { } dmTH.SetFilter(fltrTh2) fltrTh3 := &Filter{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: "FLTR_TH_3", Rules: []*FilterRule{ { diff --git a/engine/versions_it_test.go b/engine/versions_it_test.go index 2a950d392..4eacc1ca5 100644 --- a/engine/versions_it_test.go +++ b/engine/versions_it_test.go @@ -48,14 +48,14 @@ func TestVersionsITMongo(t *testing.T) { if dm3, err = ConfigureDataStorage(cfg.DataDbCfg().DataDbType, cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, - cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, cfg.CacheCfg(), ""); err != nil { log.Fatal(err) } storageDb, err = ConfigureStorStorage(cfg.StorDbCfg().StorDBType, cfg.StorDbCfg().StorDBHost, cfg.StorDbCfg().StorDBPort, cfg.StorDbCfg().StorDBName, cfg.StorDbCfg().StorDBUser, - cfg.StorDbCfg().StorDBPass, cfg.DBDataEncoding, + cfg.StorDbCfg().StorDBPass, cfg.GeneralCfg().DBDataEncoding, config.CgrConfig().StorDbCfg().StorDBMaxOpenConns, config.CgrConfig().StorDbCfg().StorDBMaxIdleConns, config.CgrConfig().StorDbCfg().StorDBConnMaxLifetime, @@ -77,7 +77,7 @@ func TestVersionsITRedisMYSQL(t *testing.T) { dm3, err = ConfigureDataStorage(cfg.DataDbCfg().DataDbType, cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, - cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, cfg.CacheCfg(), "") + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, cfg.CacheCfg(), "") if err != nil { log.Fatal(err) } @@ -85,7 +85,7 @@ func TestVersionsITRedisMYSQL(t *testing.T) { storageDb, err = ConfigureStorStorage(cfg.StorDbCfg().StorDBType, cfg.StorDbCfg().StorDBHost, cfg.StorDbCfg().StorDBPort, cfg.StorDbCfg().StorDBName, cfg.StorDbCfg().StorDBUser, - cfg.StorDbCfg().StorDBPass, cfg.DBDataEncoding, + cfg.StorDbCfg().StorDBPass, cfg.GeneralCfg().DBDataEncoding, config.CgrConfig().StorDbCfg().StorDBMaxOpenConns, config.CgrConfig().StorDbCfg().StorDBMaxIdleConns, config.CgrConfig().StorDbCfg().StorDBConnMaxLifetime, @@ -107,14 +107,14 @@ func TestVersionsITRedisPostgres(t *testing.T) { dm3, err = ConfigureDataStorage(cfg.DataDbCfg().DataDbType, cfg.DataDbCfg().DataDbHost, cfg.DataDbCfg().DataDbPort, cfg.DataDbCfg().DataDbName, cfg.DataDbCfg().DataDbUser, - cfg.DataDbCfg().DataDbPass, cfg.DBDataEncoding, cfg.CacheCfg(), "") + cfg.DataDbCfg().DataDbPass, cfg.GeneralCfg().DBDataEncoding, cfg.CacheCfg(), "") if err != nil { log.Fatal(err) } storageDb, err = ConfigureStorStorage(cfg.StorDbCfg().StorDBType, cfg.StorDbCfg().StorDBHost, cfg.StorDbCfg().StorDBPort, cfg.StorDbCfg().StorDBName, cfg.StorDbCfg().StorDBUser, - cfg.StorDbCfg().StorDBPass, cfg.DBDataEncoding, + cfg.StorDbCfg().StorDBPass, cfg.GeneralCfg().DBDataEncoding, config.CgrConfig().StorDbCfg().StorDBMaxOpenConns, config.CgrConfig().StorDbCfg().StorDBMaxIdleConns, config.CgrConfig().StorDbCfg().StorDBConnMaxLifetime, diff --git a/general_tests/cdrs_onlexp_it_test.go b/general_tests/cdrs_onlexp_it_test.go index f64586733..6a40e470b 100644 --- a/general_tests/cdrs_onlexp_it_test.go +++ b/general_tests/cdrs_onlexp_it_test.go @@ -62,11 +62,11 @@ func TestCDRsOnExpInitCdrDb(t *testing.T) { if err := engine.InitStorDb(cdrsSlaveCfg); err != nil { t.Fatal(err) } - if err := os.RemoveAll(cdrsMasterCfg.FailedPostsDir); err != nil { - t.Fatal("Error removing folder: ", cdrsMasterCfg.FailedPostsDir, err) + if err := os.RemoveAll(cdrsMasterCfg.GeneralCfg().FailedPostsDir); err != nil { + t.Fatal("Error removing folder: ", cdrsMasterCfg.GeneralCfg().FailedPostsDir, err) } - if err := os.Mkdir(cdrsMasterCfg.FailedPostsDir, 0700); err != nil { + if err := os.Mkdir(cdrsMasterCfg.GeneralCfg().FailedPostsDir, 0700); err != nil { t.Error(err) } @@ -226,9 +226,9 @@ func TestCDRsOnExpAMQPReplication(t *testing.T) { func TestCDRsOnExpHTTPPosterFileFailover(t *testing.T) { time.Sleep(time.Duration(2 * time.Second)) failoverContent := []byte(`OriginID=httpjsonrpc1`) - filesInDir, _ := ioutil.ReadDir(cdrsMasterCfg.FailedPostsDir) + filesInDir, _ := ioutil.ReadDir(cdrsMasterCfg.GeneralCfg().FailedPostsDir) if len(filesInDir) == 0 { - t.Fatalf("No files in directory: %s", cdrsMasterCfg.FailedPostsDir) + t.Fatalf("No files in directory: %s", cdrsMasterCfg.GeneralCfg().FailedPostsDir) } var foundFile bool var fileName string @@ -242,7 +242,7 @@ func TestCDRsOnExpHTTPPosterFileFailover(t *testing.T) { if !foundFile { t.Fatal("Could not find the file in folder") } - filePath := path.Join(cdrsMasterCfg.FailedPostsDir, fileName) + filePath := path.Join(cdrsMasterCfg.GeneralCfg().FailedPostsDir, fileName) if readBytes, err := ioutil.ReadFile(filePath); err != nil { t.Error(err) } else if !reflect.DeepEqual(failoverContent, readBytes) { // Checking just the prefix should do since some content is dynamic @@ -256,9 +256,9 @@ func TestCDRsOnExpHTTPPosterFileFailover(t *testing.T) { func TestCDRsOnExpAMQPPosterFileFailover(t *testing.T) { time.Sleep(time.Duration(10 * time.Second)) failoverContent := []byte(`{"CGRID":"57548d485d61ebcba55afbe5d939c82a8e9ff670"}`) - filesInDir, _ := ioutil.ReadDir(cdrsMasterCfg.FailedPostsDir) + filesInDir, _ := ioutil.ReadDir(cdrsMasterCfg.GeneralCfg().FailedPostsDir) if len(filesInDir) == 0 { - t.Fatalf("No files in directory: %s", cdrsMasterCfg.FailedPostsDir) + t.Fatalf("No files in directory: %s", cdrsMasterCfg.GeneralCfg().FailedPostsDir) } var foundFile bool var fileName string @@ -272,7 +272,7 @@ func TestCDRsOnExpAMQPPosterFileFailover(t *testing.T) { if !foundFile { t.Fatal("Could not find the file in folder") } - filePath := path.Join(cdrsMasterCfg.FailedPostsDir, fileName) + filePath := path.Join(cdrsMasterCfg.GeneralCfg().FailedPostsDir, fileName) if readBytes, err := ioutil.ReadFile(filePath); err != nil { t.Error(err) } else if !reflect.DeepEqual(failoverContent, readBytes) { // Checking just the prefix should do since some content is dynamic diff --git a/general_tests/sentinel_it_test.go b/general_tests/sentinel_it_test.go index b5fe3c8f1..35d1c4853 100755 --- a/general_tests/sentinel_it_test.go +++ b/general_tests/sentinel_it_test.go @@ -165,7 +165,7 @@ func testRedisSentinelInsertion(t *testing.T) { Contexts: []string{utils.MetaSessionS, utils.MetaCDRs}, FilterIDs: []string{"*string:Account:1001"}, Attributes: []*engine.Attribute{ - &engine.Attribute{ + { FieldName: utils.Subject, Initial: utils.ANY, Substitute: config.NewRSRParsersMustCompile("1001", true), diff --git a/migrator/accounts.go b/migrator/accounts.go index a56bce916..34170418c 100755 --- a/migrator/accounts.go +++ b/migrator/accounts.go @@ -243,7 +243,8 @@ func (v1Acc v1Account) V1toV3Account() (ac *engine.Account) { balVal := oldBal.Value if newBalKey == utils.VOICE { balVal = utils.Round(balVal/float64(time.Second), - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE) + config.CgrConfig().GeneralCfg().RoundingDecimals, + utils.ROUNDING_MIDDLE) } // check default to set new id ac.BalanceMap[newBalKey][index] = &engine.Balance{ @@ -384,7 +385,8 @@ func (v2Acc v2Account) V2toV3Account() (ac *engine.Account) { balVal := oldBal.Value if balType == utils.VOICE { balVal = utils.Round(balVal*float64(time.Second), - config.CgrConfig().RoundingDecimals, utils.ROUNDING_MIDDLE) + config.CgrConfig().GeneralCfg().RoundingDecimals, + utils.ROUNDING_MIDDLE) } // check default to set new id ac.BalanceMap[balType][index] = &engine.Balance{ diff --git a/migrator/accounts2_it_test.go b/migrator/accounts2_it_test.go index 57ef5ded9..568c865ce 100755 --- a/migrator/accounts2_it_test.go +++ b/migrator/accounts2_it_test.go @@ -66,7 +66,7 @@ func testAcc2ITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(acc2CfgIn.DataDbCfg().DataDbType, acc2CfgIn.DataDbCfg().DataDbHost, acc2CfgIn.DataDbCfg().DataDbPort, acc2CfgIn.DataDbCfg().DataDbName, acc2CfgIn.DataDbCfg().DataDbUser, - acc2CfgIn.DataDbCfg().DataDbPass, acc2CfgIn.DBDataEncoding, + acc2CfgIn.DataDbCfg().DataDbPass, acc2CfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { t.Error(err) @@ -74,7 +74,7 @@ func testAcc2ITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(acc2CfgOut.DataDbCfg().DataDbType, acc2CfgOut.DataDbCfg().DataDbHost, acc2CfgOut.DataDbCfg().DataDbPort, acc2CfgOut.DataDbCfg().DataDbName, acc2CfgOut.DataDbCfg().DataDbUser, - acc2CfgOut.DataDbCfg().DataDbPass, acc2CfgOut.DBDataEncoding, + acc2CfgOut.DataDbCfg().DataDbPass, acc2CfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { t.Error(err) diff --git a/migrator/accounts_it_test.go b/migrator/accounts_it_test.go index 2f4b47b2a..fcd17deb8 100755 --- a/migrator/accounts_it_test.go +++ b/migrator/accounts_it_test.go @@ -141,7 +141,7 @@ func testAccITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(accCfgIn.DataDbCfg().DataDbType, accCfgIn.DataDbCfg().DataDbHost, accCfgIn.DataDbCfg().DataDbPort, accCfgIn.DataDbCfg().DataDbName, accCfgIn.DataDbCfg().DataDbUser, - accCfgIn.DataDbCfg().DataDbPass, accCfgIn.DBDataEncoding, + accCfgIn.DataDbCfg().DataDbPass, accCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -149,7 +149,7 @@ func testAccITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(accCfgOut.DataDbCfg().DataDbType, accCfgOut.DataDbCfg().DataDbHost, accCfgOut.DataDbCfg().DataDbPort, accCfgOut.DataDbCfg().DataDbName, accCfgOut.DataDbCfg().DataDbUser, - accCfgOut.DataDbCfg().DataDbPass, accCfgOut.DBDataEncoding, + accCfgOut.DataDbCfg().DataDbPass, accCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) diff --git a/migrator/action_it_test.go b/migrator/action_it_test.go index 93b96cedd..ee506e833 100644 --- a/migrator/action_it_test.go +++ b/migrator/action_it_test.go @@ -139,7 +139,7 @@ func testActITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(actCfgIn.DataDbCfg().DataDbType, actCfgIn.DataDbCfg().DataDbHost, actCfgIn.DataDbCfg().DataDbPort, actCfgIn.DataDbCfg().DataDbName, actCfgIn.DataDbCfg().DataDbUser, - actCfgIn.DataDbCfg().DataDbPass, actCfgIn.DBDataEncoding, + actCfgIn.DataDbCfg().DataDbPass, actCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -147,7 +147,7 @@ func testActITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(actCfgOut.DataDbCfg().DataDbType, actCfgOut.DataDbCfg().DataDbHost, actCfgOut.DataDbCfg().DataDbPort, actCfgOut.DataDbCfg().DataDbName, actCfgOut.DataDbCfg().DataDbUser, - actCfgOut.DataDbCfg().DataDbPass, actCfgOut.DBDataEncoding, + actCfgOut.DataDbCfg().DataDbPass, actCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) diff --git a/migrator/action_plan_it_test.go b/migrator/action_plan_it_test.go index 75e65c58f..ab4bccf08 100644 --- a/migrator/action_plan_it_test.go +++ b/migrator/action_plan_it_test.go @@ -138,7 +138,7 @@ func testActPlnITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(actPlnCfgIn.DataDbCfg().DataDbType, actPlnCfgIn.DataDbCfg().DataDbHost, actPlnCfgIn.DataDbCfg().DataDbPort, actPlnCfgIn.DataDbCfg().DataDbName, actPlnCfgIn.DataDbCfg().DataDbUser, - actPlnCfgIn.DataDbCfg().DataDbPass, actPlnCfgIn.DBDataEncoding, + actPlnCfgIn.DataDbCfg().DataDbPass, actPlnCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -146,7 +146,7 @@ func testActPlnITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(actPlnCfgOut.DataDbCfg().DataDbType, actPlnCfgOut.DataDbCfg().DataDbHost, actPlnCfgOut.DataDbCfg().DataDbPort, actPlnCfgOut.DataDbCfg().DataDbName, actPlnCfgOut.DataDbCfg().DataDbUser, - actPlnCfgOut.DataDbCfg().DataDbPass, actPlnCfgOut.DBDataEncoding, + actPlnCfgOut.DataDbCfg().DataDbPass, actPlnCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) diff --git a/migrator/attributes.go b/migrator/attributes.go index beb34ea75..70cb14ae0 100644 --- a/migrator/attributes.go +++ b/migrator/attributes.go @@ -46,7 +46,7 @@ type v1AttributeProfile struct { func (m *Migrator) migrateCurrentAttributeProfile() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.AttributeProfilePrefix) if err != nil { return err diff --git a/migrator/attributes_it_test.go b/migrator/attributes_it_test.go index 8e9411dea..1b4c1f484 100755 --- a/migrator/attributes_it_test.go +++ b/migrator/attributes_it_test.go @@ -157,7 +157,7 @@ func testAttrITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(attrCfgIn.DataDbCfg().DataDbType, attrCfgIn.DataDbCfg().DataDbHost, attrCfgIn.DataDbCfg().DataDbPort, attrCfgIn.DataDbCfg().DataDbName, attrCfgIn.DataDbCfg().DataDbUser, - attrCfgIn.DataDbCfg().DataDbPass, attrCfgIn.DBDataEncoding, + attrCfgIn.DataDbCfg().DataDbPass, attrCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -165,7 +165,7 @@ func testAttrITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(attrCfgOut.DataDbCfg().DataDbType, attrCfgOut.DataDbCfg().DataDbHost, attrCfgOut.DataDbCfg().DataDbPort, attrCfgOut.DataDbCfg().DataDbName, attrCfgOut.DataDbCfg().DataDbUser, - attrCfgOut.DataDbCfg().DataDbPass, attrCfgOut.DBDataEncoding, + attrCfgOut.DataDbCfg().DataDbPass, attrCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) diff --git a/migrator/chargers.go b/migrator/chargers.go index a69a8167b..98cae1e78 100755 --- a/migrator/chargers.go +++ b/migrator/chargers.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentCharger() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ChargerProfilePrefix) if err != nil { return err diff --git a/migrator/filters.go b/migrator/filters.go index 9806e44f6..729dc7c9b 100644 --- a/migrator/filters.go +++ b/migrator/filters.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentRequestFilter() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.FilterPrefix) if err != nil { return err diff --git a/migrator/resource.go b/migrator/resource.go index f9bd40ece..bf5427f93 100644 --- a/migrator/resource.go +++ b/migrator/resource.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentResource() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ResourceProfilesPrefix) if err != nil { return err diff --git a/migrator/sharedgroup_it_test.go b/migrator/sharedgroup_it_test.go index 3786f7522..16425f649 100644 --- a/migrator/sharedgroup_it_test.go +++ b/migrator/sharedgroup_it_test.go @@ -138,7 +138,7 @@ func testShrGrpITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(shrGrpCfgIn.DataDbCfg().DataDbType, shrGrpCfgIn.DataDbCfg().DataDbHost, shrGrpCfgIn.DataDbCfg().DataDbPort, shrGrpCfgIn.DataDbCfg().DataDbName, shrGrpCfgIn.DataDbCfg().DataDbUser, - shrGrpCfgIn.DataDbCfg().DataDbPass, shrGrpCfgIn.DBDataEncoding, + shrGrpCfgIn.DataDbCfg().DataDbPass, shrGrpCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -146,7 +146,7 @@ func testShrGrpITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(shrGrpCfgOut.DataDbCfg().DataDbType, shrGrpCfgOut.DataDbCfg().DataDbHost, shrGrpCfgOut.DataDbCfg().DataDbPort, shrGrpCfgOut.DataDbCfg().DataDbName, shrGrpCfgOut.DataDbCfg().DataDbUser, - shrGrpCfgOut.DataDbCfg().DataDbPass, shrGrpCfgOut.DBDataEncoding, + shrGrpCfgOut.DataDbCfg().DataDbPass, shrGrpCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) diff --git a/migrator/stats.go b/migrator/stats.go index db07d4384..0db15d41b 100644 --- a/migrator/stats.go +++ b/migrator/stats.go @@ -61,7 +61,7 @@ type v1Stats []*v1Stat func (m *Migrator) migrateCurrentStats() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant //StatQueue ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.StatQueuePrefix) if err != nil { @@ -328,12 +328,15 @@ func (v1Sts v1Stat) AsStatQP() (filter *engine.Filter, sq *engine.StatQueue, stq } filters = append(filters, x) } - filter = &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: v1Sts.Id, Rules: filters} + filter = &engine.Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: v1Sts.Id, + Rules: filters} stq = &engine.StatQueueProfile{ ID: v1Sts.Id, QueueLength: v1Sts.QueueLength, Metrics: []*utils.MetricWithParams{}, - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, Blocker: false, Stored: false, ThresholdIDs: []string{}, @@ -343,16 +346,17 @@ func (v1Sts v1Stat) AsStatQP() (filter *engine.Filter, sq *engine.StatQueue, stq stq.Stored = true } if len(v1Sts.Triggers) != 0 { - for i, _ := range v1Sts.Triggers { + for i := range v1Sts.Triggers { stq.ThresholdIDs = append(stq.ThresholdIDs, v1Sts.Triggers[i].ID) } } - sq = &engine.StatQueue{Tenant: config.CgrConfig().DefaultTenant, + sq = &engine.StatQueue{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: v1Sts.Id, SQMetrics: make(map[string]engine.StatMetric), } if len(v1Sts.Metrics) != 0 { - for i, _ := range v1Sts.Metrics { + for i := range v1Sts.Metrics { if !strings.HasPrefix(v1Sts.Metrics[i], "*") { v1Sts.Metrics[i] = "*" + v1Sts.Metrics[i] } diff --git a/migrator/stats_it_test.go b/migrator/stats_it_test.go index 2c51101c0..66d7d6624 100755 --- a/migrator/stats_it_test.go +++ b/migrator/stats_it_test.go @@ -104,7 +104,7 @@ func testStsITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(stsCfgIn.DataDbCfg().DataDbType, stsCfgIn.DataDbCfg().DataDbHost, stsCfgIn.DataDbCfg().DataDbPort, stsCfgIn.DataDbCfg().DataDbName, stsCfgIn.DataDbCfg().DataDbUser, - stsCfgIn.DataDbCfg().DataDbPass, stsCfgIn.DBDataEncoding, + stsCfgIn.DataDbCfg().DataDbPass, stsCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -112,13 +112,12 @@ func testStsITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(stsCfgOut.DataDbCfg().DataDbType, stsCfgOut.DataDbCfg().DataDbHost, stsCfgOut.DataDbCfg().DataDbPort, stsCfgOut.DataDbCfg().DataDbName, stsCfgOut.DataDbCfg().DataDbUser, - stsCfgOut.DataDbCfg().DataDbPass, stsCfgOut.DBDataEncoding, + stsCfgOut.DataDbCfg().DataDbPass, stsCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) } - stsMigrator, err = NewMigrator(dataDBIn, dataDBOut, - nil, nil, + stsMigrator, err = NewMigrator(dataDBIn, dataDBOut, nil, nil, false, false, false) if err != nil { log.Fatal(err) @@ -196,7 +195,10 @@ func testStsITMigrateAndMove(t *testing.T) { "PddInterval", []string{v1Sts.PddInterval[0].String()}) filters = append(filters, x) - filter := &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: v1Sts.Id, Rules: filters} + filter := &engine.Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: v1Sts.Id, + Rules: filters} sqp := &engine.StatQueueProfile{ Tenant: "cgrates.org", @@ -215,7 +217,8 @@ func testStsITMigrateAndMove(t *testing.T) { Weight: float64(0), MinItems: 0, } - sq := &engine.StatQueue{Tenant: config.CgrConfig().DefaultTenant, + sq := &engine.StatQueue{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: v1Sts.Id, SQMetrics: make(map[string]engine.StatMetric), } diff --git a/migrator/stats_test.go b/migrator/stats_test.go index a4b31b8ec..cb48be9e4 100644 --- a/migrator/stats_test.go +++ b/migrator/stats_test.go @@ -81,7 +81,10 @@ func TestV1StatsAsStats(t *testing.T) { x, _ = engine.NewFilterRule(engine.MetaGreaterOrEqual, "PddInterval", []string{v1Sts.PddInterval[0].String()}) filters = append(filters, x) - filter := &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: v1Sts.Id, Rules: filters} + filter := &engine.Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: v1Sts.Id, + Rules: filters} sqp := &engine.StatQueueProfile{ Tenant: "cgrates.org", @@ -90,9 +93,9 @@ func TestV1StatsAsStats(t *testing.T) { QueueLength: 10, TTL: time.Duration(0) * time.Second, Metrics: []*utils.MetricWithParams{ - &utils.MetricWithParams{MetricID: "*asr", Parameters: ""}, - &utils.MetricWithParams{MetricID: "*acd", Parameters: ""}, - &utils.MetricWithParams{MetricID: "*acc", Parameters: ""}, + {MetricID: "*asr", Parameters: ""}, + {MetricID: "*acd", Parameters: ""}, + {MetricID: "*acc", Parameters: ""}, }, Blocker: false, ThresholdIDs: []string{"TestB"}, diff --git a/migrator/suppliers.go b/migrator/suppliers.go index b2908f2b1..5dcfad0e1 100644 --- a/migrator/suppliers.go +++ b/migrator/suppliers.go @@ -29,7 +29,7 @@ import ( func (m *Migrator) migrateCurrentSupplierProfile() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.SupplierProfilePrefix) if err != nil { return err diff --git a/migrator/thresholds.go b/migrator/thresholds.go index 9ca0a8a61..2c3971f4c 100644 --- a/migrator/thresholds.go +++ b/migrator/thresholds.go @@ -49,7 +49,7 @@ type v2ActionTriggers []*v2ActionTrigger func (m *Migrator) migrateCurrentThresholds() (err error) { var ids []string - tenant := config.CgrConfig().DefaultTenant + tenant := config.CgrConfig().GeneralCfg().DefaultTenant //Thresholds ids, err = m.dmIN.DataManager().DataDB().GetKeysForPrefix(utils.ThresholdPrefix) if err != nil { @@ -266,20 +266,25 @@ func (v2ATR v2ActionTrigger) AsThreshold() (thp *engine.ThresholdProfile, th *en filters = append(filters, x) } - filter = &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: *v2ATR.Balance.ID, Rules: filters} + filter = &engine.Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: *v2ATR.Balance.ID, + Rules: filters} filterIDS = append(filterIDS, filter.ID) } thp = &engine.ThresholdProfile{ - ID: v2ATR.ID, - Tenant: config.CgrConfig().DefaultTenant, - Weight: v2ATR.Weight, - ActivationInterval: &utils.ActivationInterval{ActivationTime: v2ATR.ActivationDate, ExpiryTime: v2ATR.ExpirationDate}, - FilterIDs: []string{}, - MinSleep: v2ATR.MinSleep, + ID: v2ATR.ID, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + Weight: v2ATR.Weight, + ActivationInterval: &utils.ActivationInterval{ + ActivationTime: v2ATR.ActivationDate, + ExpiryTime: v2ATR.ExpirationDate}, + FilterIDs: []string{}, + MinSleep: v2ATR.MinSleep, } th = &engine.Threshold{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: v2ATR.ID, } return thp, th, filter, nil @@ -368,17 +373,20 @@ func AsThreshold2(v2ATR engine.ActionTrigger) (thp *engine.ThresholdProfile, th } filters = append(filters, x) } - filter = &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: *v2ATR.Balance.ID, Rules: filters} + filter = &engine.Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: *v2ATR.Balance.ID, + Rules: filters} filterIDS = append(filterIDS, filter.ID) } th = &engine.Threshold{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: v2ATR.ID, } thp = &engine.ThresholdProfile{ ID: v2ATR.ID, - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, Weight: v2ATR.Weight, ActivationInterval: &utils.ActivationInterval{ActivationTime: v2ATR.ActivationDate, ExpiryTime: v2ATR.ExpirationDate}, FilterIDs: filterIDS, diff --git a/migrator/thresholds_it_test.go b/migrator/thresholds_it_test.go index a88f6fd52..9e2cab62e 100644 --- a/migrator/thresholds_it_test.go +++ b/migrator/thresholds_it_test.go @@ -139,7 +139,7 @@ func testTrsITConnect(t *testing.T) { dataDBIn, err := NewMigratorDataDB(trsCfgIn.DataDbCfg().DataDbType, trsCfgIn.DataDbCfg().DataDbHost, trsCfgIn.DataDbCfg().DataDbPort, trsCfgIn.DataDbCfg().DataDbName, trsCfgIn.DataDbCfg().DataDbUser, - trsCfgIn.DataDbCfg().DataDbPass, trsCfgIn.DBDataEncoding, + trsCfgIn.DataDbCfg().DataDbPass, trsCfgIn.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -147,7 +147,7 @@ func testTrsITConnect(t *testing.T) { dataDBOut, err := NewMigratorDataDB(trsCfgOut.DataDbCfg().DataDbType, trsCfgOut.DataDbCfg().DataDbHost, trsCfgOut.DataDbCfg().DataDbPort, trsCfgOut.DataDbCfg().DataDbName, trsCfgOut.DataDbCfg().DataDbUser, - trsCfgOut.DataDbCfg().DataDbPass, trsCfgOut.DBDataEncoding, + trsCfgOut.DataDbCfg().DataDbPass, trsCfgOut.GeneralCfg().DBDataEncoding, config.CgrConfig().CacheCfg(), "") if err != nil { log.Fatal(err) @@ -200,7 +200,7 @@ func testTrsITMigrateAndMove(t *testing.T) { tresProf := &engine.ThresholdProfile{ ID: v1trs.ID, - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, Weight: v1trs.Weight, ActivationInterval: &utils.ActivationInterval{v1trs.ExpirationDate, v1trs.ActivationDate}, MinSleep: v1trs.MinSleep, diff --git a/migrator/thresholds_test.go b/migrator/thresholds_test.go index 20ca41b64..1d14ad246 100644 --- a/migrator/thresholds_test.go +++ b/migrator/thresholds_test.go @@ -58,18 +58,21 @@ func Testv2ActionTriggerAsThreshold(t *testing.T) { x, _ = engine.NewFilterRule(engine.MetaPrefix, "TimingIDs", v2ATR.Balance.TimingIDs.Slice()) filters = append(filters, x) - filter := &engine.Filter{Tenant: config.CgrConfig().DefaultTenant, ID: *v2ATR.Balance.ID, Rules: filters} + filter := &engine.Filter{ + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, + ID: *v2ATR.Balance.ID, + Rules: filters} thp := &engine.ThresholdProfile{ ID: v2ATR.ID, - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, Blocker: false, Weight: v2ATR.Weight, ActivationInterval: &utils.ActivationInterval{v2ATR.ExpirationDate, v2ATR.ActivationDate}, MinSleep: v2ATR.MinSleep, } th := &engine.Threshold{ - Tenant: config.CgrConfig().DefaultTenant, + Tenant: config.CgrConfig().GeneralCfg().DefaultTenant, ID: v2ATR.ID, } diff --git a/sessions/sessions.go b/sessions/sessions.go index 3f51a772a..d61ae620a 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -115,7 +115,7 @@ func NewSMGeneric(cgrCfg *config.CGRConfig, rals, resS, thdS, pSessionsIndex: make(map[string]map[string]map[string]utils.StringMap), pSessionsRIndex: make(map[string][]*riFieldNameVal), sessionTerminators: make(map[string]*smgSessionTerminator), - responseCache: utils.NewResponseCache(cgrCfg.ResponseCacheTTL)} + responseCache: utils.NewResponseCache(cgrCfg.GeneralCfg().ResponseCacheTTL)} } type SMGeneric struct { @@ -614,7 +614,7 @@ func (smg *SMGeneric) sessionStart(tnt string, evStart *engine.SafEvent, } } return nil, nil - }, smg.cgrCfg.LockingTimeout, cgrID) + }, smg.cgrCfg.GeneralCfg().LockingTimeout, cgrID) return } @@ -652,7 +652,7 @@ func (smg *SMGeneric) sessionEnd(cgrID string, usage time.Duration) error { } } return nil, nil - }, smg.cgrCfg.LockingTimeout, cgrID) + }, smg.cgrCfg.GeneralCfg().LockingTimeout, cgrID) return err } @@ -687,7 +687,7 @@ func (smg *SMGeneric) sessionRelocate(initialID, cgrID, newOriginID string) erro } } return nil, nil - }, smg.cgrCfg.LockingTimeout, initialID) + }, smg.cgrCfg.GeneralCfg().LockingTimeout, initialID) return err } @@ -1249,7 +1249,7 @@ func (smg *SMGeneric) BiRPCV1GetMaxUsage(clnt rpcclient.RpcClientConnection, ev engine.MapEvent, maxUsage *float64) error { maxUsageDur, err := smg.GetMaxUsage( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev)) if err != nil { return utils.NewErrServerError(err) @@ -1267,7 +1267,7 @@ func (smg *SMGeneric) BiRPCV2GetMaxUsage(clnt rpcclient.RpcClientConnection, ev engine.MapEvent, maxUsage *time.Duration) error { maxUsageDur, err := smg.GetMaxUsage( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev)) if err != nil { return utils.NewErrServerError(err) @@ -1281,7 +1281,7 @@ func (smg *SMGeneric) BiRPCV1InitiateSession(clnt rpcclient.RpcClientConnection, ev engine.MapEvent, maxUsage *float64) (err error) { var minMaxUsage time.Duration tnt := utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant) + smg.cgrCfg.GeneralCfg().DefaultTenant) if minMaxUsage, err = smg.InitiateSession(tnt, engine.NewSafEvent(ev), clnt, ""); err != nil { if err != rpcclient.ErrSessionNotFound { @@ -1310,7 +1310,7 @@ func (smg *SMGeneric) BiRPCV2InitiateSession(clnt rpcclient.RpcClientConnection, var minMaxUsage time.Duration if minMaxUsage, err = smg.InitiateSession( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev), clnt, ""); err != nil { if err != rpcclient.ErrSessionNotFound { err = utils.NewErrServerError(err) @@ -1328,7 +1328,7 @@ func (smg *SMGeneric) BiRPCV1UpdateSession(clnt rpcclient.RpcClientConnection, var minMaxUsage time.Duration if minMaxUsage, err = smg.UpdateSession( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev), clnt, ""); err != nil { if err != rpcclient.ErrSessionNotFound { err = utils.NewErrServerError(err) @@ -1349,7 +1349,7 @@ func (smg *SMGeneric) BiRPCV2UpdateSession(clnt rpcclient.RpcClientConnection, var minMaxUsage time.Duration if minMaxUsage, err = smg.UpdateSession( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev), clnt, ""); err != nil { if err != rpcclient.ErrSessionNotFound { err = utils.NewErrServerError(err) @@ -1365,7 +1365,7 @@ func (smg *SMGeneric) BiRPCV1TerminateSession(clnt rpcclient.RpcClientConnection ev engine.MapEvent, reply *string) (err error) { if err = smg.TerminateSession( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev), clnt, ""); err != nil { if err != rpcclient.ErrSessionNotFound { err = utils.NewErrServerError(err) @@ -1381,7 +1381,7 @@ func (smg *SMGeneric) BiRPCV1ChargeEvent(clnt rpcclient.RpcClientConnection, ev engine.MapEvent, maxUsage *float64) error { if minMaxUsage, err := smg.ChargeEvent( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev)); err != nil { return utils.NewErrServerError(err) } else { @@ -1395,7 +1395,7 @@ func (smg *SMGeneric) BiRPCV2ChargeEvent(clnt rpcclient.RpcClientConnection, ev engine.MapEvent, maxUsage *time.Duration) error { if minMaxUsage, err := smg.ChargeEvent( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev)); err != nil { return utils.NewErrServerError(err) } else { @@ -1409,7 +1409,7 @@ func (smg *SMGeneric) BiRPCV1ProcessCDR(clnt rpcclient.RpcClientConnection, ev engine.MapEvent, reply *string) error { if err := smg.ProcessCDR( utils.FirstNonEmpty(ev.GetStringIgnoreErrors(utils.Tenant), - smg.cgrCfg.DefaultTenant), + smg.cgrCfg.GeneralCfg().DefaultTenant), engine.NewSafEvent(ev)); err != nil { return utils.NewErrServerError(err) } @@ -1511,8 +1511,9 @@ func (smg *SMGeneric) BiRPCV1ReplicateActiveSessions(clnt rpcclient.RpcClientCon args ArgsReplicateSessions, reply *string) (err error) { smgConns := smg.smgReplConns if len(args.Connections) != 0 { - if smgConns, err = NewSessionReplicationConns(args.Connections, smg.cgrCfg.Reconnects, - smg.cgrCfg.ConnectTimeout, smg.cgrCfg.ReplyTimeout); err != nil { + if smgConns, err = NewSessionReplicationConns(args.Connections, + smg.cgrCfg.GeneralCfg().Reconnects, smg.cgrCfg.GeneralCfg().ConnectTimeout, + smg.cgrCfg.GeneralCfg().ReplyTimeout); err != nil { return } } @@ -1530,8 +1531,9 @@ func (smg *SMGeneric) BiRPCV1ReplicatePassiveSessions(clnt rpcclient.RpcClientCo args ArgsReplicateSessions, reply *string) (err error) { smgConns := smg.smgReplConns if len(args.Connections) != 0 { - if smgConns, err = NewSessionReplicationConns(args.Connections, smg.cgrCfg.Reconnects, - smg.cgrCfg.ConnectTimeout, smg.cgrCfg.ReplyTimeout); err != nil { + if smgConns, err = NewSessionReplicationConns(args.Connections, + smg.cgrCfg.GeneralCfg().Reconnects, smg.cgrCfg.GeneralCfg().ConnectTimeout, + smg.cgrCfg.GeneralCfg().ReplyTimeout); err != nil { return } } @@ -1626,7 +1628,7 @@ func (smg *SMGeneric) BiRPCv1AuthorizeEvent(clnt rpcclient.RpcClientConnection, return utils.NewErrMandatoryIeMissing("subsystems") } if args.CGREvent.Tenant == "" { - args.CGREvent.Tenant = smg.cgrCfg.DefaultTenant + args.CGREvent.Tenant = smg.cgrCfg.GeneralCfg().DefaultTenant } if args.CGREvent.ID == "" { args.CGREvent.ID = utils.GenUUID() @@ -1847,7 +1849,7 @@ func (smg *SMGeneric) BiRPCv1InitiateSession(clnt rpcclient.RpcClientConnection, return utils.NewErrMandatoryIeMissing("subsystems") } if args.CGREvent.Tenant == "" { - args.CGREvent.Tenant = smg.cgrCfg.DefaultTenant + args.CGREvent.Tenant = smg.cgrCfg.GeneralCfg().DefaultTenant } if args.CGREvent.ID == "" { args.CGREvent.ID = utils.GenUUID() @@ -2031,7 +2033,7 @@ func (smg *SMGeneric) BiRPCv1UpdateSession(clnt rpcclient.RpcClientConnection, return utils.NewErrMandatoryIeMissing("subsystems") } if args.CGREvent.Tenant == "" { - args.CGREvent.Tenant = smg.cgrCfg.DefaultTenant + args.CGREvent.Tenant = smg.cgrCfg.GeneralCfg().DefaultTenant } if args.CGREvent.ID == "" { args.CGREvent.ID = utils.GenUUID() @@ -2098,7 +2100,7 @@ func (smg *SMGeneric) BiRPCv1TerminateSession(clnt rpcclient.RpcClientConnection return utils.NewErrMandatoryIeMissing("subsystems") } if args.CGREvent.Tenant == "" { - args.CGREvent.Tenant = smg.cgrCfg.DefaultTenant + args.CGREvent.Tenant = smg.cgrCfg.GeneralCfg().DefaultTenant } if args.CGREvent.ID == "" { args.CGREvent.ID = utils.GenUUID() @@ -2227,7 +2229,7 @@ func (v1Rply *V1ProcessEventReply) AsNavigableMap( func (smg *SMGeneric) BiRPCv1ProcessEvent(clnt rpcclient.RpcClientConnection, args *V1ProcessEventArgs, rply *V1ProcessEventReply) (err error) { if args.CGREvent.Tenant == "" { - args.CGREvent.Tenant = smg.cgrCfg.DefaultTenant + args.CGREvent.Tenant = smg.cgrCfg.GeneralCfg().DefaultTenant } if args.CGREvent.ID == "" { args.CGREvent.ID = utils.GenUUID()