From 976cd20713d6f16fa836ec2726ded6f40c603a46 Mon Sep 17 00:00:00 2001 From: TeoV Date: Wed, 31 Jan 2018 19:19:03 +0200 Subject: [PATCH] SM_Cost -> SessionsCost and update FSEvent and KamEvent --- agents/fsevent.go | 20 ++- agents/fsevent_test.go | 95 ++++++++++++++ agents/kamevent.go | 76 +++++++++++ agents/kamevent_test.go | 122 +++++++++++++++++- config/config.go | 4 +- config/config_defaults.go | 2 +- config/config_json_test.go | 8 +- config/libconfig_json.go | 26 ++-- data/conf/cgrates/cgrates.json | 2 +- data/storage/migrator/mysql_tables_update.sql | 6 +- data/storage/migrator/pg_tables_update.sql | 22 ++-- data/storage/mysql/create_cdrs_tables.sql | 4 +- data/storage/postgres/create_cdrs_tables.sql | 20 +-- engine/models.go | 6 +- engine/storage_mongo_datadb.go | 6 +- engine/storage_mongo_stordb.go | 6 +- engine/storage_sql.go | 11 +- utils/consts.go | 2 +- 18 files changed, 374 insertions(+), 64 deletions(-) diff --git a/agents/fsevent.go b/agents/fsevent.go index 92475c30d..b797e335a 100644 --- a/agents/fsevent.go +++ b/agents/fsevent.go @@ -370,12 +370,18 @@ func (fsev FSEvent) AsMapStringInterface(timezone string) map[string]interface{} // V1AuthorizeArgs returns the arguments used in SMGv1.Authorize func (fsev FSEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { + timezone := config.CgrConfig().DefaultTimezone + sTime, err := fsev.GetSetupTime(utils.META_DEFAULT, timezone) + if err != nil { + return + } args = &sessions.V1AuthorizeArgs{ // defaults GetMaxUsage: true, CGREvent: utils.CGREvent{ Tenant: fsev.GetTenant(utils.META_DEFAULT), ID: utils.UUIDSha1Prefix(), - Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), + Time: &sTime, + Event: fsev.AsMapStringInterface(timezone), }, } subsystems, has := fsev[VarCGRSubsystems] @@ -399,11 +405,17 @@ func (fsev FSEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { // V1InitSessionArgs returns the arguments used in SessionSv1.InitSession func (fsev FSEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { + timezone := config.CgrConfig().DefaultTimezone + sTime, err := fsev.GetSetupTime(utils.META_DEFAULT, timezone) + if err != nil { + return + } args = &sessions.V1InitSessionArgs{ // defaults InitSession: true, CGREvent: utils.CGREvent{ Tenant: fsev.GetTenant(utils.META_DEFAULT), ID: utils.UUIDSha1Prefix(), + Time: &sTime, Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), }, } @@ -425,11 +437,17 @@ func (fsev FSEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { // V1TerminateSessionArgs returns the arguments used in SMGv1.TerminateSession func (fsev FSEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionArgs) { + timezone := config.CgrConfig().DefaultTimezone + sTime, err := fsev.GetSetupTime(utils.META_DEFAULT, timezone) + if err != nil { + return + } args = &sessions.V1TerminateSessionArgs{ // defaults TerminateSession: true, CGREvent: utils.CGREvent{ Tenant: fsev.GetTenant(utils.META_DEFAULT), ID: utils.UUIDSha1Prefix(), + Time: &sTime, Event: fsev.AsMapStringInterface(config.CgrConfig().DefaultTimezone), }, } diff --git a/agents/fsevent_test.go b/agents/fsevent_test.go index 0c49ef1bd..d00c2ceeb 100644 --- a/agents/fsevent_test.go +++ b/agents/fsevent_test.go @@ -24,6 +24,7 @@ import ( "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/sessions" "github.com/cgrates/cgrates/utils" ) @@ -635,3 +636,97 @@ func TestSliceAsFsArray(t *testing.T) { // Make sure processing of the hangup event produces the same output as FS-JSON CDR func TestSyncFsEventWithJsonCdr(t *testing.T) { } + +func TestFsEvV1AuthorizeArgs(t *testing.T) { + timezone := config.CgrConfig().DefaultTimezone + ev := NewFSEvent(hangupEv) + sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) + if err != nil { + t.Error(err) + } + expected := &sessions.V1AuthorizeArgs{ + GetMaxUsage: true, + CGREvent: utils.CGREvent{ + Tenant: ev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Time: &sTime, + Event: ev.AsMapStringInterface(timezone), + }, + } + rcv := ev.V1AuthorizeArgs() + if !reflect.DeepEqual(expected.CGREvent.Tenant, rcv.CGREvent.Tenant) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Tenant, rcv.CGREvent.Tenant) + } else if !reflect.DeepEqual(expected.CGREvent.Time, rcv.CGREvent.Time) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Time, rcv.CGREvent.Time) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.GetMaxUsage, rcv.GetMaxUsage) { + t.Errorf("Expecting: %+v, received: %+v", expected.GetMaxUsage, rcv.GetMaxUsage) + } else if !reflect.DeepEqual(expected.GetSuppliers, rcv.GetSuppliers) { + t.Errorf("Expecting: %+v, received: %+v", expected.GetSuppliers, rcv.GetSuppliers) + } else if !reflect.DeepEqual(expected.GetAttributes, rcv.GetAttributes) { + t.Errorf("Expecting: %+v, received: %+v", expected.GetAttributes, rcv.GetAttributes) + } +} + +func TestFsEvV1InitSessionArgs(t *testing.T) { + timezone := config.CgrConfig().DefaultTimezone + ev := NewFSEvent(hangupEv) + sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) + if err != nil { + t.Error(err) + } + expected := &sessions.V1InitSessionArgs{ + InitSession: true, + CGREvent: utils.CGREvent{ + Tenant: ev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Time: &sTime, + Event: ev.AsMapStringInterface(timezone), + }, + } + rcv := ev.V1InitSessionArgs() + if !reflect.DeepEqual(expected.CGREvent.Tenant, rcv.CGREvent.Tenant) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Tenant, rcv.CGREvent.Tenant) + } else if !reflect.DeepEqual(expected.CGREvent.Time, rcv.CGREvent.Time) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Time, rcv.CGREvent.Time) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.InitSession, rcv.InitSession) { + t.Errorf("Expecting: %+v, received: %+v", expected.InitSession, rcv.InitSession) + } +} + +func TestFsEvV1TerminateSessionArgs(t *testing.T) { + timezone := config.CgrConfig().DefaultTimezone + ev := NewFSEvent(hangupEv) + sTime, err := ev.GetSetupTime(utils.META_DEFAULT, timezone) + if err != nil { + t.Error(err) + } + expected := &sessions.V1TerminateSessionArgs{ + TerminateSession: true, + CGREvent: utils.CGREvent{ + Tenant: ev.GetTenant(utils.META_DEFAULT), + ID: utils.UUIDSha1Prefix(), + Time: &sTime, + Event: ev.AsMapStringInterface(timezone), + }, + } + rcv := ev.V1TerminateSessionArgs() + if !reflect.DeepEqual(expected.CGREvent.Tenant, rcv.CGREvent.Tenant) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Tenant, rcv.CGREvent.Tenant) + } else if !reflect.DeepEqual(expected.CGREvent.Time, rcv.CGREvent.Time) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Time, rcv.CGREvent.Time) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.TerminateSession, rcv.TerminateSession) { + t.Errorf("Expecting: %+v, received: %+v", expected.TerminateSession, rcv.TerminateSession) + } +} diff --git a/agents/kamevent.go b/agents/kamevent.go index f16c56091..a7909ac76 100644 --- a/agents/kamevent.go +++ b/agents/kamevent.go @@ -21,6 +21,7 @@ package agents import ( "encoding/json" "strings" + "time" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" @@ -154,12 +155,37 @@ func (kev KamEvent) String() string { } func (kev KamEvent) V1AuthorizeArgs() (args *sessions.V1AuthorizeArgs) { + timezone := config.CgrConfig().DefaultTimezone + var sTime time.Time + switch kev[EVENT] { + case CGR_AUTH_REQUEST: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.SetupTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + case CGR_CALL_START: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.AnswerTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + case CGR_CALL_END: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.AnswerTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + default: // no/unsupported event + return + } args = &sessions.V1AuthorizeArgs{ GetMaxUsage: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kev[utils.Tenant], config.CgrConfig().DefaultTenant), ID: utils.UUIDSha1Prefix(), + Time: &sTime, Event: kev.AsMapStringInterface(), }, } @@ -214,12 +240,37 @@ func (kev KamEvent) AsKamAuthReply(authArgs *sessions.V1AuthorizeArgs, // V1InitSessionArgs returns the arguments used in SessionSv1.InitSession func (kev KamEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { + timezone := config.CgrConfig().DefaultTimezone + var sTime time.Time + switch kev[EVENT] { + case CGR_AUTH_REQUEST: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.SetupTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + case CGR_CALL_START: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.AnswerTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + case CGR_CALL_END: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.AnswerTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + default: // no/unsupported event + return + } args = &sessions.V1InitSessionArgs{ // defaults InitSession: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kev[utils.Tenant], config.CgrConfig().DefaultTenant), ID: utils.UUIDSha1Prefix(), + Time: &sTime, Event: kev.AsMapStringInterface(), }, } @@ -241,12 +292,37 @@ func (kev KamEvent) V1InitSessionArgs() (args *sessions.V1InitSessionArgs) { // V1TerminateSessionArgs returns the arguments used in SMGv1.TerminateSession func (kev KamEvent) V1TerminateSessionArgs() (args *sessions.V1TerminateSessionArgs) { + timezone := config.CgrConfig().DefaultTimezone + var sTime time.Time + switch kev[EVENT] { + case CGR_AUTH_REQUEST: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.SetupTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + case CGR_CALL_START: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.AnswerTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + case CGR_CALL_END: + sTimePrv, err := utils.ParseTimeDetectLayout(kev[utils.AnswerTime], timezone) + if err != nil { + return + } + sTime = sTimePrv + default: // no/unsupported event + return + } args = &sessions.V1TerminateSessionArgs{ // defaults TerminateSession: true, CGREvent: utils.CGREvent{ Tenant: utils.FirstNonEmpty(kev[utils.Tenant], config.CgrConfig().DefaultTenant), ID: utils.UUIDSha1Prefix(), + Time: &sTime, Event: kev.AsMapStringInterface(), }, } diff --git a/agents/kamevent_test.go b/agents/kamevent_test.go index 1e4cfd59f..fbd10987f 100644 --- a/agents/kamevent_test.go +++ b/agents/kamevent_test.go @@ -21,6 +21,8 @@ import ( "reflect" "testing" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/sessions" "github.com/cgrates/cgrates/utils" ) @@ -35,7 +37,7 @@ func TestNewKamEvent(t *testing.T) { "from_tag":"bf71ad59", "to_tag":"7351fecf", "cgr_reqtype":"*postpaid", - "cgr_account":"1001", + "cgr_account":"1001", "cgr_destination":"1002", "cgr_answertime":"1419839310", "cgr_duration":"3", @@ -56,3 +58,121 @@ func TestNewKamEvent(t *testing.T) { t.Error("Received: ", kamEv) } } + +func TestKamEvV1AuthorizeArgs(t *testing.T) { + timezone := config.CgrConfig().DefaultTimezone + kamEv := KamEvent{"event": "CGR_CALL_END", + "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", + "from_tag": "bf71ad59", "to_tag": "7351fecf", + "cgr_reqtype": utils.META_POSTPAID, "cgr_account": "1001", + "cgr_destination": "1002", "cgr_answertime": "1419839310", + "cgr_duration": "3", "cgr_pdd": "4", + utils.CGR_SUPPLIER: "supplier2", + utils.CGR_DISCONNECT_CAUSE: "200"} + sTime, err := utils.ParseTimeDetectLayout(kamEv[utils.AnswerTime], timezone) + if err != nil { + return + } + expected := &sessions.V1AuthorizeArgs{ + GetMaxUsage: true, + CGREvent: utils.CGREvent{ + Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], + config.CgrConfig().DefaultTenant), + ID: utils.UUIDSha1Prefix(), + Time: &sTime, + Event: kamEv.AsMapStringInterface(), + }, + } + rcv := kamEv.V1AuthorizeArgs() + if !reflect.DeepEqual(expected.CGREvent.Tenant, rcv.CGREvent.Tenant) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Tenant, rcv.CGREvent.Tenant) + } else if !reflect.DeepEqual(expected.CGREvent.Time, rcv.CGREvent.Time) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Time, rcv.CGREvent.Time) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.GetMaxUsage, rcv.GetMaxUsage) { + t.Errorf("Expecting: %+v, received: %+v", expected.GetMaxUsage, rcv.GetMaxUsage) + } else if !reflect.DeepEqual(expected.GetSuppliers, rcv.GetSuppliers) { + t.Errorf("Expecting: %+v, received: %+v", expected.GetSuppliers, rcv.GetSuppliers) + } else if !reflect.DeepEqual(expected.GetAttributes, rcv.GetAttributes) { + t.Errorf("Expecting: %+v, received: %+v", expected.GetAttributes, rcv.GetAttributes) + } +} + +func TestKamEvV1InitSessionArgs(t *testing.T) { + timezone := config.CgrConfig().DefaultTimezone + kamEv := KamEvent{"event": "CGR_CALL_END", + "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", + "from_tag": "bf71ad59", "to_tag": "7351fecf", + "cgr_reqtype": utils.META_POSTPAID, "cgr_account": "1001", + "cgr_destination": "1002", "cgr_answertime": "1419839310", + "cgr_duration": "3", "cgr_pdd": "4", + utils.CGR_SUPPLIER: "supplier2", + utils.CGR_DISCONNECT_CAUSE: "200"} + sTime, err := utils.ParseTimeDetectLayout(kamEv[utils.AnswerTime], timezone) + if err != nil { + return + } + expected := &sessions.V1InitSessionArgs{ + InitSession: true, + CGREvent: utils.CGREvent{ + Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], + config.CgrConfig().DefaultTenant), + ID: utils.UUIDSha1Prefix(), + Time: &sTime, + Event: kamEv.AsMapStringInterface(), + }, + } + rcv := kamEv.V1InitSessionArgs() + if !reflect.DeepEqual(expected.CGREvent.Tenant, rcv.CGREvent.Tenant) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Tenant, rcv.CGREvent.Tenant) + } else if !reflect.DeepEqual(expected.CGREvent.Time, rcv.CGREvent.Time) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Time, rcv.CGREvent.Time) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.InitSession, rcv.InitSession) { + t.Errorf("Expecting: %+v, received: %+v", expected.InitSession, rcv.InitSession) + } +} + +func TestKamEvV1TerminateSessionArgs(t *testing.T) { + timezone := config.CgrConfig().DefaultTimezone + kamEv := KamEvent{"event": "CGR_CALL_END", + "callid": "46c01a5c249b469e76333fc6bfa87f6a@0:0:0:0:0:0:0:0", + "from_tag": "bf71ad59", "to_tag": "7351fecf", + "cgr_reqtype": utils.META_POSTPAID, "cgr_account": "1001", + "cgr_destination": "1002", "cgr_answertime": "1419839310", + "cgr_duration": "3", "cgr_pdd": "4", + utils.CGR_SUPPLIER: "supplier2", + utils.CGR_DISCONNECT_CAUSE: "200"} + sTime, err := utils.ParseTimeDetectLayout(kamEv[utils.AnswerTime], timezone) + if err != nil { + return + } + expected := &sessions.V1TerminateSessionArgs{ + TerminateSession: true, + CGREvent: utils.CGREvent{ + Tenant: utils.FirstNonEmpty(kamEv[utils.Tenant], + config.CgrConfig().DefaultTenant), + ID: utils.UUIDSha1Prefix(), + Time: &sTime, + Event: kamEv.AsMapStringInterface(), + }, + } + rcv := kamEv.V1TerminateSessionArgs() + if !reflect.DeepEqual(expected.CGREvent.Tenant, rcv.CGREvent.Tenant) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Tenant, rcv.CGREvent.Tenant) + } else if !reflect.DeepEqual(expected.CGREvent.Time, rcv.CGREvent.Time) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Time, rcv.CGREvent.Time) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.CGREvent.Event, rcv.CGREvent.Event) { + t.Errorf("Expecting: %+v, received: %+v", expected.CGREvent.Event, rcv.CGREvent.Event) + } else if !reflect.DeepEqual(expected.TerminateSession, rcv.TerminateSession) { + t.Errorf("Expecting: %+v, received: %+v", expected.TerminateSession, rcv.TerminateSession) + } +} diff --git a/config/config.go b/config/config.go index 4b7b4ec7a..861566535 100755 --- a/config/config.go +++ b/config/config.go @@ -1026,8 +1026,8 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) { if jsnCdrsCfg.Store_cdrs != nil { self.CDRSStoreCdrs = *jsnCdrsCfg.Store_cdrs } - if jsnCdrsCfg.Sm_cost_retries != nil { - self.CDRSSMCostRetries = *jsnCdrsCfg.Sm_cost_retries + if jsnCdrsCfg.Sessions_cost_retries != nil { + self.CDRSSMCostRetries = *jsnCdrsCfg.Sessions_cost_retries } if jsnCdrsCfg.Rals_conns != nil { self.CDRSRaterConns = make([]*HaPoolConfig, len(*jsnCdrsCfg.Rals_conns)) diff --git a/config/config_defaults.go b/config/config_defaults.go index 505251bb4..ac70c6b22 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -164,7 +164,7 @@ const CGRATES_CFG_JSON = ` "enabled": false, // start the CDR Server service: "extra_fields": [], // extra fields to store in CDRs for non-generic CDRs "store_cdrs": true, // store cdrs in storDb - "sm_cost_retries": 5, // number of queries to sm_costs before recalculating CDR + "sessions_cost_retries": 5, // number of queries to sessions_costs before recalculating CDR "rals_conns": [ {"address": "*internal"} // address where to reach the Rater for cost calculation, empty to disable functionality: <""|*internal|x.y.z.y:1234> ], diff --git a/config/config_json_test.go b/config/config_json_test.go index 38da9c90d..d56244848 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -266,10 +266,10 @@ func TestDfSchedulerJsonCfg(t *testing.T) { func TestDfCdrsJsonCfg(t *testing.T) { eCfg := &CdrsJsonCfg{ - Enabled: utils.BoolPointer(false), - Extra_fields: &[]string{}, - Store_cdrs: utils.BoolPointer(true), - Sm_cost_retries: utils.IntPointer(5), + Enabled: utils.BoolPointer(false), + Extra_fields: &[]string{}, + Store_cdrs: utils.BoolPointer(true), + Sessions_cost_retries: utils.IntPointer(5), Rals_conns: &[]*HaPoolJsonCfg{ &HaPoolJsonCfg{ Address: utils.StringPointer("*internal"), diff --git a/config/libconfig_json.go b/config/libconfig_json.go index acc7953f8..97cda944d 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -99,19 +99,19 @@ type SchedulerJsonCfg struct { // Cdrs config section type CdrsJsonCfg struct { - Enabled *bool - Extra_fields *[]string - Store_cdrs *bool - Sm_cost_retries *int - Rals_conns *[]*HaPoolJsonCfg - Pubsubs_conns *[]*HaPoolJsonCfg - Attributes_conns *[]*HaPoolJsonCfg - Users_conns *[]*HaPoolJsonCfg - Aliases_conns *[]*HaPoolJsonCfg - Cdrstats_conns *[]*HaPoolJsonCfg - Thresholds_conns *[]*HaPoolJsonCfg - Stats_conns *[]*HaPoolJsonCfg - Online_cdr_exports *[]string + Enabled *bool + Extra_fields *[]string + Store_cdrs *bool + Sessions_cost_retries *int + Rals_conns *[]*HaPoolJsonCfg + Pubsubs_conns *[]*HaPoolJsonCfg + Attributes_conns *[]*HaPoolJsonCfg + Users_conns *[]*HaPoolJsonCfg + Aliases_conns *[]*HaPoolJsonCfg + Cdrstats_conns *[]*HaPoolJsonCfg + Thresholds_conns *[]*HaPoolJsonCfg + Stats_conns *[]*HaPoolJsonCfg + Online_cdr_exports *[]string } type CdrReplicationJsonCfg struct { diff --git a/data/conf/cgrates/cgrates.json b/data/conf/cgrates/cgrates.json index 12a8b74c3..11d078e55 100644 --- a/data/conf/cgrates/cgrates.json +++ b/data/conf/cgrates/cgrates.json @@ -111,7 +111,7 @@ // "enabled": false, // start the CDR Server service: // "extra_fields": [], // extra fields to store in CDRs for non-generic CDRs // "store_cdrs": true, // store cdrs in storDb -// "sm_cost_retries": 5, // number of queries to sm_costs before recalculating CDR +// "sessions_cost_retries": 5, // number of queries to sessions_cost before recalculating CDR // "rals_conns": [ // {"address": "*internal"} // address where to reach the Rater for cost calculation, empty to disable functionality: <""|*internal|x.y.z.y:1234> // ], diff --git a/data/storage/migrator/mysql_tables_update.sql b/data/storage/migrator/mysql_tables_update.sql index 25007ef41..990979154 100755 --- a/data/storage/migrator/mysql_tables_update.sql +++ b/data/storage/migrator/mysql_tables_update.sql @@ -38,8 +38,8 @@ CREATE TABLE cdrs ( UNIQUE KEY cdrrun (cgrid, run_id, origin_id) ); -DROP TABLE IF EXISTS sm_costs; -CREATE TABLE sm_costs ( +DROP TABLE IF EXISTS sessions_costs; +CREATE TABLE sessions_costs ( id int(11) NOT NULL AUTO_INCREMENT, cgrid char(40) NOT NULL, run_id varchar(64) NOT NULL, @@ -68,4 +68,4 @@ CREATE TABLE versions ( `version` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `item` (`item`) -); \ No newline at end of file +); diff --git a/data/storage/migrator/pg_tables_update.sql b/data/storage/migrator/pg_tables_update.sql index 01eed390e..bd64aa87b 100755 --- a/data/storage/migrator/pg_tables_update.sql +++ b/data/storage/migrator/pg_tables_update.sql @@ -40,8 +40,8 @@ DROP INDEX IF EXISTS deleted_at_cp_idx; CREATE INDEX deleted_at_cp_idx ON cdrs (deleted_at); -DROP TABLE IF EXISTS sm_costs; -CREATE TABLE sm_costs ( +DROP TABLE IF EXISTS sessions_costs; +CREATE TABLE sessions_costs ( id SERIAL PRIMARY KEY, cgrid CHAR(40) NOT NULL, run_id VARCHAR(64) NOT NULL, @@ -54,14 +54,14 @@ CREATE TABLE sm_costs ( deleted_at TIMESTAMP WITH TIME ZONE NULL, UNIQUE (cgrid, run_id) ); -DROP INDEX IF EXISTS cgrid_smcost_idx; -CREATE INDEX cgrid_smcost_idx ON sm_costs (cgrid, run_id); -DROP INDEX IF EXISTS origin_smcost_idx; -CREATE INDEX origin_smcost_idx ON sm_costs (origin_host, origin_id); -DROP INDEX IF EXISTS run_origin_smcost_idx; -CREATE INDEX run_origin_smcost_idx ON sm_costs (run_id, origin_id); -DROP INDEX IF EXISTS deleted_at_smcost_idx; -CREATE INDEX deleted_at_smcost_idx ON sm_costs (deleted_at); +DROP INDEX IF EXISTS cgrid_sessionscost_idx; +CREATE INDEX cgrid_sessionscost_idx ON sessions_costs (cgrid, run_id); +DROP INDEX IF EXISTS origin_sessionscost_idx; +CREATE INDEX origin_sessionscost_idx ON sessions_costs (origin_host, origin_id); +DROP INDEX IF EXISTS run_origin_sessionscost_idx; +CREATE INDEX run_origin_sessionscost_idx ON sessions_costs (run_id, origin_id); +DROP INDEX IF EXISTS deleted_at_sessionscost_idx; +CREATE INDEX deleted_at_sessionscost_idx ON sessions_costs (deleted_at); -- -- Table structure for table `versions` @@ -80,4 +80,4 @@ CREATE TABLE versions ( ALTER TABLE cdrs RENAME COLUMN usage to usage_old; ALTER TABLE cdrs ADD usage NUMERIC(30); UPDATE cdrs SET usage = usage_old * 1000000000 WHERE usage_old IS NOT NULL; -ALTER TABLE cdrs DROP COLUMN usage_old; \ No newline at end of file +ALTER TABLE cdrs DROP COLUMN usage_old; diff --git a/data/storage/mysql/create_cdrs_tables.sql b/data/storage/mysql/create_cdrs_tables.sql index cbaa2028d..2f943bda8 100644 --- a/data/storage/mysql/create_cdrs_tables.sql +++ b/data/storage/mysql/create_cdrs_tables.sql @@ -32,8 +32,8 @@ CREATE TABLE cdrs ( UNIQUE KEY cdrrun (cgrid, run_id, origin_id) ); -DROP TABLE IF EXISTS sm_costs; -CREATE TABLE sm_costs ( +DROP TABLE IF EXISTS sessions_costs; +CREATE TABLE sessions_costs ( id int(11) NOT NULL AUTO_INCREMENT, cgrid varchar(40) NOT NULL, run_id varchar(64) NOT NULL, diff --git a/data/storage/postgres/create_cdrs_tables.sql b/data/storage/postgres/create_cdrs_tables.sql index a155d2eed..40f9dbc3b 100644 --- a/data/storage/postgres/create_cdrs_tables.sql +++ b/data/storage/postgres/create_cdrs_tables.sql @@ -35,8 +35,8 @@ DROP INDEX IF EXISTS deleted_at_cp_idx; CREATE INDEX deleted_at_cp_idx ON cdrs (deleted_at); -DROP TABLE IF EXISTS sm_costs; -CREATE TABLE sm_costs ( +DROP TABLE IF EXISTS sessions_costs; +CREATE TABLE sessions_costs ( id SERIAL PRIMARY KEY, cgrid VARCHAR(40) NOT NULL, run_id VARCHAR(64) NOT NULL, @@ -49,11 +49,11 @@ CREATE TABLE sm_costs ( deleted_at TIMESTAMP WITH TIME ZONE NULL, UNIQUE (cgrid, run_id) ); -DROP INDEX IF EXISTS cgrid_smcost_idx; -CREATE INDEX cgrid_smcost_idx ON sm_costs (cgrid, run_id); -DROP INDEX IF EXISTS origin_smcost_idx; -CREATE INDEX origin_smcost_idx ON sm_costs (origin_host, origin_id); -DROP INDEX IF EXISTS run_origin_smcost_idx; -CREATE INDEX run_origin_smcost_idx ON sm_costs (run_id, origin_id); -DROP INDEX IF EXISTS deleted_at_smcost_idx; -CREATE INDEX deleted_at_smcost_idx ON sm_costs (deleted_at); +DROP INDEX IF EXISTS cgrid_sessionscost_idx; +CREATE INDEX cgrid_sessionscost_idx ON sessions_costs (cgrid, run_id); +DROP INDEX IF EXISTS origin_sessionscost_idx; +CREATE INDEX origin_sessionscost_idx ON sessions_costs (origin_host, origin_id); +DROP INDEX IF EXISTS run_origin_sessionscost_idx; +CREATE INDEX run_origin_sessionscost_idx ON sessions_costs (run_id, origin_id); +DROP INDEX IF EXISTS deleted_at_sessionscost_idx; +CREATE INDEX deleted_at_sessionscost_idx ON sessions_costs (deleted_at); diff --git a/engine/models.go b/engine/models.go index 93e1bbe27..75644888c 100755 --- a/engine/models.go +++ b/engine/models.go @@ -494,7 +494,7 @@ func (t CDRsql) TableName() string { return utils.CDRsTBL } -type SMCostSQL struct { +type SessionsCostsSQL struct { ID int64 Cgrid string RunID string @@ -507,8 +507,8 @@ type SMCostSQL struct { DeletedAt *time.Time } -func (t SMCostSQL) TableName() string { - return utils.SMCostsTBL +func (t SessionsCostsSQL) TableName() string { + return utils.SessionsCostsTBL } type TBLVersion struct { diff --git a/engine/storage_mongo_datadb.go b/engine/storage_mongo_datadb.go index 21d2d9d52..147fa4728 100755 --- a/engine/storage_mongo_datadb.go +++ b/engine/storage_mongo_datadb.go @@ -289,7 +289,7 @@ func (ms *MongoStorage) EnsureIndexes() (err error) { Background: false, Sparse: false, } - if err = db.C(utils.SMCostsTBL).EnsureIndex(idx); err != nil { + if err = db.C(utils.SessionsCostsTBL).EnsureIndex(idx); err != nil { return } idx = mgo.Index{ @@ -299,7 +299,7 @@ func (ms *MongoStorage) EnsureIndexes() (err error) { Background: false, Sparse: false, } - if err = db.C(utils.SMCostsTBL).EnsureIndex(idx); err != nil { + if err = db.C(utils.SessionsCostsTBL).EnsureIndex(idx); err != nil { return } idx = mgo.Index{ @@ -309,7 +309,7 @@ func (ms *MongoStorage) EnsureIndexes() (err error) { Background: false, Sparse: false, } - if err = db.C(utils.SMCostsTBL).EnsureIndex(idx); err != nil { + if err = db.C(utils.SessionsCostsTBL).EnsureIndex(idx); err != nil { return } } diff --git a/engine/storage_mongo_stordb.go b/engine/storage_mongo_stordb.go index 916da34a2..364e8ea27 100755 --- a/engine/storage_mongo_stordb.go +++ b/engine/storage_mongo_stordb.go @@ -893,13 +893,13 @@ func (ms *MongoStorage) SetSMCost(smc *SMCost) error { if smc.CostDetails == nil { return nil } - session, col := ms.conn(utils.SMCostsTBL) + session, col := ms.conn(utils.SessionsCostsTBL) defer session.Close() return col.Insert(smc) } func (ms *MongoStorage) RemoveSMCost(smc *SMCost) error { - session, col := ms.conn(utils.SMCostsTBL) + session, col := ms.conn(utils.SessionsCostsTBL) defer session.Close() tx := col.Bulk() tx.Remove(bson.M{"cgrid": smc.CGRID, "runid": smc.RunID}, smc) @@ -922,7 +922,7 @@ func (ms *MongoStorage) GetSMCosts(cgrid, runid, originHost, originIDPrefix stri filter[OriginIDLow] = bson.M{"$regex": bson.RegEx{Pattern: fmt.Sprintf("^%s", originIDPrefix)}} } // Execute query - session, col := ms.conn(utils.SMCostsTBL) + session, col := ms.conn(utils.SessionsCostsTBL) defer session.Close() iter := col.Find(filter).Iter() var smCost SMCost diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 4d11af071..2ec9a0b78 100755 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -107,7 +107,7 @@ func (self *SQLStorage) IsDBEmpty() (resp bool, err error) { utils.TBLTPSharedGroups, utils.TBLTPCdrStats, utils.TBLTPLcrs, utils.TBLTPActions, utils.TBLTPActionTriggers, utils.TBLTPAccountActions, utils.TBLTPDerivedChargers, utils.TBLTPUsers, utils.TBLTPAliases, utils.TBLTPResources, utils.TBLTPStats, utils.TBLTPThresholds, - utils.TBLTPFilters, utils.SMCostsTBL, utils.CDRsTBL, utils.TBLTPActionPlans, + utils.TBLTPFilters, utils.SessionsCostsTBL, utils.CDRsTBL, utils.TBLTPActionPlans, utils.TBLVersions, utils.TBLTPSuppliers, utils.TBLTPAttributes, } for _, tbl := range tbls { @@ -743,7 +743,7 @@ func (self *SQLStorage) SetSMCost(smc *SMCost) error { return nil } tx := self.db.Begin() - cd := &SMCostSQL{ + cd := &SessionsCostsSQL{ Cgrid: smc.CGRID, RunID: smc.RunID, OriginHost: smc.OriginHost, @@ -764,7 +764,8 @@ func (self *SQLStorage) SetSMCost(smc *SMCost) error { func (self *SQLStorage) RemoveSMCost(smc *SMCost) error { tx := self.db.Begin() - if err := tx.Where(&SMCostSQL{Cgrid: smc.CGRID, RunID: smc.RunID}).Delete(SMCost{}).Error; err != nil { + if err := tx.Where(&SessionsCostsSQL{Cgrid: smc.CGRID, + RunID: smc.RunID}).Delete(SessionsCostsSQL{}).Error; err != nil { tx.Rollback() return err } @@ -775,7 +776,7 @@ func (self *SQLStorage) RemoveSMCost(smc *SMCost) error { // GetSMCosts is used to retrieve one or multiple SMCosts based on filter func (self *SQLStorage) GetSMCosts(cgrid, runid, originHost, originIDPrefix string) ([]*SMCost, error) { var smCosts []*SMCost - filter := &SMCostSQL{} + filter := &SessionsCostsSQL{} if cgrid != "" { filter.Cgrid = cgrid } @@ -789,7 +790,7 @@ func (self *SQLStorage) GetSMCosts(cgrid, runid, originHost, originIDPrefix stri if originIDPrefix != "" { q = self.db.Where(filter).Where(fmt.Sprintf("origin_id LIKE '%s%%'", originIDPrefix)) } - results := make([]*SMCostSQL, 0) + results := make([]*SessionsCostsSQL, 0) if err := q.Find(&results).Error; err != nil { return nil, err } diff --git a/utils/consts.go b/utils/consts.go index f969dfc49..7994007fd 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -663,7 +663,7 @@ const ( TBLTPStats = "tp_stats" TBLTPThresholds = "tp_thresholds" TBLTPFilters = "tp_filters" - SMCostsTBL = "sm_costs" + SessionsCostsTBL = "sessions_costs" CDRsTBL = "cdrs" TBLTPSuppliers = "tp_suppliers" TBLTPAttributes = "tp_attributes"