mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-22 07:38:45 +05:00
Added General config
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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{}{
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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},
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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("<CDRS> 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("<CDRS> 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("<CDRS> 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)
|
||||
}
|
||||
|
||||
@@ -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],
|
||||
},
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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)}},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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), "")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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{
|
||||
{
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user