Stop sending BalanceUpdate events to thresholds/stats

This commit is contained in:
ionutboangiu
2024-04-08 14:50:24 +03:00
committed by Dan Christian Bogos
parent d6c5ddf08e
commit a5d29d5d7b
9 changed files with 175 additions and 195 deletions

View File

@@ -149,11 +149,10 @@ func testV1FIdxCaProcessEventWithNotFound(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.AccountField: "1001",
utils.ID: "1001",
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
}
var thIDs []string
@@ -169,14 +168,19 @@ func testV1FIdxCaSetThresholdProfile(t *testing.T) {
ID: "TestFilter",
Rules: []*engine.FilterRule{
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.AccountField,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.ID,
Type: utils.MetaString,
Values: []string{"1001"},
},
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.EventType,
Element: utils.DynamicDataPrefix + utils.MetaOpts + utils.NestingSep + utils.MetaEventType,
Type: utils.MetaString,
Values: []string{utils.BalanceUpdate},
Values: []string{utils.AccountUpdate},
},
{
Element: "~*asm.BalanceSummaries.*default.Value",
Type: utils.MetaGreaterThan,
Values: []string{"8"},
},
},
ActivationInterval: &utils.ActivationInterval{
@@ -217,11 +221,16 @@ func testV1FIdxCaSetThresholdProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.AccountField: "1001",
utils.ID: "1001",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 9,
},
},
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
utils.OptsThresholdsProfileIDs: []string{"TEST_PROFILE1"},
},
}
@@ -242,13 +251,18 @@ func testV1FIdxCaGetThresholdFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.AccountField: "1001",
utils.BalanceID: utils.MetaDefault,
utils.Units: 12.3,
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Type: utils.MetaMonetary,
Value: 12.3,
},
},
utils.ID: "1001",
utils.Tenant: "cgrates.org",
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
utils.OptsThresholdsProfileIDs: []string{"THD_ACNT_BALANCE_1"},
},
}
@@ -271,15 +285,20 @@ func testV1FIdxCaUpdateThresholdProfile(t *testing.T) {
ID: "TestFilter2",
Rules: []*engine.FilterRule{
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.AccountField,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.ID,
Type: utils.MetaString,
Values: []string{"1002"},
},
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.EventType,
Element: utils.DynamicDataPrefix + utils.MetaOpts + utils.NestingSep + utils.MetaEventType,
Type: utils.MetaString,
Values: []string{utils.AccountUpdate},
},
{
Element: "~*asm.BalanceSummaries.*default.Value",
Type: utils.MetaGreaterThan,
Values: []string{"8"},
},
},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
@@ -316,8 +335,13 @@ func testV1FIdxCaUpdateThresholdProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1001",
utils.ID: "1001",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 9,
},
},
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -335,8 +359,13 @@ func testV1FIdxCaUpdateThresholdProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1002",
utils.ID: "1002",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 9,
},
},
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -359,14 +388,14 @@ func testV1FIdxCaUpdateThresholdProfileFromTP(t *testing.T) {
ID: "TestFilter3",
Rules: []*engine.FilterRule{
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.AccountField,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.ID,
Type: utils.MetaString,
Values: []string{"1003"},
},
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.EventType,
Element: utils.DynamicDataPrefix + utils.MetaOpts + utils.NestingSep + utils.MetaEventType,
Type: utils.MetaString,
Values: []string{utils.BalanceUpdate},
Values: []string{utils.AccountUpdate},
},
},
ActivationInterval: &utils.ActivationInterval{
@@ -403,11 +432,10 @@ func testV1FIdxCaUpdateThresholdProfileFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.AccountField: "1002",
utils.EventType: utils.BalanceUpdate,
utils.ID: "1002",
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
}
var thIDs []string
@@ -420,11 +448,10 @@ func testV1FIdxCaUpdateThresholdProfileFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event3",
Event: map[string]any{
utils.AccountField: "1003",
utils.EventType: utils.BalanceUpdate,
utils.ID: "1003",
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
}
eIDs := []string{"THD_ACNT_BALANCE_1"}
@@ -442,8 +469,13 @@ func testV1FIdxCaRemoveThresholdProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event8",
Event: map[string]any{
utils.AccountField: "1002",
utils.EventType: utils.AccountUpdate,
utils.ID: "1002",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 9,
},
},
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -461,11 +493,10 @@ func testV1FIdxCaRemoveThresholdProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event9",
Event: map[string]any{
utils.AccountField: "1003",
utils.EventType: utils.BalanceUpdate,
utils.ID: "1003",
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
}
eIDs = []string{"THD_ACNT_BALANCE_1"}
@@ -518,8 +549,7 @@ func testV1FIdxCaGetStatQueuesWithNotFound(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1001",
utils.ID: "1001",
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -545,15 +575,20 @@ func testV1FIdxCaSetStatQueueProfile(t *testing.T) {
ID: "FLTR_1",
Rules: []*engine.FilterRule{
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.AccountField,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.ID,
Type: utils.MetaString,
Values: []string{"1001"},
},
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.EventType,
Element: utils.DynamicDataPrefix + utils.MetaOpts + utils.NestingSep + utils.MetaEventType,
Type: utils.MetaString,
Values: []string{utils.AccountUpdate},
},
{
Element: "~*asm.BalanceSummaries.*default.Value",
Type: utils.MetaGreaterThan,
Values: []string{"8"},
},
},
ActivationInterval: &utils.ActivationInterval{
ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
@@ -599,9 +634,14 @@ func testV1FIdxCaSetStatQueueProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1001",
"Val": 10,
utils.ID: "1001",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 10,
},
},
"Val": 10,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -618,16 +658,33 @@ func testV1FIdxCaSetStatQueueProfile(t *testing.T) {
}
func testV1FIdxCaGetStatQueuesFromTP(t *testing.T) {
// Overwrite Stats1 profile to filter for ID instead of AccountField.
var result string
var tmpSQ engine.StatQueueProfile
if err := tFIdxCaRpc.Call(context.Background(), utils.APIerSv1GetStatQueueProfile,
&utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &tmpSQ); err != nil {
t.Error(err)
}
tmpSQ.FilterIDs = []string{"*string:~*req.ID:1001|1002"}
tmpSQ.ActivationInterval = &utils.ActivationInterval{ActivationTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC)}
if err := tFIdxCaRpc.Call(context.Background(), utils.APIerSv1SetStatQueueProfile,
&engine.StatQueueProfileWithAPIOpts{StatQueueProfile: &tmpSQ}, &result); err != nil {
t.Error(err)
} else if result != utils.OK {
t.Error("Unexpected reply returned", result)
}
var reply []string
expected := []string{"Stats1"}
ev2 := &utils.CGREvent{
Tenant: "cgrates.org",
ID: "event2",
Event: map[string]any{
utils.AccountField: "1002",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
utils.ID: "1002",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
},
}
if err := tFIdxCaRpc.Call(context.Background(), utils.StatSv1ProcessEvent, ev2, &reply); err != nil {
@@ -639,10 +696,10 @@ func testV1FIdxCaGetStatQueuesFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event3",
Event: map[string]any{
utils.AccountField: "1002",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
utils.ID: "1002",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
},
}
if err := tFIdxCaRpc.Call(context.Background(), utils.StatSv1ProcessEvent, &ev3, &reply); err != nil {
@@ -655,11 +712,10 @@ func testV1FIdxCaGetStatQueuesFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1001",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
utils.ID: "1001",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -674,11 +730,10 @@ func testV1FIdxCaGetStatQueuesFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1001",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
utils.ID: "1001",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -698,14 +753,19 @@ func testV1FIdxCaUpdateStatQueueProfile(t *testing.T) {
ID: "FLTR_2",
Rules: []*engine.FilterRule{
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.AccountField,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.ID,
Type: utils.MetaString,
Values: []string{"1003"},
},
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.EventType,
Element: utils.DynamicDataPrefix + utils.MetaOpts + utils.NestingSep + utils.MetaEventType,
Type: utils.MetaString,
Values: []string{utils.BalanceUpdate},
Values: []string{utils.AccountUpdate},
},
{
Element: "~*asm.BalanceSummaries.*default.Value",
Type: utils.MetaGreaterThan,
Values: []string{"8"},
},
},
ActivationInterval: &utils.ActivationInterval{
@@ -752,12 +812,17 @@ func testV1FIdxCaUpdateStatQueueProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.AccountField: "1003",
"Val": 10,
utils.ID: "1003",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 10,
},
},
"Val": 10,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
}
if err := tFIdxCaRpc.Call(context.Background(), utils.StatSv1ProcessEvent, tEv, &reply); err != nil {
@@ -774,12 +839,12 @@ func testV1FIdxCaUpdateStatQueueProfileFromTP(t *testing.T) {
ID: "FLTR_3",
Rules: []*engine.FilterRule{
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.AccountField,
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.ID,
Type: utils.MetaString,
Values: []string{"1003"},
},
{
Element: utils.DynamicDataPrefix + utils.MetaReq + utils.NestingSep + utils.EventType,
Element: utils.DynamicDataPrefix + utils.MetaOpts + utils.NestingSep + utils.MetaEventType,
Type: utils.MetaString,
Values: []string{utils.AccountUpdate},
},
@@ -812,11 +877,10 @@ func testV1FIdxCaUpdateStatQueueProfileFromTP(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1003",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
utils.ID: "1003",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,
@@ -839,12 +903,17 @@ func testV1FIdxCaRemoveStatQueueProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.AccountField: "1003",
"Val": 10,
utils.ID: "1003",
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Value: 10,
},
},
"Val": 10,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
}
if err := tFIdxCaRpc.Call(context.Background(), utils.StatSv1ProcessEvent, tEv, &reply); err != nil {
@@ -857,11 +926,10 @@ func testV1FIdxCaRemoveStatQueueProfile(t *testing.T) {
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
utils.EventType: utils.AccountUpdate,
utils.AccountField: "1003",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
utils.ID: "1003",
utils.AnswerTime: time.Date(2014, 7, 14, 14, 25, 0, 0, time.UTC),
utils.Usage: 45 * time.Second,
utils.Cost: 12.1,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.AccountUpdate,

View File

@@ -43,7 +43,7 @@ var (
tSv1ConfDIR string //run tests for specific configuration
tEvs = []*utils.CGREvent{
{ // hitting THD_ACNT_BALANCE_1
{ // will not match any threshold profile
Tenant: "cgrates.org",
ID: "event1",
Event: map[string]any{
@@ -60,14 +60,20 @@ var (
Tenant: "cgrates.org",
ID: "event2",
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.AccountField: "1002",
utils.BalanceID: utils.MetaDefault,
utils.Units: 12.3,
utils.ExpiryTime: time.Date(2009, 11, 10, 23, 00, 0, 0, time.UTC),
utils.AllowNegative: false,
utils.BalanceSummaries: engine.BalanceSummaries{
{
ID: utils.MetaDefault,
Type: utils.MetaMonetary,
Value: 12.3,
},
},
utils.ID: "1001",
utils.Tenant: "cgrates.org",
utils.Disabled: false,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
utils.MetaEventType: utils.AccountUpdate,
},
},
{ // hitting THD_STATS_1

View File

@@ -7,9 +7,9 @@ cgrates.org,FLTR_ACNT_1007,*string,~*req.Account,1007,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_dan,*string,~*req.Account,dan,2014-07-29T15:00:00Z
cgrates.org,FLTR_DST_DE,*destinations,~*req.Destination,DST_DE_MOBILE,2014-07-29T15:00:00Z
cgrates.org,FLTR_DST_NL,*destinations,~*req.Destination,DST_NL,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.EventType,BalanceUpdate,
cgrates.org,FLTR_ACNT_BALANCE_1,*gte,~*req.Units,10.0,
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.ID,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*opts.*eventType,AccountUpdate,
cgrates.org,FLTR_ACNT_BALANCE_1,*gte,~*asm.BalanceSummaries.*default.Value,10.0,
cgrates.org,FLTR_ACNT_EXPIRED,*string,~*req.Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_EXPIRED,*gte,~*req.ExpiryTime,*now,
cgrates.org,FLTR_STATS_1,*string,~*req.Account,1002,
1 #Tenant[0] ID[1] Type[2] Path[3] Values[4] ActivationInterval[5]
7 cgrates.org FLTR_ACNT_dan *string ~*req.Account dan 2014-07-29T15:00:00Z
8 cgrates.org FLTR_DST_DE *destinations ~*req.Destination DST_DE_MOBILE 2014-07-29T15:00:00Z
9 cgrates.org FLTR_DST_NL *destinations ~*req.Destination DST_NL 2014-07-29T15:00:00Z
10 cgrates.org FLTR_ACNT_BALANCE_1 *string ~*req.Account ~*req.ID 1001;1002 2014-07-29T15:00:00Z
11 cgrates.org FLTR_ACNT_BALANCE_1 *string ~*req.EventType ~*opts.*eventType BalanceUpdate AccountUpdate
12 cgrates.org FLTR_ACNT_BALANCE_1 *gte ~*req.Units ~*asm.BalanceSummaries.*default.Value 10.0
13 cgrates.org FLTR_ACNT_EXPIRED *string ~*req.Account 1001;1002 2014-07-29T15:00:00Z
14 cgrates.org FLTR_ACNT_EXPIRED *gte ~*req.ExpiryTime *now
15 cgrates.org FLTR_STATS_1 *string ~*req.Account 1002

View File

@@ -8,10 +8,9 @@ cgrates.org,FLTR_ACNT_1007,*string,~*req.Account,1007,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_dan,*string,~*req.Account,dan,2014-07-29T15:00:00Z
cgrates.org,FLTR_DST_DE,*destinations,~*req.Destination,DST_DE_MOBILE,2014-07-29T15:00:00Z
cgrates.org,FLTR_DST_NL,*destinations,~*req.Destination,DST_NL,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,,,,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.Account,1001;1002,
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.EventType,BalanceUpdate,
cgrates.org,FLTR_ACNT_BALANCE_1,*gte,~*req.Units,10.0,
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.ID,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*opts.*eventType,AccountUpdate,
cgrates.org,FLTR_ACNT_BALANCE_1,*gte,~*asm.BalanceSummaries.*default.Value,10.0,
cgrates.org,FLTR_ACNT_EXPIRED,,,,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_EXPIRED,*string,~*req.Account,1001;1002,
cgrates.org,FLTR_ACNT_EXPIRED,*gte,~*req.ExpiryTime,*now,
1 #Tenant[0] ID[1] Type[2] Path[3] Values[4] ActivationInterval[5]
8 cgrates.org FLTR_ACNT_dan *string ~*req.Account dan 2014-07-29T15:00:00Z
9 cgrates.org FLTR_DST_DE *destinations ~*req.Destination DST_DE_MOBILE 2014-07-29T15:00:00Z
10 cgrates.org FLTR_DST_NL *destinations ~*req.Destination DST_NL 2014-07-29T15:00:00Z
11 cgrates.org FLTR_ACNT_BALANCE_1 *string ~*req.ID 1001;1002 2014-07-29T15:00:00Z
12 cgrates.org FLTR_ACNT_BALANCE_1 *string ~*req.Account ~*opts.*eventType 1001;1002 AccountUpdate
13 cgrates.org FLTR_ACNT_BALANCE_1 *string *gte ~*req.EventType ~*asm.BalanceSummaries.*default.Value BalanceUpdate 10.0
cgrates.org FLTR_ACNT_BALANCE_1 *gte ~*req.Units 10.0
14 cgrates.org FLTR_ACNT_EXPIRED 2014-07-29T15:00:00Z
15 cgrates.org FLTR_ACNT_EXPIRED *string ~*req.Account 1001;1002
16 cgrates.org FLTR_ACNT_EXPIRED *gte ~*req.ExpiryTime *now

View File

@@ -7,9 +7,9 @@ cgrates.org,FLTR_ACNT_1007,*string,~*req.Account,1007,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_dan,*string,~*req.Account,dan,2014-07-29T15:00:00Z
cgrates.org,FLTR_DST_DE,*destinations,~*req.Destination,DST_DE,2014-07-29T15:00:00Z
cgrates.org,FLTR_DST_NL,*destinations,~*req.Destination,DST_NL,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.EventType,BalanceUpdate,
cgrates.org,FLTR_ACNT_BALANCE_1,*gte,~*req.Units,10.0,
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*req.ID,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_BALANCE_1,*string,~*opts.*eventType,AccountUpdate,
cgrates.org,FLTR_ACNT_BALANCE_1,*gte,~*asm.BalanceSummaries.*default.Value,10.0,
cgrates.org,FLTR_ACNT_EXPIRED,*string,~*req.Account,1001;1002,2014-07-29T15:00:00Z
cgrates.org,FLTR_ACNT_EXPIRED,*gte,~*req.ExpiryTime,*now,
cgrates.org,FLTR_STATS_1,*string,~*req.EventType,StatUpdate,2014-07-29T15:00:00Z
1 #Tenant[0] ID[1] Type[2] Path[3] Values[4] ActivationInterval[5]
7 cgrates.org FLTR_ACNT_dan *string ~*req.Account dan 2014-07-29T15:00:00Z
8 cgrates.org FLTR_DST_DE *destinations ~*req.Destination DST_DE 2014-07-29T15:00:00Z
9 cgrates.org FLTR_DST_NL *destinations ~*req.Destination DST_NL 2014-07-29T15:00:00Z
10 cgrates.org FLTR_ACNT_BALANCE_1 *string ~*req.Account ~*req.ID 1001;1002 2014-07-29T15:00:00Z
11 cgrates.org FLTR_ACNT_BALANCE_1 *string ~*req.EventType ~*opts.*eventType BalanceUpdate AccountUpdate
12 cgrates.org FLTR_ACNT_BALANCE_1 *gte ~*req.Units ~*asm.BalanceSummaries.*default.Value 10.0
13 cgrates.org FLTR_ACNT_EXPIRED *string ~*req.Account 1001;1002 2014-07-29T15:00:00Z
14 cgrates.org FLTR_ACNT_EXPIRED *gte ~*req.ExpiryTime *now
15 cgrates.org FLTR_STATS_1 *string ~*req.EventType StatUpdate 2014-07-29T15:00:00Z

View File

@@ -554,34 +554,6 @@ func (acc *Account) debitCreditBalance(cd *CallDescriptor, count bool, dryRun bo
}
}
}
// in case of going to negative we send the default balance to thresholdS to be processed
if len(config.CgrConfig().RalsCfg().ThresholdSConns) != 0 {
defaultBalance := acc.GetDefaultMoneyBalance()
acntTnt := utils.NewTenantID(acc.ID)
thEv := &utils.CGREvent{
Tenant: acntTnt.Tenant,
ID: utils.GenUUID(),
Event: map[string]any{
utils.EventType: utils.BalanceUpdate,
utils.EventSource: utils.AccountService,
utils.AccountField: acntTnt.ID,
utils.BalanceID: defaultBalance.ID,
utils.Units: defaultBalance.Value,
},
APIOpts: map[string]any{
utils.MetaEventType: utils.BalanceUpdate,
},
}
var tIDs []string
if err := connMgr.Call(context.TODO(), config.CgrConfig().RalsCfg().ThresholdSConns,
utils.ThresholdSv1ProcessEvent, thEv, &tIDs); err != nil &&
err.Error() != utils.ErrNotFound.Error() {
utils.Logger.Warning(
fmt.Sprintf("<AccountS> error: <%s> processing balance event <%+v> with ThresholdS.",
err.Error(), utils.ToJSON(thEv)))
}
}
}
COMMIT:

View File

@@ -29,8 +29,6 @@ import (
"testing"
"time"
"github.com/cgrates/birpc"
"github.com/cgrates/birpc/context"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
)
@@ -3020,68 +3018,6 @@ func TestAcountSetBalanceAction(t *testing.T) {
}
}
func TestDebitCreditBalance(t *testing.T) {
cfg := config.NewDefaultCGRConfig()
db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items)
dm := NewDataManager(db, cfg.CacheCfg(), nil)
fltrs := NewFilterS(cfg, nil, dm)
tmpConn := connMgr
utils.Logger.SetLogLevel(4)
utils.Logger.SetSyslog(nil)
buf := new(bytes.Buffer)
log.SetOutput(buf)
defer func() {
utils.Logger.SetLogLevel(0)
log.SetOutput(os.Stderr)
connMgr = tmpConn
config.SetCgrConfig(config.NewDefaultCGRConfig())
}()
cfg.RalsCfg().ThresholdSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)}
clientConn := make(chan birpc.ClientConnector, 1)
clientConn <- &ccMock{
calls: map[string]func(ctx *context.Context, args any, reply any) error{
utils.ThresholdSv1ProcessEvent: func(ctx *context.Context, args, reply any) error {
rpl := &[]string{"id"}
*reply.(*[]string) = *rpl
return errors.New("Can't process Event")
},
},
}
connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{
utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): clientConn,
})
cd := &CallDescriptor{
Tenant: "cgrates.org",
Category: "call",
TimeStart: time.Date(2015, 9, 24, 10, 48, 0, 0, time.UTC),
TimeEnd: time.Date(2015, 9, 24, 10, 58, 1, 0, time.UTC),
Destination: "4444",
Subject: "dy",
Account: "dy",
ToR: utils.MetaVoice,
DurationIndex: 600,
}
acc := &Account{
ID: "vdf:broker",
BalanceMap: map[string]Balances{
utils.MetaVoice: {
&Balance{Value: 20 * float64(time.Second),
DestinationIDs: utils.NewStringMap("NAT"),
Weight: 10, RatingSubject: "rif"},
&Balance{Value: 100 * float64(time.Second),
DestinationIDs: utils.NewStringMap("RET"), Weight: 20},
}},
}
config.SetCgrConfig(cfg)
SetConnManager(connMgr)
expLog := `processing balance event`
if _, err := acc.debitCreditBalance(cd, true, true, true, fltrs); err != nil {
t.Error(err)
} else if rcvLog := buf.String(); !strings.Contains(rcvLog, expLog) {
t.Errorf("Logger %v,doesn't contain %v", utils.ToJSON(rcvLog), utils.ToJSON(expLog))
}
}
func TestAccGetAllBalancesForPrefixLogg(t *testing.T) {
tmp := Cache
utils.Logger.SetLogLevel(4)

View File

@@ -68,7 +68,7 @@ func TestBalanceBlocker(t *testing.T) {
},
"rals": {
"enabled": true,
"enabled": true
},
"cdrs": {
@@ -300,7 +300,7 @@ func TestBalanceFactor(t *testing.T) {
},
"rals": {
"enabled": true,
"enabled": true
},
"cdrs": {
@@ -842,7 +842,7 @@ func TestBalanceCDRLog(t *testing.T) {
},
"cdrs": {
"enabled": true,
"enabled": true
},
"schedulers": {

View File

@@ -513,7 +513,6 @@ const (
BalanceFactorID = "BalanceFactorID"
Units = "Units"
AccountUpdate = "AccountUpdate"
BalanceUpdate = "BalanceUpdate"
StatUpdate = "StatUpdate"
ResourceUpdate = "ResourceUpdate"
CDR = "CDR"