mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
Reordering ActionTriggers.csv for eficiency purposes
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#Tag,BalanceTag,Direction,ThresholdType,ThresholdValue,Recurrent,MinSleep,BalanceDestinationTag,BalanceWeight,BalanceExpiryTime,BalanceRatingSubject,BalanceCategory,BalanceSharedGroup,StatsMinQueuedItems,ActionsTag,Weight
|
||||
CDRST3_WARN_ASR,,,*min_asr,45,true,1h,,,,,,,3,CDRST_LOG,10
|
||||
CDRST3_WARN_ACD,,,*min_acd,10,true,1h,,,,,,,5,CDRST_LOG,10
|
||||
CDRST3_WARN_ACC,,,*max_acc,10,true,10m,,,,,,,5,CDRST_LOG,10
|
||||
CDRST4_WARN_ASR,,,*min_asr,30,true,0,,,,,,,5,CDRST_LOG,10
|
||||
CDRST4_WARN_ACD,,,*min_acd,3,true,0,,,,,,,2,CDRST_LOG,10
|
||||
#Tag[0],ThresholdType[1],ThresholdValue[2],Recurrent[3],MinSleep[4],BalanceType[5],BalanceDirection[6],BalanceCategory[7],BalanceDestinationTag[8],BalanceRatingSubject[9],BalanceSharedGroup[10],BalanceExpiryTime[11],BalanceWeight[12],StatsMinQueuedItems[13],ActionsTag[14],Weight[15]
|
||||
CDRST3_WARN_ASR,*min_asr,45,true,1h,,,,,,,,,3,CDRST_LOG,10
|
||||
CDRST3_WARN_ACD,*min_acd,10,true,1h,,,,,,,,,5,CDRST_LOG,10
|
||||
CDRST3_WARN_ACC,*max_acc,10,true,10m,,,,,,,,,5,CDRST_LOG,10
|
||||
CDRST4_WARN_ASR,*min_asr,30,true,0,,,,,,,,,5,CDRST_LOG,10
|
||||
CDRST4_WARN_ACD,*min_acd,3,true,0,,,,,,,,,2,CDRST_LOG,10
|
||||
|
||||
|
@@ -1,9 +1,9 @@
|
||||
#Tag,BalanceTag,Direction,ThresholdType,ThresholdValue,Recurrent,MinSleep,BalanceDestinationTag,BalanceWeight,BalanceExpiryTime,BalanceRatingSubject,BalanceCategory,BalanceSharedGroup,StatsMinQueuedItems,ActionsTag,Weight
|
||||
STANDARD_TRIGGERS,*monetary,*out,*min_balance,2,false,0,,,,,,,,LOG_BALANCE,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_balance,20,false,0,,,,,,,,LOG_BALANCE,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_counter,15,false,0,FS_USERS,,,,,,,LOG_BALANCE,10
|
||||
CDRST1_WARN_ASR,,,*min_asr,45,true,1h,,,,,,,3,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACD,,,*min_acd,10,true,1h,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACC,,,*max_acc,10,true,10m,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ASR,,,*min_asr,30,true,0,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ACD,,,*min_acd,3,true,0,,,,,,,2,CDRST_LOG,10
|
||||
#Tag[0],ThresholdType[1],ThresholdValue[2],Recurrent[3],MinSleep[4],BalanceType[5],BalanceDirection[6],BalanceCategory[7],BalanceDestinationTag[8],BalanceRatingSubject[9],BalanceSharedGroup[10],BalanceExpiryTime[11],BalanceWeight[12],StatsMinQueuedItems[13],ActionsTag[14],Weight[15]
|
||||
STANDARD_TRIGGERS,*min_balance,2,false,0,*monetary,*out,,,,,,,,LOG_BALANCE,10
|
||||
STANDARD_TRIGGERS,*max_balance,20,false,0,*monetary,*out,,,,,,,,LOG_BALANCE,10
|
||||
STANDARD_TRIGGERS,*max_counter,15,false,0,*monetary,*out,,FS_USERS,,,,,,LOG_BALANCE,10
|
||||
CDRST1_WARN_ASR,*min_asr,45,true,1h,,,,,,,,,3,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACD,*min_acd,10,true,1h,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACC,*max_acc,10,true,10m,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ASR,*min_asr,30,true,0,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ACD,*min_acd,3,true,0,,,,,,,,,2,CDRST_LOG,10
|
||||
|
||||
|
@@ -1,13 +1,12 @@
|
||||
#Tag,BalanceTag,Direction,ThresholdType,ThresholdValue,Recurrent,MinSleep,BalanceDestinationTag,BalanceWeight,BalanceExpiryTime,BalanceRatingSubject,BalanceCategory,BalanceSharedGroup,StatsMinQueuedItems,ActionsTag,Weight
|
||||
##Tag,BalanceTag,Direction,ThresholdType,ThresholdValue,Recurrent,MinSleep,BalanceCategory,BalanceRatingSubject,BalanceDestinationTag,BalanceExpiryTime,BalanceSharedGroup,BalanceWeight,StatsMinQueuedItems,ActionsTag,Weight
|
||||
STANDARD_TRIGGERS,*monetary,*out,*min_balance,2,false,0,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_counter,5,false,0,FS_USERS,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_balance,20,false,0,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_balance,100,false,0,,,,,,,,DISABLE_AND_LOG,10
|
||||
CDRST1_WARN,,,*min_asr,45,true,1m,,,,,,,3,LOG_WARNING,10
|
||||
CDRST1_WARN,,,*min_acd,10,true,1m,,,,,,,5,LOG_WARNING,10
|
||||
CDRST1_WARN,,,*max_acc,10,true,1m,,,,,,,5,LOG_WARNING,10
|
||||
CDRST1001_WARN,,,*min_asr,65,true,1m,,,,,,,3,LOG_WARNING,10
|
||||
CDRST1001_WARN,,,*min_acd,10,true,1m,,,,,,,5,LOG_WARNING,10
|
||||
CDRST1001_WARN,,,*max_acc,5,true,1m,,,,,,,5,LOG_WARNING,10
|
||||
CDRST3_WARN,,,*min_acd,60,false,1m,,,,,,,5,LOG_WARNING,10
|
||||
#Tag[0],ThresholdType[1],ThresholdValue[2],Recurrent[3],MinSleep[4],BalanceType[5],BalanceDirection[6],BalanceCategory[7],BalanceDestinationTag[8],BalanceRatingSubject[9],BalanceSharedGroup[10],BalanceExpiryTime[11],BalanceWeight[12],StatsMinQueuedItems[13],ActionsTag[14],Weight[15]
|
||||
STANDARD_TRIGGERS,*min_balance,2,false,0,*monetary,*out,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_counter,5,false,0,*monetary,*out,,FS_USERS,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_balance,20,false,0,*monetary,*out,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_balance,100,false,0,*monetary,*out,,,,,,,,DISABLE_AND_LOG,10
|
||||
CDRST1_WARN,*min_asr,45,true,1m,,,,,,,,,3,LOG_WARNING,10
|
||||
CDRST1_WARN,*min_acd,10,true,1m,,,,,,,,,5,LOG_WARNING,10
|
||||
CDRST1_WARN,*max_acc,10,true,1m,,,,,,,,,5,LOG_WARNING,10
|
||||
CDRST1001_WARN,*min_asr,65,true,1m,,,,,,,,,3,LOG_WARNING,10
|
||||
CDRST1001_WARN,*min_acd,10,true,1m,,,,,,,,,5,LOG_WARNING,10
|
||||
CDRST1001_WARN,*max_acc,5,true,1m,,,,,,,,,5,LOG_WARNING,10
|
||||
CDRST3_WARN,*min_acd,60,false,1m,,,,,,,,,5,LOG_WARNING,10
|
||||
|
||||
|
@@ -654,47 +654,46 @@ func (csvr *CSVReader) LoadActions() (err error) {
|
||||
if fp != nil {
|
||||
defer fp.Close()
|
||||
}
|
||||
fieldIndex := CSV_FIELD_INDEX[utils.ACTIONS_CSV]
|
||||
for record, err := csvReader.Read(); err == nil; record, err = csvReader.Read() {
|
||||
tag := record[fieldIndex[utils.CSVFLD_ACTIONS_TAG]]
|
||||
tag := record[ACTSCSVIDX_TAG]
|
||||
var units float64
|
||||
if len(record[fieldIndex[utils.CSVFLD_UNITS]]) == 0 { // Not defined
|
||||
if len(record[ACTSCSVIDX_UNITS]) == 0 { // Not defined
|
||||
units = 0.0
|
||||
} else {
|
||||
units, err = strconv.ParseFloat(record[fieldIndex[utils.CSVFLD_UNITS]], 64)
|
||||
units, err = strconv.ParseFloat(record[ACTSCSVIDX_UNITS], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not parse action units: %v", err)
|
||||
}
|
||||
}
|
||||
var balanceWeight float64
|
||||
if len(record[fieldIndex[utils.CSVFLD_BALANCE_WEIGHT]]) == 0 { // Not defined
|
||||
if len(record[ACTSCSVIDX_BALANCE_WEIGHT]) == 0 { // Not defined
|
||||
balanceWeight = 0.0
|
||||
} else {
|
||||
balanceWeight, err = strconv.ParseFloat(record[fieldIndex[utils.CSVFLD_BALANCE_WEIGHT]], 64)
|
||||
balanceWeight, err = strconv.ParseFloat(record[ACTSCSVIDX_BALANCE_WEIGHT], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not parse action balance weight: %v", err)
|
||||
}
|
||||
}
|
||||
weight, err := strconv.ParseFloat(record[fieldIndex[utils.CSVFLD_WEIGHT]], 64)
|
||||
weight, err := strconv.ParseFloat(record[ACTSCSVIDX_WEIGHT], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not parse action weight: %v", err)
|
||||
}
|
||||
a := &Action{
|
||||
Id: utils.GenUUID(),
|
||||
ActionType: record[fieldIndex[utils.CSVFLD_ACTION]],
|
||||
BalanceType: record[fieldIndex[utils.CSVFLD_BALANCE_TYPE]],
|
||||
Direction: record[fieldIndex[utils.CSVFLD_DIRECTION]],
|
||||
ActionType: record[ACTSCSVIDX_ACTION],
|
||||
BalanceType: record[ACTSCSVIDX_BALANCE_TYPE],
|
||||
Direction: record[ACTSCSVIDX_DIRECTION],
|
||||
Weight: weight,
|
||||
ExpirationString: record[fieldIndex[utils.CSVFLD_EXPIRY_TIME]],
|
||||
ExtraParameters: record[fieldIndex[utils.CSVFLD_EXTRA_PARAMS]],
|
||||
ExpirationString: record[ACTSCSVIDX_EXPIRY_TIME],
|
||||
ExtraParameters: record[ACTSCSVIDX_EXTRA_PARAMS],
|
||||
Balance: &Balance{
|
||||
Uuid: utils.GenUUID(),
|
||||
Value: units,
|
||||
Weight: balanceWeight,
|
||||
DestinationId: record[fieldIndex[utils.CSVFLD_DESTINATION_TAG]],
|
||||
RatingSubject: record[fieldIndex[utils.CSVFLD_RATING_SUBJECT]],
|
||||
Category: record[fieldIndex[utils.CSVFLD_CATEGORY]],
|
||||
SharedGroup: record[fieldIndex[utils.CSVFLD_SHARED_GROUP]],
|
||||
DestinationId: record[ACTSCSVIDX_DESTINATION_TAG],
|
||||
RatingSubject: record[ACTSCSVIDX_RATING_SUBJECT],
|
||||
Category: record[ACTSCSVIDX_CATEGORY],
|
||||
SharedGroup: record[ACTSCSVIDX_SHARED_GROUP],
|
||||
},
|
||||
}
|
||||
if _, err := utils.ParseDate(a.ExpirationString); err != nil {
|
||||
@@ -760,57 +759,57 @@ func (csvr *CSVReader) LoadActionTriggers() (err error) {
|
||||
defer fp.Close()
|
||||
}
|
||||
for record, err := csvReader.Read(); err == nil; record, err = csvReader.Read() {
|
||||
tag := record[0]
|
||||
value, err := strconv.ParseFloat(record[4], 64)
|
||||
tag := record[ATRIGCSVIDX_TAG]
|
||||
value, err := strconv.ParseFloat(record[ATRIGCSVIDX_THRESHOLD_VALUE], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger value (%v): %v", record[4], err)
|
||||
return fmt.Errorf("Could not parse action trigger threshold value (%v): %v", record[ATRIGCSVIDX_THRESHOLD_VALUE], err)
|
||||
}
|
||||
recurrent, err := strconv.ParseBool(record[5])
|
||||
recurrent, err := strconv.ParseBool(record[ATRIGCSVIDX_RECURRENT])
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger recurrent flag (%v): %v", record[5], err)
|
||||
return fmt.Errorf("Could not parse action trigger recurrent flag (%v): %v", record[ATRIGCSVIDX_RECURRENT], err)
|
||||
}
|
||||
|
||||
minSleep, err := time.ParseDuration(record[6])
|
||||
minSleep, err := time.ParseDuration(record[ATRIGCSVIDX_MIN_SLEEP])
|
||||
if err != nil {
|
||||
if record[6] == "" {
|
||||
if record[ATRIGCSVIDX_MIN_SLEEP] == "" {
|
||||
minSleep = 0
|
||||
} else {
|
||||
return fmt.Errorf("Could not parse action trigger MinSleep (%v): %v", record[6], err)
|
||||
return fmt.Errorf("Could not parse action trigger MinSleep (%v): %v", record[ATRIGCSVIDX_MIN_SLEEP], err)
|
||||
}
|
||||
}
|
||||
balanceWeight, err := strconv.ParseFloat(record[8], 64)
|
||||
if record[8] != "" && err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger BalanceWeight (%v): %v", record[8], err)
|
||||
balanceWeight, err := strconv.ParseFloat(record[ATRIGCSVIDX_BAL_WEIGHT], 64)
|
||||
if record[ATRIGCSVIDX_BAL_WEIGHT] != "" && err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger BalanceWeight (%v): %v", record[ATRIGCSVIDX_BAL_WEIGHT], err)
|
||||
}
|
||||
balanceExp, err := utils.ParseTimeDetectLayout(record[9])
|
||||
if record[9] != "" && err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger BalanceExpirationDate (%v): %v", record[9], err)
|
||||
balanceExp, err := utils.ParseTimeDetectLayout(record[ATRIGCSVIDX_BAL_EXPIRY_TIME])
|
||||
if record[ATRIGCSVIDX_BAL_EXPIRY_TIME] != "" && err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger BalanceExpirationDate (%v): %v", record[ATRIGCSVIDX_BAL_EXPIRY_TIME], err)
|
||||
}
|
||||
minQI, err := strconv.Atoi(record[13])
|
||||
if record[13] != "" && err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger MinQueuedItems (%v): %v", record[13], err)
|
||||
minQI, err := strconv.Atoi(record[ATRIGCSVIDX_STATS_MIN_QUEUED_ITEMS])
|
||||
if record[ATRIGCSVIDX_STATS_MIN_QUEUED_ITEMS] != "" && err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger MinQueuedItems (%v): %v", record[ATRIGCSVIDX_STATS_MIN_QUEUED_ITEMS], err)
|
||||
}
|
||||
weight, err := strconv.ParseFloat(record[15], 64)
|
||||
weight, err := strconv.ParseFloat(record[ATRIGCSVIDX_WEIGHT], 64)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Could not parse action trigger weight (%v): %v", record[15], err)
|
||||
return fmt.Errorf("Could not parse action trigger weight (%v): %v", record[ATRIGCSVIDX_WEIGHT], err)
|
||||
}
|
||||
|
||||
at := &ActionTrigger{
|
||||
Id: utils.GenUUID(),
|
||||
BalanceType: record[1],
|
||||
Direction: record[2],
|
||||
ThresholdType: record[3],
|
||||
BalanceType: record[ATRIGCSVIDX_BAL_TYPE],
|
||||
Direction: record[ATRIGCSVIDX_BAL_DIRECTION],
|
||||
ThresholdType: record[ATRIGCSVIDX_THRESHOLD_TYPE],
|
||||
ThresholdValue: value,
|
||||
Recurrent: recurrent,
|
||||
MinSleep: minSleep,
|
||||
DestinationId: record[7],
|
||||
DestinationId: record[ATRIGCSVIDX_BAL_DESTINATION_TAG],
|
||||
BalanceWeight: balanceWeight,
|
||||
BalanceExpirationDate: balanceExp,
|
||||
BalanceRatingSubject: record[10],
|
||||
BalanceCategory: record[11],
|
||||
BalanceSharedGroup: record[12],
|
||||
BalanceRatingSubject: record[ATRIGCSVIDX_BAL_RATING_SUBJECT],
|
||||
BalanceCategory: record[ATRIGCSVIDX_BAL_CATEGORY],
|
||||
BalanceSharedGroup: record[ATRIGCSVIDX_BAL_SHARED_GROUP],
|
||||
MinQueuedItems: minQI,
|
||||
ActionsId: record[14],
|
||||
ActionsId: record[ATRIGCSVIDX_ACTIONS_TAG],
|
||||
Weight: weight,
|
||||
}
|
||||
csvr.actionsTriggers[tag] = append(csvr.actionsTriggers[tag], at)
|
||||
|
||||
@@ -160,17 +160,18 @@ TOPUP_SHARED0_AT,SE0,ASAP,10
|
||||
TOPUP_SHARED10_AT,SE10,ASAP,10
|
||||
TOPUP_EMPTY_AT,EE0,ASAP,10
|
||||
`
|
||||
|
||||
actionTriggers = `
|
||||
STANDARD_TRIGGER,*voice,*out,*min_counter,10,false,0,GERMANY_O2,,,,,,,SOME_1,10
|
||||
STANDARD_TRIGGER,*voice,*out,*max_balance,200,false,0,GERMANY,,,,,,,SOME_2,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*min_balance,2,false,0,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_balance,20,false,0,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_counter,5,false,0,FS_USERS,,,,,,,LOG_WARNING,10
|
||||
CDRST1_WARN_ASR,,,*min_asr,45,true,1h,,,,,,,3,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACD,,,*min_acd,10,true,1h,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACC,,,*max_acc,10,true,10m,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ASR,,,*min_asr,30,true,0,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ACD,,,*min_acd,3,true,0,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
STANDARD_TRIGGER,*min_counter,10,false,0,*voice,*out,,GERMANY_O2,,,,,,SOME_1,10
|
||||
STANDARD_TRIGGER,*max_balance,200,false,0,*voice,*out,,GERMANY,,,,,,SOME_2,10
|
||||
STANDARD_TRIGGERS,*min_balance,2,false,0,*monetary,*out,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_balance,20,false,0,*monetary,*out,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_counter,5,false,0,*monetary,*out,,FS_USERS,,,,,,LOG_WARNING,10
|
||||
CDRST1_WARN_ASR,*min_asr,45,true,1h,,,,,,,,,3,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACD,*min_acd,10,true,1h,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST1_WARN_ACC,*max_acc,10,true,10m,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ASR,*min_asr,30,true,0,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
CDRST2_WARN_ACD,*min_acd,3,true,0,,,,,,,,,5,CDRST_WARN_HTTP,10
|
||||
`
|
||||
accountActions = `
|
||||
vdf,minitsboy;a1;a2,*out,MORE_MINUTES,STANDARD_TRIGGER
|
||||
|
||||
@@ -34,6 +34,43 @@ import (
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
)
|
||||
|
||||
// Define here fields within utils.ACTIONS_CSV file
|
||||
const (
|
||||
ACTSCSVIDX_TAG = iota
|
||||
ACTSCSVIDX_ACTION
|
||||
ACTSCSVIDX_EXTRA_PARAMS
|
||||
ACTSCSVIDX_BALANCE_TYPE
|
||||
ACTSCSVIDX_DIRECTION
|
||||
ACTSCSVIDX_CATEGORY
|
||||
ACTSCSVIDX_DESTINATION_TAG
|
||||
ACTSCSVIDX_RATING_SUBJECT
|
||||
ACTSCSVIDX_SHARED_GROUP
|
||||
ACTSCSVIDX_EXPIRY_TIME
|
||||
ACTSCSVIDX_UNITS
|
||||
ACTSCSVIDX_BALANCE_WEIGHT
|
||||
ACTSCSVIDX_WEIGHT
|
||||
)
|
||||
|
||||
// Define here fields within utils.ACTION_TRIGGERS_CSV file
|
||||
const (
|
||||
ATRIGCSVIDX_TAG = iota
|
||||
ATRIGCSVIDX_THRESHOLD_TYPE
|
||||
ATRIGCSVIDX_THRESHOLD_VALUE
|
||||
ATRIGCSVIDX_RECURRENT
|
||||
ATRIGCSVIDX_MIN_SLEEP
|
||||
ATRIGCSVIDX_BAL_TYPE
|
||||
ATRIGCSVIDX_BAL_DIRECTION
|
||||
ATRIGCSVIDX_BAL_CATEGORY
|
||||
ATRIGCSVIDX_BAL_DESTINATION_TAG
|
||||
ATRIGCSVIDX_BAL_RATING_SUBJECT
|
||||
ATRIGCSVIDX_BAL_SHARED_GROUP
|
||||
ATRIGCSVIDX_BAL_EXPIRY_TIME
|
||||
ATRIGCSVIDX_BAL_WEIGHT
|
||||
ATRIGCSVIDX_STATS_MIN_QUEUED_ITEMS
|
||||
ATRIGCSVIDX_ACTIONS_TAG
|
||||
ATRIGCSVIDX_WEIGHT
|
||||
)
|
||||
|
||||
type TPLoader interface {
|
||||
LoadDestinations() error
|
||||
LoadRates() error
|
||||
@@ -97,7 +134,6 @@ func NewTiming(timingInfo ...string) (rt *utils.TPTiming) {
|
||||
}
|
||||
|
||||
func UpdateCdrStats(cs *CdrStats, triggers ActionTriggerPriotityList, tpCs *utils.TPCdrStat) {
|
||||
|
||||
if tpCs.QueueLength != "" {
|
||||
if qi, err := strconv.Atoi(tpCs.QueueLength); err == nil {
|
||||
cs.QueueLength = qi
|
||||
@@ -312,26 +348,6 @@ type FileLineRegexValidator struct {
|
||||
Message string // Pass this message as helper
|
||||
}
|
||||
|
||||
// Keep here the index reference for all the files, so we can use it as base for both loader and importer
|
||||
//ToDo: Add the rest of the files
|
||||
var CSV_FIELD_INDEX = map[string]map[string]int{
|
||||
utils.ACTIONS_CSV: map[string]int{
|
||||
utils.CSVFLD_ACTIONS_TAG: 0,
|
||||
utils.CSVFLD_ACTION: 1,
|
||||
utils.CSVFLD_EXTRA_PARAMS: 2,
|
||||
utils.CSVFLD_BALANCE_TYPE: 3,
|
||||
utils.CSVFLD_DIRECTION: 4,
|
||||
utils.CSVFLD_CATEGORY: 5,
|
||||
utils.CSVFLD_DESTINATION_TAG: 6,
|
||||
utils.CSVFLD_RATING_SUBJECT: 7,
|
||||
utils.CSVFLD_SHARED_GROUP: 8,
|
||||
utils.CSVFLD_EXPIRY_TIME: 9,
|
||||
utils.CSVFLD_UNITS: 10,
|
||||
utils.CSVFLD_BALANCE_WEIGHT: 11,
|
||||
utils.CSVFLD_WEIGHT: 12,
|
||||
},
|
||||
}
|
||||
|
||||
var FileValidators = map[string]*FileLineRegexValidator{
|
||||
utils.DESTINATIONS_CSV: &FileLineRegexValidator{utils.DESTINATIONS_NRCOLS,
|
||||
regexp.MustCompile(`(?:\w+\s*,\s*){1}(?:\+?\d+.?\d*){1}$`),
|
||||
@@ -360,8 +376,8 @@ var FileValidators = map[string]*FileLineRegexValidator{
|
||||
utils.ACTION_PLANS_CSV: &FileLineRegexValidator{utils.ACTION_PLANS_NRCOLS,
|
||||
regexp.MustCompile(`(?:\w+\s*,\s*){3}(?:\d+\.?\d*){1}`),
|
||||
"Tag([0-9A-Za-z_]),ActionsTag([0-9A-Za-z_]),TimingTag([0-9A-Za-z_]),Weight([0-9.])"},
|
||||
utils.ACTION_TRIGGERS_CSV: &FileLineRegexValidator{utils.ACTION_TRIGGERS_NRCOLS, regexp.MustCompile(`(?:\w+),(?:\*\w+)?,(?:\*out)?,(?:\*\w+),(?:\d+\.?\d*),(?:true|false)?,(?:\d+[smh]?),(?:\w+|\*any)?,(?:\d+\.?\d*)?,(?:\*\w+\s*|\+\d+[smh]\s*|\d+\s*)?,(?:\w+|\*any)?,(?:\w+|\*any)?,(?:\w+|\*any)?,(?:\d+)?,(?:\w+),(?:\d+\.?\d*)$`),
|
||||
"Tag([0-9A-Za-z_]),BalanceType(*[a-z_]),Direction(*out),ThresholdType(*[a-z_]),ThresholdValue([0-9]+),Recurrent(true|false),MinSleep([0-9]+)?,BalanceDestinationTag([0-9A-Za-z_]|*all),BalanceWeight(*[a-z_]),BalanceExpiryTime(*[a-z_]|+[0-9][smh]|[0-9]),BalanceRatingSubject(*[a-z_]),BalanceCategory([a-z_]),BalanceSharedGroup(*[a-z_]),StatsMinQueuedItems([0-9]+),ActionsTag([0-9A-Za-z_]),Weight([0-9]+)"},
|
||||
utils.ACTION_TRIGGERS_CSV: &FileLineRegexValidator{utils.ACTION_TRIGGERS_NRCOLS, regexp.MustCompile(`(?:\w+),(?:\*\w+),(?:\d+\.?\d*),(?:true|false)?,(?:\d+[smh]?),(?:\*\w+)?,(?:\*out)?,(?:\w+|\*any)?,(?:\w+|\*any)?,(?:\w+|\*any)?,(?:\w+|\*any)?,(?:\*\w+\s*|\+\d+[smh]\s*|\d+\s*)?,(?:\d+\.?\d*)?,(?:\d+)?,(?:\w+),(?:\d+\.?\d*)$`),
|
||||
"Tag([0-9A-Za-z_]),ThresholdType(*[a-z_]),ThresholdValue([0-9]+),Recurrent(true|false),MinSleep([0-9]+)?,#### BalanceType(*[a-z_]),BalanceDirection(*out),BalanceCategory([a-z_]),BalanceDestinationTag([0-9A-Za-z_]|*all),BalanceRatingSubject(*[a-z_]),BalanceSharedGroup(*[a-z_]),BalanceExpiryTime(*[a-z_]|+[0-9][smh]|[0-9]),BalanceWeight(*[a-z_]),StatsMinQueuedItems([0-9]+),ActionsTag([0-9A-Za-z_]),Weight([0-9]+)"},
|
||||
utils.ACCOUNT_ACTIONS_CSV: &FileLineRegexValidator{utils.ACCOUNT_ACTIONS_NRCOLS,
|
||||
regexp.MustCompile(`(?:\w+\s*),(?:(\w+;?)+\s*),(?:\*out\s*),(?:\w+\s*),(?:\w+\s*)$`),
|
||||
"Tenant([0-9A-Za-z_]),Account([0-9A-Za-z_.]),Direction(*out),ActionTimingsTag([0-9A-Za-z_]),ActionTriggersTag([0-9A-Za-z_])"},
|
||||
|
||||
@@ -76,10 +76,10 @@ DUMMY,INVALID;DATA
|
||||
`
|
||||
|
||||
var actionTriggersSample = `#Tag,BalanceTag,Direction,ThresholdType,ThresholdValue,Recurrent,MinSleep,BalanceDestinationTag,BalanceWeight,BalanceExpiryTime,BalanceRatingSubject,BalanceCategory,BalanceSharedGroup,StatsMinQueuedItems,ActionsTag,Weight
|
||||
STANDARD_TRIGGERS,*monetary,*out,*min_balance,2,false,0,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_balance,20,false,0,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*monetary,*out,*max_counter,15,false,0,FS_USERS,,,,,,,LOG_WARNING,10
|
||||
CDRST1_WARN_ASR,,,*min_asr,45,true,1h,,,,,,,3,CDRST_WARN_HTTP,10
|
||||
STANDARD_TRIGGERS,*min_balance,2,false,0,*monetary,*out,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_balance,20,false,0,*monetary,*out,,,,,,,,LOG_WARNING,10
|
||||
STANDARD_TRIGGERS,*max_counter,15,false,0,*monetary,*out,,FS_USERS,,,,,,LOG_WARNING,10
|
||||
CDRST1_WARN_ASR,*min_asr,45,true,1h,,,,,,,,,3,CDRST_WARN_HTTP,10
|
||||
DUMMY,INVALID;DATA
|
||||
`
|
||||
|
||||
|
||||
@@ -367,7 +367,6 @@ func (self *TPCSVImporter) importActions(fn string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fieldIndex := CSV_FIELD_INDEX[utils.ACTIONS_CSV]
|
||||
acts := make(map[string][]*utils.TPAction)
|
||||
lineNr := 0
|
||||
for {
|
||||
@@ -381,18 +380,18 @@ func (self *TPCSVImporter) importActions(fn string) error {
|
||||
}
|
||||
continue
|
||||
}
|
||||
actId, actionType, balanceType, direction, destTag, rateSubject, category, sharedGroup := record[fieldIndex[utils.CSVFLD_ACTIONS_TAG]], record[fieldIndex[utils.CSVFLD_ACTION]],
|
||||
record[fieldIndex[utils.CSVFLD_BALANCE_TYPE]], record[fieldIndex[utils.CSVFLD_DIRECTION]], record[fieldIndex[utils.CSVFLD_DESTINATION_TAG]], record[fieldIndex[utils.CSVFLD_RATING_SUBJECT]],
|
||||
record[fieldIndex[utils.CSVFLD_CATEGORY]], record[fieldIndex[utils.CSVFLD_SHARED_GROUP]]
|
||||
units, err := strconv.ParseFloat(record[fieldIndex[utils.CSVFLD_UNITS]], 64)
|
||||
if err != nil && record[fieldIndex[utils.CSVFLD_UNITS]] != "" {
|
||||
actId, actionType, balanceType, direction, destTag, rateSubject, category, sharedGroup := record[ACTSCSVIDX_TAG], record[ACTSCSVIDX_ACTION],
|
||||
record[ACTSCSVIDX_BALANCE_TYPE], record[ACTSCSVIDX_DIRECTION], record[ACTSCSVIDX_DESTINATION_TAG], record[ACTSCSVIDX_RATING_SUBJECT],
|
||||
record[ACTSCSVIDX_CATEGORY], record[ACTSCSVIDX_SHARED_GROUP]
|
||||
units, err := strconv.ParseFloat(record[ACTSCSVIDX_UNITS], 64)
|
||||
if err != nil && record[ACTSCSVIDX_UNITS] != "" {
|
||||
if self.Verbose {
|
||||
log.Printf("Ignoring line %d, warning: <%s> ", lineNr, err.Error())
|
||||
}
|
||||
continue
|
||||
}
|
||||
balanceWeight, _ := strconv.ParseFloat(record[fieldIndex[utils.CSVFLD_BALANCE_WEIGHT]], 64)
|
||||
weight, err := strconv.ParseFloat(record[fieldIndex[utils.CSVFLD_WEIGHT]], 64)
|
||||
balanceWeight, _ := strconv.ParseFloat(record[ACTSCSVIDX_BALANCE_WEIGHT], 64)
|
||||
weight, err := strconv.ParseFloat(record[ACTSCSVIDX_WEIGHT], 64)
|
||||
if err != nil {
|
||||
if self.Verbose {
|
||||
log.Printf("Ignoring line %d, warning: <%s> ", lineNr, err.Error())
|
||||
@@ -407,13 +406,13 @@ func (self *TPCSVImporter) importActions(fn string) error {
|
||||
BalanceType: balanceType,
|
||||
Direction: direction,
|
||||
Units: units,
|
||||
ExpiryTime: record[5],
|
||||
ExpiryTime: record[ACTSCSVIDX_EXPIRY_TIME],
|
||||
DestinationId: destTag,
|
||||
RatingSubject: rateSubject,
|
||||
Category: category,
|
||||
SharedGroup: sharedGroup,
|
||||
BalanceWeight: balanceWeight,
|
||||
ExtraParameters: record[fieldIndex[utils.CSVFLD_EXTRA_PARAMS]],
|
||||
ExtraParameters: record[ACTSCSVIDX_EXTRA_PARAMS],
|
||||
Weight: weight,
|
||||
})
|
||||
}
|
||||
@@ -494,37 +493,39 @@ func (self *TPCSVImporter) importActionTriggers(fn string) error {
|
||||
}
|
||||
continue
|
||||
}
|
||||
tag, balanceType, direction, thresholdType, destinationTag, balanceExpirationDate, balanceRatingSubject, balanceCategory, balanceSharedGroup, actionsTag := record[0], record[1], record[2], record[3], record[7], record[9], record[10], record[10], record[12], record[14]
|
||||
threshold, err := strconv.ParseFloat(record[4], 64)
|
||||
tag, balanceType, direction, thresholdType, destinationTag, balanceExpirationDate, balanceRatingSubject, balanceCategory, balanceSharedGroup, actionsTag := record[ATRIGCSVIDX_TAG], record[ATRIGCSVIDX_BAL_TYPE],
|
||||
record[ATRIGCSVIDX_BAL_DIRECTION], record[ATRIGCSVIDX_THRESHOLD_TYPE], record[ATRIGCSVIDX_BAL_DESTINATION_TAG], record[ATRIGCSVIDX_BAL_EXPIRY_TIME], record[ATRIGCSVIDX_BAL_RATING_SUBJECT],
|
||||
record[ATRIGCSVIDX_BAL_CATEGORY], record[ATRIGCSVIDX_BAL_SHARED_GROUP], record[ATRIGCSVIDX_ACTIONS_TAG]
|
||||
threshold, err := strconv.ParseFloat(record[ATRIGCSVIDX_THRESHOLD_VALUE], 64)
|
||||
if err != nil {
|
||||
if self.Verbose {
|
||||
log.Printf("Ignoring line %d, warning: <%s> ", lineNr, err.Error())
|
||||
}
|
||||
continue
|
||||
}
|
||||
recurrent, err := strconv.ParseBool(record[5])
|
||||
recurrent, err := strconv.ParseBool(record[ATRIGCSVIDX_RECURRENT])
|
||||
if err != nil {
|
||||
log.Printf("Ignoring line %d, warning: <%s>", lineNr, err.Error())
|
||||
continue
|
||||
}
|
||||
minSleep, err := time.ParseDuration(record[6])
|
||||
if err != nil && record[6] != "" {
|
||||
minSleep, err := time.ParseDuration(record[ATRIGCSVIDX_MIN_SLEEP])
|
||||
if err != nil && record[ATRIGCSVIDX_MIN_SLEEP] != "" {
|
||||
log.Printf("Ignoring line %d, warning: <%s>", lineNr, err.Error())
|
||||
continue
|
||||
}
|
||||
balanceWeight, err := strconv.ParseFloat(record[8], 64)
|
||||
if err != nil && record[8] != "" {
|
||||
balanceWeight, err := strconv.ParseFloat(record[ATRIGCSVIDX_BAL_WEIGHT], 64)
|
||||
if err != nil && record[ATRIGCSVIDX_BAL_WEIGHT] != "" {
|
||||
if self.Verbose {
|
||||
log.Printf("Ignoring line %d, warning: <%s> ", lineNr, err.Error())
|
||||
}
|
||||
continue
|
||||
}
|
||||
minQueuedItems, err := strconv.Atoi(record[13])
|
||||
if err != nil && record[12] != "" {
|
||||
minQueuedItems, err := strconv.Atoi(record[ATRIGCSVIDX_STATS_MIN_QUEUED_ITEMS])
|
||||
if err != nil && record[ATRIGCSVIDX_STATS_MIN_QUEUED_ITEMS] != "" {
|
||||
log.Printf("Ignoring line %d, warning: <%s>", lineNr, err.Error())
|
||||
continue
|
||||
}
|
||||
weight, err := strconv.ParseFloat(record[15], 64)
|
||||
weight, err := strconv.ParseFloat(record[ATRIGCSVIDX_WEIGHT], 64)
|
||||
if err != nil {
|
||||
if self.Verbose {
|
||||
log.Printf("Ignoring line %d, warning: <%s> ", lineNr, err.Error())
|
||||
|
||||
@@ -53,19 +53,6 @@ const (
|
||||
ACCOUNT_ACTIONS_CSV = "AccountActions.csv"
|
||||
DERIVED_CHARGERS_CSV = "DerivedChargers.csv"
|
||||
CDR_STATS_CSV = "CdrStats.csv"
|
||||
CSVFLD_ACTIONS_TAG = "ActionsTag"
|
||||
CSVFLD_ACTION = "Action"
|
||||
CSVFLD_EXTRA_PARAMS = "ExtraParameters"
|
||||
CSVFLD_BALANCE_TYPE = "BalanceType"
|
||||
CSVFLD_DIRECTION = "Direction"
|
||||
CSVFLD_CATEGORY = "Category"
|
||||
CSVFLD_DESTINATION_TAG = "DestinationTag"
|
||||
CSVFLD_RATING_SUBJECT = "RatingSubject"
|
||||
CSVFLD_SHARED_GROUP = "SharedGroup"
|
||||
CSVFLD_EXPIRY_TIME = "ExpiryTime"
|
||||
CSVFLD_UNITS = "Units"
|
||||
CSVFLD_BALANCE_WEIGHT = "BalanceWeight"
|
||||
CSVFLD_WEIGHT = "Weight"
|
||||
TIMINGS_NRCOLS = 6
|
||||
DESTINATIONS_NRCOLS = 2
|
||||
RATES_NRCOLS = 6
|
||||
|
||||
Reference in New Issue
Block a user