diff --git a/engine/account.go b/engine/account.go index 33269d16d..c11d8cda7 100644 --- a/engine/account.go +++ b/engine/account.go @@ -54,7 +54,7 @@ func (ub *Account) getCreditForPrefix(cd *CallDescriptor) (duration time.Duratio for _, cb := range creditBalances { if len(cb.SharedGroups) > 0 { for sg := range cb.SharedGroups { - if sharedGroup, _ := ratingStorage.GetSharedGroup(sg, false); sharedGroup != nil { + if sharedGroup, _ := ratingStorage.GetSharedGroup(sg); sharedGroup != nil { sgb := sharedGroup.GetBalances(cd.Destination, cd.Category, cd.Direction, utils.MONETARY, ub) sgb = sharedGroup.SortBalancesByStrategy(cb, sgb) extendedCreditBalances = append(extendedCreditBalances, sgb...) @@ -68,7 +68,7 @@ func (ub *Account) getCreditForPrefix(cd *CallDescriptor) (duration time.Duratio for _, mb := range unitBalances { if len(mb.SharedGroups) > 0 { for sg := range mb.SharedGroups { - if sharedGroup, _ := ratingStorage.GetSharedGroup(sg, false); sharedGroup != nil { + if sharedGroup, _ := ratingStorage.GetSharedGroup(sg); sharedGroup != nil { sgb := sharedGroup.GetBalances(cd.Destination, cd.Category, cd.Direction, cd.TOR, ub) sgb = sharedGroup.SortBalancesByStrategy(mb, sgb) extendedMinuteBalances = append(extendedMinuteBalances, sgb...) @@ -136,7 +136,7 @@ func (acc *Account) setBalanceAction(a *Action) error { _, err := Guardian.Guard(func() (interface{}, error) { for sgID := range balance.SharedGroups { // add shared group member - sg, err := ratingStorage.GetSharedGroup(sgID, false) + sg, err := ratingStorage.GetSharedGroup(sgID) if err != nil || sg == nil { //than is problem utils.Logger.Warning(fmt.Sprintf("Could not get shared group: %v", sgID)) @@ -224,7 +224,7 @@ func (ub *Account) debitBalanceAction(a *Action, reset bool) error { _, err := Guardian.Guard(func() (interface{}, error) { for sgId := range bClone.SharedGroups { // add shared group member - sg, err := ratingStorage.GetSharedGroup(sgId, false) + sg, err := ratingStorage.GetSharedGroup(sgId) if err != nil || sg == nil { //than is problem utils.Logger.Warning(fmt.Sprintf("Could not get shared group: %v", sgId)) @@ -355,8 +355,8 @@ func (account *Account) getAlldBalancesForPrefix(destination, category, directio for _, b := range balances { if len(b.SharedGroups) > 0 { for sgId := range b.SharedGroups { - sharedGroup, err := ratingStorage.GetSharedGroup(sgId, false) - if err != nil { + sharedGroup, err := ratingStorage.GetSharedGroup(sgId) + if err != nil || sharedGroup == nil { utils.Logger.Warning(fmt.Sprintf("Could not get shared group: %v", sgId)) continue } @@ -766,7 +766,7 @@ func (account *Account) GetUniqueSharedGroupMembers(cd *CallDescriptor) (utils.S } memberIds := make(utils.StringMap) for _, sgID := range sharedGroupIds { - sharedGroup, err := ratingStorage.GetSharedGroup(sgID, false) + sharedGroup, err := ratingStorage.GetSharedGroup(sgID) if err != nil { utils.Logger.Warning(fmt.Sprintf("Could not get shared group: %v", sgID)) return nil, err diff --git a/engine/action_plan.go b/engine/action_plan.go index cf6b82219..c478c9953 100644 --- a/engine/action_plan.go +++ b/engine/action_plan.go @@ -268,7 +268,7 @@ func (at *ActionTiming) GetActionPlanID() string { func (at *ActionTiming) getActions() (as []*Action, err error) { if at.actions == nil { - at.actions, err = ratingStorage.GetActions(at.ActionsID, false) + at.actions, err = ratingStorage.GetActions(at.ActionsID) } at.actions.Sort() return at.actions, err diff --git a/engine/action_trigger.go b/engine/action_trigger.go index 528788f44..dea6a54d3 100644 --- a/engine/action_trigger.go +++ b/engine/action_trigger.go @@ -57,12 +57,12 @@ func (at *ActionTrigger) Execute(ub *Account, sq *StatsQueueTriggered) (err erro } // does NOT need to Lock() because it is triggered from a method that took the Lock var aac Actions - aac, err = ratingStorage.GetActions(at.ActionsID, false) - aac.Sort() + aac, err = ratingStorage.GetActions(at.ActionsID) if err != nil { utils.Logger.Err(fmt.Sprintf("Failed to get actions: %v", err)) return } + aac.Sort() at.Executed = true transactionFailed := false removeAccountActionFound := false diff --git a/engine/aliases.go b/engine/aliases.go index f1b354b1c..0b23fb224 100644 --- a/engine/aliases.go +++ b/engine/aliases.go @@ -188,7 +188,7 @@ func (am *AliasHandler) SetAlias(attr *AttrAddAlias, reply *string) error { var oldAlias *Alias if !attr.Overwrite { // get previous value - oldAlias, _ = am.accountingDb.GetAlias(attr.Alias.GetId(), false) + oldAlias, _ = am.accountingDb.GetAlias(attr.Alias.GetId()) } if attr.Overwrite || oldAlias == nil { diff --git a/engine/cache.go b/engine/cache.go index 32463bdba..9357a77f8 100644 --- a/engine/cache.go +++ b/engine/cache.go @@ -6,9 +6,7 @@ import "sync" const ( PREFIX_LEN = 4 KIND_ADD = "ADD" - KIND_ADP = "ADP" KIND_REM = "REM" - KIND_POP = "POP" KIND_PRF = "PRF" DOUBLE_CACHE = true ) @@ -70,10 +68,6 @@ func CacheCommitTransaction() { CacheRemPrefixKey(item.key) case KIND_ADD: CacheSet(item.key, item.value) - case KIND_ADP: - CachePush(item.key, item.value.([]string)...) - case KIND_POP: - CachePop(item.key, item.value.([]string)...) } } mux.Unlock() diff --git a/engine/cache_store.go b/engine/cache_store.go index f73afab44..4c100f266 100644 --- a/engine/cache_store.go +++ b/engine/cache_store.go @@ -16,8 +16,6 @@ import ( type cacheStore interface { Put(string, interface{}) Get(string) (interface{}, bool) - Append(string, ...string) - Pop(string, ...string) Delete(string) DeletePrefix(string) CountEntriesForPrefix(string) int @@ -56,35 +54,6 @@ func (cs cacheDoubleStore) Get(key string) (interface{}, bool) { return nil, false } -func (cs cacheDoubleStore) Append(key string, values ...string) { - var elements map[string]struct{} // using map for faster check if element is present - if v, ok := cs.Get(key); ok { - elements = v.(map[string]struct{}) - } else { - elements = make(map[string]struct{}) - } - for _, value := range values { - elements[value] = struct{}{} - } - cache.Put(key, elements) -} - -func (cs cacheDoubleStore) Pop(key string, values ...string) { - if v, ok := cs.Get(key); ok { - elements, ok := v.(map[string]struct{}) - if ok { - for _, value := range values { - delete(elements, value) - } - if len(elements) > 0 { - cache.Put(key, elements) - } else { - cache.Delete(key) - } - } - } -} - func (cs cacheDoubleStore) Delete(key string) { prefix, key := key[:PREFIX_LEN], key[PREFIX_LEN:] if keyMap, ok := cs[prefix]; ok { @@ -203,35 +172,6 @@ func (cs cacheLRUTTL) Get(key string) (interface{}, bool) { return nil, false } -func (cs cacheLRUTTL) Append(key string, values ...string) { - var elements map[string]struct{} // using map for faster check if element is present - if v, ok := cs.Get(key); ok { - elements = v.(map[string]struct{}) - } else { - elements = make(map[string]struct{}) - } - for _, value := range values { - elements[value] = struct{}{} - } - cache.Put(key, elements) -} - -func (cs cacheLRUTTL) Pop(key string, values ...string) { - if v, ok := cs.Get(key); ok { - elements, ok := v.(map[string]struct{}) - if ok { - for _, value := range values { - delete(elements, value) - } - if len(elements) > 0 { - cache.Put(key, elements) - } else { - cache.Delete(key) - } - } - } -} - func (cs cacheLRUTTL) Delete(key string) { prefix, key := key[:PREFIX_LEN], key[PREFIX_LEN:] if keyMap, ok := cs[prefix]; ok { @@ -283,19 +223,6 @@ func (cs cacheSimpleStore) Put(key string, value interface{}) { cs.cache[key] = value } -func (cs cacheSimpleStore) Append(key string, values ...string) { - var elements map[string]struct{} - if v, ok := cs.Get(key); ok { - elements = v.(map[string]struct{}) - } else { - elements = make(map[string]struct{}) - } - for _, value := range values { - elements[value] = struct{}{} - } - cache.Put(key, elements) -} - func (cs cacheSimpleStore) Get(key string) (interface{}, bool) { if value, exists := cs.cache[key]; exists { return value, true @@ -303,22 +230,6 @@ func (cs cacheSimpleStore) Get(key string) (interface{}, bool) { return nil, false } -func (cs cacheSimpleStore) Pop(key string, values ...string) { - if v, ok := cs.Get(key); ok { - elements, ok := v.(map[string]struct{}) - if ok { - for _, value := range values { - delete(elements, value) - } - if len(elements) > 0 { - cache.Put(key, elements) - } else { - cache.Delete(key) - } - } - } -} - func (cs cacheSimpleStore) Delete(key string) { if _, ok := cs.cache[key]; ok { delete(cs.cache, key) diff --git a/engine/storage_redis.go b/engine/storage_redis.go index a00033801..489abd631 100644 --- a/engine/storage_redis.go +++ b/engine/storage_redis.go @@ -290,28 +290,33 @@ func (rs *RedisStorage) SetDestination(dest *Destination, cache bool) (err error return } -func (rs *RedisStorage) GetDestinationIDs(prefix string) (ids []string, err error) { - prefix = utils.DESTINATION_PREFIX + prefix - var values []string - if values, err = rs.db.Cmd("SMEMBERS", prefix).List(); len(values) > 0 && err == nil { - CachePush(utils.DESTINATION_PREFIX+prefix, values...) - } else { +func (rs *RedisStorage) GetReverseDestination(prefix string) (ids []string, err error) { + prefix = utils.REVERSE_DESTINATION_PREFIX + prefix + if x, ok := CacheGet(prefix); ok { + if x != nil { + return x.([]string), nil + } return nil, utils.ErrNotFound } + var values []string + if values, err = rs.db.Cmd("SMEMBERS", prefix).List(); len(values) > 0 && err == nil { + } else { + + return nil, utils.ErrNotFound + } + CacheSet(prefix, values) return } -func (rs *RedisStorage) SetDestinationIDs(dest *Destination) (err error) { +func (rs *RedisStorage) SetReverseDestination(dest *Destination, cache bool) (err error) { for _, p := range dest.Prefixes { - err = rs.db.Cmd("SADD", utils.DESTINATION_PREFIX+p, dest.Id).Err + err = rs.db.Cmd("SADD", utils.REVERSE_DESTINATION_PREFIX+p, dest.Id).Err if err != nil { break } } - - if err == nil && historyScribe != nil { - response := 0 - go historyScribe.Call("HistoryV1.Record", dest.GetHistoryRecord(false), &response) + if cache && err == nil { + CacheSet(utils.REVERSE_DESTINATION_PREFIX+dest.Id, dest) } return } diff --git a/engine/tp_reader.go b/engine/tp_reader.go index 2ec28b63d..64e2271a6 100644 --- a/engine/tp_reader.go +++ b/engine/tp_reader.go @@ -1642,6 +1642,8 @@ func (tpr *TpReader) WriteToDatabase(flush, verbose bool) (err error) { if err != nil { return err } + // write reverse destination + if verbose { log.Print("\t", d.Id, " : ", d.Prefixes) } diff --git a/utils/consts.go b/utils/consts.go index 9ff6925b1..0058202c3 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -39,236 +39,238 @@ var ( ) const ( - VERSION = "0.9.1~rc8" - DIAMETER_FIRMWARE_REVISION = 918 - REDIS_MAX_CONNS = 10 - POSTGRES = "postgres" - MYSQL = "mysql" - MONGO = "mongo" - REDIS = "redis" - LOCALHOST = "127.0.0.1" - FSCDR_FILE_CSV = "freeswitch_file_csv" - FSCDR_HTTP_JSON = "freeswitch_http_json" - NOT_IMPLEMENTED = "not implemented" - PREPAID = "prepaid" - META_PREPAID = "*prepaid" - POSTPAID = "postpaid" - META_POSTPAID = "*postpaid" - PSEUDOPREPAID = "pseudoprepaid" - META_PSEUDOPREPAID = "*pseudoprepaid" - META_RATED = "*rated" - META_NONE = "*none" - META_NOW = "*now" - TBL_TP_TIMINGS = "tp_timings" - TBL_TP_DESTINATIONS = "tp_destinations" - TBL_TP_RATES = "tp_rates" - TBL_TP_DESTINATION_RATES = "tp_destination_rates" - TBL_TP_RATING_PLANS = "tp_rating_plans" - TBL_TP_RATE_PROFILES = "tp_rating_profiles" - TBL_TP_SHARED_GROUPS = "tp_shared_groups" - TBL_TP_CDR_STATS = "tp_cdr_stats" - TBL_TP_LCRS = "tp_lcr_rules" - TBL_TP_ACTIONS = "tp_actions" - TBL_TP_ACTION_PLANS = "tp_action_plans" - TBL_TP_ACTION_TRIGGERS = "tp_action_triggers" - TBL_TP_ACCOUNT_ACTIONS = "tp_account_actions" - TBL_TP_DERIVED_CHARGERS = "tp_derived_chargers" - TBL_TP_USERS = "tp_users" - TBL_TP_ALIASES = "tp_aliases" - TBLSMCosts = "sm_costs" - TBLTPResourceLimits = "tp_resource_limits" - TBL_CDRS = "cdrs" - TIMINGS_CSV = "Timings.csv" - DESTINATIONS_CSV = "Destinations.csv" - RATES_CSV = "Rates.csv" - DESTINATION_RATES_CSV = "DestinationRates.csv" - RATING_PLANS_CSV = "RatingPlans.csv" - RATING_PROFILES_CSV = "RatingProfiles.csv" - SHARED_GROUPS_CSV = "SharedGroups.csv" - LCRS_CSV = "LcrRules.csv" - ACTIONS_CSV = "Actions.csv" - ACTION_PLANS_CSV = "ActionPlans.csv" - ACTION_TRIGGERS_CSV = "ActionTriggers.csv" - ACCOUNT_ACTIONS_CSV = "AccountActions.csv" - DERIVED_CHARGERS_CSV = "DerivedChargers.csv" - CDR_STATS_CSV = "CdrStats.csv" - USERS_CSV = "Users.csv" - ALIASES_CSV = "Aliases.csv" - ROUNDING_UP = "*up" - ROUNDING_MIDDLE = "*middle" - ROUNDING_DOWN = "*down" - ANY = "*any" - UNLIMITED = "*unlimited" - ZERO = "*zero" - ASAP = "*asap" - USERS = "*users" - COMMENT_CHAR = '#' - CSV_SEP = ',' - FALLBACK_SEP = ';' - INFIELD_SEP = ";" - FIELDS_SEP = "," - InInFieldSep = ":" - STATIC_HDRVAL_SEP = "::" - REGEXP_PREFIX = "~" - FILTER_VAL_START = "(" - FILTER_VAL_END = ")" - JSON = "json" - GOB = "gob" - MSGPACK = "msgpack" - CSV_LOAD = "CSVLOAD" - CGRID = "CGRID" - TOR = "ToR" - ORDERID = "OrderID" - ACCID = "OriginID" - InitialOriginID = "InitialOriginID" - OriginIDPrefix = "OriginIDPrefix" - CDRSOURCE = "Source" - CDRHOST = "OriginHost" - REQTYPE = "RequestType" - DIRECTION = "Direction" - TENANT = "Tenant" - CATEGORY = "Category" - ACCOUNT = "Account" - SUBJECT = "Subject" - DESTINATION = "Destination" - SETUP_TIME = "SetupTime" - ANSWER_TIME = "AnswerTime" - USAGE = "Usage" - LastUsed = "LastUsed" - PDD = "PDD" - SUPPLIER = "Supplier" - MEDI_RUNID = "RunID" - COST = "Cost" - COST_DETAILS = "CostDetails" - RATED = "rated" - RATED_FLD = "Rated" - PartialField = "Partial" - DEFAULT_RUNID = "*default" - META_DEFAULT = "*default" - STATIC_VALUE_PREFIX = "^" - CSV = "csv" - FWV = "fwv" - DRYRUN = "dry_run" - META_COMBIMED = "*combimed" - MetaInternal = "*internal" - ZERO_RATING_SUBJECT_PREFIX = "*zero" - OK = "OK" - CDRE_FIXED_WIDTH = "fwv" - XML_PROFILE_PREFIX = "*xml:" - CDRE = "cdre" - CDRC = "cdrc" - MASK_CHAR = "*" - CONCATENATED_KEY_SEP = ":" - FORKED_CDR = "forked_cdr" - UNIT_TEST = "UNIT_TEST" - HDR_VAL_SEP = "/" - MONETARY = "*monetary" - SMS = "*sms" - MMS = "*mms" - GENERIC = "*generic" - DATA = "*data" - VOICE = "*voice" - MAX_COST_FREE = "*free" - MAX_COST_DISCONNECT = "*disconnect" - HOURS = "hours" - MINUTES = "minutes" - NANOSECONDS = "nanoseconds" - SECONDS = "seconds" - OUT = "*out" - IN = "*in" - META_OUT = "*out" - META_ANY = "*any" - CDR_IMPORT = "cdr_import" - CDR_EXPORT = "cdr_export" - ASR = "ASR" - ACD = "ACD" - FILTER_REGEXP_TPL = "$1$2$3$4$5" - TASKS_KEY = "tasks" - ACTION_PLAN_PREFIX = "apl_" - ACTION_TRIGGER_PREFIX = "atr_" - RATING_PLAN_PREFIX = "rpl_" - RATING_PROFILE_PREFIX = "rpf_" - ACTION_PREFIX = "act_" - SHARED_GROUP_PREFIX = "shg_" - ACCOUNT_PREFIX = "acc_" - GENERIC_PREFIX = "gen_" - DESTINATION_PREFIX = "dst_" - LCR_PREFIX = "lcr_" - DERIVEDCHARGERS_PREFIX = "dcs_" - CDR_STATS_QUEUE_PREFIX = "csq_" - PUBSUB_SUBSCRIBERS_PREFIX = "pss_" - USERS_PREFIX = "usr_" - ALIASES_PREFIX = "als_" - REVERSE_ALIASES_PREFIX = "rls_" - CDR_STATS_PREFIX = "cst_" - TEMP_DESTINATION_PREFIX = "tmp_" - LOG_CALL_COST_PREFIX = "cco_" - LOG_ACTION_TIMMING_PREFIX = "ltm_" - LOG_ACTION_TRIGGER_PREFIX = "ltr_" - VERSION_PREFIX = "ver_" - LOG_ERR = "ler_" - LOG_CDR = "cdr_" - LOG_MEDIATED_CDR = "mcd_" - LOADINST_KEY = "load_history" - SESSION_MANAGER_SOURCE = "SMR" - MEDIATOR_SOURCE = "MED" - CDRS_SOURCE = "CDRS" - SCHED_SOURCE = "SCH" - RATER_SOURCE = "RAT" - CREATE_CDRS_TABLES_SQL = "create_cdrs_tables.sql" - CREATE_TARIFFPLAN_TABLES_SQL = "create_tariffplan_tables.sql" - TEST_SQL = "TEST_SQL" - DESTINATIONS_LOAD_THRESHOLD = 0.1 - META_CONSTANT = "*constant" - META_FILLER = "*filler" - META_HANDLER = "*handler" - META_HTTP_POST = "*http_post" - META_HTTP_JSON = "*http_json" - META_HTTP_JSONRPC = "*http_jsonrpc" - NANO_MULTIPLIER = 1000000000 - CGR_AUTHORIZE = "CGR_AUTHORIZE" - CONFIG_DIR = "/etc/cgrates/" - CGR_ACCOUNT = "cgr_account" - CGR_SUPPLIER = "cgr_supplier" - CGR_DESTINATION = "cgr_destination" - CGR_SUBJECT = "cgr_subject" - CGR_CATEGORY = "cgr_category" - CGR_REQTYPE = "cgr_reqtype" - CGR_TENANT = "cgr_tenant" - CGR_TOR = "cgr_tor" - CGR_ACCID = "cgr_accid" - CGR_HOST = "cgr_host" - CGR_PDD = "cgr_pdd" - DISCONNECT_CAUSE = "DisconnectCause" - CGR_DISCONNECT_CAUSE = "cgr_disconnectcause" - CGR_COMPUTELCR = "cgr_computelcr" - CGR_SUPPLIERS = "cgr_suppliers" - CGRFlags = "cgr_flags" - KAM_FLATSTORE = "kamailio_flatstore" - OSIPS_FLATSTORE = "opensips_flatstore" - MAX_DEBIT_CACHE_PREFIX = "MAX_DEBIT_" - REFUND_INCR_CACHE_PREFIX = "REFUND_INCR_" - REFUND_ROUND_CACHE_PREFIX = "REFUND_ROUND_" - GET_SESS_RUNS_CACHE_PREFIX = "GET_SESS_RUNS_" - GET_DERIV_MAX_SESS_TIME = "GET_DERIV_MAX_SESS_TIME_" - LOG_CALL_COST_CACHE_PREFIX = "LOG_CALL_COSTS_" - LCRCachePrefix = "LCR_" - ALIAS_CONTEXT_RATING = "*rating" - NOT_AVAILABLE = "N/A" - CALL = "call" - EXTRA_FIELDS = "ExtraFields" - META_SURETAX = "*sure_tax" - SURETAX = "suretax" - DIAMETER_AGENT = "diameter_agent" - COUNTER_EVENT = "*event" - COUNTER_BALANCE = "*balance" - EVENT_NAME = "EventName" - COMPUTE_LCR = "ComputeLcr" - CGR_AUTHORIZATION = "CgrAuthorization" - CGR_SESSION_START = "CgrSessionStart" - CGR_SESSION_UPDATE = "CgrSessionUpdate" - CGR_SESSION_END = "CgrSessionEnd" - CGR_LCR_REQUEST = "CgrLcrRequest" + VERSION = "0.9.1~rc8" + DIAMETER_FIRMWARE_REVISION = 918 + REDIS_MAX_CONNS = 10 + POSTGRES = "postgres" + MYSQL = "mysql" + MONGO = "mongo" + REDIS = "redis" + LOCALHOST = "127.0.0.1" + FSCDR_FILE_CSV = "freeswitch_file_csv" + FSCDR_HTTP_JSON = "freeswitch_http_json" + NOT_IMPLEMENTED = "not implemented" + PREPAID = "prepaid" + META_PREPAID = "*prepaid" + POSTPAID = "postpaid" + META_POSTPAID = "*postpaid" + PSEUDOPREPAID = "pseudoprepaid" + META_PSEUDOPREPAID = "*pseudoprepaid" + META_RATED = "*rated" + META_NONE = "*none" + META_NOW = "*now" + TBL_TP_TIMINGS = "tp_timings" + TBL_TP_DESTINATIONS = "tp_destinations" + TBL_TP_RATES = "tp_rates" + TBL_TP_DESTINATION_RATES = "tp_destination_rates" + TBL_TP_RATING_PLANS = "tp_rating_plans" + TBL_TP_RATE_PROFILES = "tp_rating_profiles" + TBL_TP_SHARED_GROUPS = "tp_shared_groups" + TBL_TP_CDR_STATS = "tp_cdr_stats" + TBL_TP_LCRS = "tp_lcr_rules" + TBL_TP_ACTIONS = "tp_actions" + TBL_TP_ACTION_PLANS = "tp_action_plans" + TBL_TP_ACTION_TRIGGERS = "tp_action_triggers" + TBL_TP_ACCOUNT_ACTIONS = "tp_account_actions" + TBL_TP_DERIVED_CHARGERS = "tp_derived_chargers" + TBL_TP_USERS = "tp_users" + TBL_TP_ALIASES = "tp_aliases" + TBLSMCosts = "sm_costs" + TBLTPResourceLimits = "tp_resource_limits" + TBL_CDRS = "cdrs" + TIMINGS_CSV = "Timings.csv" + DESTINATIONS_CSV = "Destinations.csv" + RATES_CSV = "Rates.csv" + DESTINATION_RATES_CSV = "DestinationRates.csv" + RATING_PLANS_CSV = "RatingPlans.csv" + RATING_PROFILES_CSV = "RatingProfiles.csv" + SHARED_GROUPS_CSV = "SharedGroups.csv" + LCRS_CSV = "LcrRules.csv" + ACTIONS_CSV = "Actions.csv" + ACTION_PLANS_CSV = "ActionPlans.csv" + ACTION_TRIGGERS_CSV = "ActionTriggers.csv" + ACCOUNT_ACTIONS_CSV = "AccountActions.csv" + DERIVED_CHARGERS_CSV = "DerivedChargers.csv" + CDR_STATS_CSV = "CdrStats.csv" + USERS_CSV = "Users.csv" + ALIASES_CSV = "Aliases.csv" + ROUNDING_UP = "*up" + ROUNDING_MIDDLE = "*middle" + ROUNDING_DOWN = "*down" + ANY = "*any" + UNLIMITED = "*unlimited" + ZERO = "*zero" + ASAP = "*asap" + USERS = "*users" + COMMENT_CHAR = '#' + CSV_SEP = ',' + FALLBACK_SEP = ';' + INFIELD_SEP = ";" + FIELDS_SEP = "," + InInFieldSep = ":" + STATIC_HDRVAL_SEP = "::" + REGEXP_PREFIX = "~" + FILTER_VAL_START = "(" + FILTER_VAL_END = ")" + JSON = "json" + GOB = "gob" + MSGPACK = "msgpack" + CSV_LOAD = "CSVLOAD" + CGRID = "CGRID" + TOR = "ToR" + ORDERID = "OrderID" + ACCID = "OriginID" + InitialOriginID = "InitialOriginID" + OriginIDPrefix = "OriginIDPrefix" + CDRSOURCE = "Source" + CDRHOST = "OriginHost" + REQTYPE = "RequestType" + DIRECTION = "Direction" + TENANT = "Tenant" + CATEGORY = "Category" + ACCOUNT = "Account" + SUBJECT = "Subject" + DESTINATION = "Destination" + SETUP_TIME = "SetupTime" + ANSWER_TIME = "AnswerTime" + USAGE = "Usage" + LastUsed = "LastUsed" + PDD = "PDD" + SUPPLIER = "Supplier" + MEDI_RUNID = "RunID" + COST = "Cost" + COST_DETAILS = "CostDetails" + RATED = "rated" + RATED_FLD = "Rated" + PartialField = "Partial" + DEFAULT_RUNID = "*default" + META_DEFAULT = "*default" + STATIC_VALUE_PREFIX = "^" + CSV = "csv" + FWV = "fwv" + DRYRUN = "dry_run" + META_COMBIMED = "*combimed" + MetaInternal = "*internal" + ZERO_RATING_SUBJECT_PREFIX = "*zero" + OK = "OK" + CDRE_FIXED_WIDTH = "fwv" + XML_PROFILE_PREFIX = "*xml:" + CDRE = "cdre" + CDRC = "cdrc" + MASK_CHAR = "*" + CONCATENATED_KEY_SEP = ":" + FORKED_CDR = "forked_cdr" + UNIT_TEST = "UNIT_TEST" + HDR_VAL_SEP = "/" + MONETARY = "*monetary" + SMS = "*sms" + MMS = "*mms" + GENERIC = "*generic" + DATA = "*data" + VOICE = "*voice" + MAX_COST_FREE = "*free" + MAX_COST_DISCONNECT = "*disconnect" + HOURS = "hours" + MINUTES = "minutes" + NANOSECONDS = "nanoseconds" + SECONDS = "seconds" + OUT = "*out" + IN = "*in" + META_OUT = "*out" + META_ANY = "*any" + CDR_IMPORT = "cdr_import" + CDR_EXPORT = "cdr_export" + ASR = "ASR" + ACD = "ACD" + FILTER_REGEXP_TPL = "$1$2$3$4$5" + TASKS_KEY = "tasks" + ACTION_PLAN_PREFIX = "apl_" + ACTION_TRIGGER_PREFIX = "atr_" + REVERSE_ACTION_TRIGGER_PREFIX = "rtr_" + RATING_PLAN_PREFIX = "rpl_" + RATING_PROFILE_PREFIX = "rpf_" + ACTION_PREFIX = "act_" + SHARED_GROUP_PREFIX = "shg_" + ACCOUNT_PREFIX = "acc_" + GENERIC_PREFIX = "gen_" + DESTINATION_PREFIX = "dst_" + REVERSE_DESTINATION_PREFIX = "rdt_" + LCR_PREFIX = "lcr_" + DERIVEDCHARGERS_PREFIX = "dcs_" + CDR_STATS_QUEUE_PREFIX = "csq_" + PUBSUB_SUBSCRIBERS_PREFIX = "pss_" + USERS_PREFIX = "usr_" + ALIASES_PREFIX = "als_" + REVERSE_ALIASES_PREFIX = "rls_" + CDR_STATS_PREFIX = "cst_" + TEMP_DESTINATION_PREFIX = "tmp_" + LOG_CALL_COST_PREFIX = "cco_" + LOG_ACTION_TIMMING_PREFIX = "ltm_" + LOG_ACTION_TRIGGER_PREFIX = "ltr_" + VERSION_PREFIX = "ver_" + LOG_ERR = "ler_" + LOG_CDR = "cdr_" + LOG_MEDIATED_CDR = "mcd_" + LOADINST_KEY = "load_history" + SESSION_MANAGER_SOURCE = "SMR" + MEDIATOR_SOURCE = "MED" + CDRS_SOURCE = "CDRS" + SCHED_SOURCE = "SCH" + RATER_SOURCE = "RAT" + CREATE_CDRS_TABLES_SQL = "create_cdrs_tables.sql" + CREATE_TARIFFPLAN_TABLES_SQL = "create_tariffplan_tables.sql" + TEST_SQL = "TEST_SQL" + DESTINATIONS_LOAD_THRESHOLD = 0.1 + META_CONSTANT = "*constant" + META_FILLER = "*filler" + META_HANDLER = "*handler" + META_HTTP_POST = "*http_post" + META_HTTP_JSON = "*http_json" + META_HTTP_JSONRPC = "*http_jsonrpc" + NANO_MULTIPLIER = 1000000000 + CGR_AUTHORIZE = "CGR_AUTHORIZE" + CONFIG_DIR = "/etc/cgrates/" + CGR_ACCOUNT = "cgr_account" + CGR_SUPPLIER = "cgr_supplier" + CGR_DESTINATION = "cgr_destination" + CGR_SUBJECT = "cgr_subject" + CGR_CATEGORY = "cgr_category" + CGR_REQTYPE = "cgr_reqtype" + CGR_TENANT = "cgr_tenant" + CGR_TOR = "cgr_tor" + CGR_ACCID = "cgr_accid" + CGR_HOST = "cgr_host" + CGR_PDD = "cgr_pdd" + DISCONNECT_CAUSE = "DisconnectCause" + CGR_DISCONNECT_CAUSE = "cgr_disconnectcause" + CGR_COMPUTELCR = "cgr_computelcr" + CGR_SUPPLIERS = "cgr_suppliers" + CGRFlags = "cgr_flags" + KAM_FLATSTORE = "kamailio_flatstore" + OSIPS_FLATSTORE = "opensips_flatstore" + MAX_DEBIT_CACHE_PREFIX = "MAX_DEBIT_" + REFUND_INCR_CACHE_PREFIX = "REFUND_INCR_" + REFUND_ROUND_CACHE_PREFIX = "REFUND_ROUND_" + GET_SESS_RUNS_CACHE_PREFIX = "GET_SESS_RUNS_" + GET_DERIV_MAX_SESS_TIME = "GET_DERIV_MAX_SESS_TIME_" + LOG_CALL_COST_CACHE_PREFIX = "LOG_CALL_COSTS_" + LCRCachePrefix = "LCR_" + ALIAS_CONTEXT_RATING = "*rating" + NOT_AVAILABLE = "N/A" + CALL = "call" + EXTRA_FIELDS = "ExtraFields" + META_SURETAX = "*sure_tax" + SURETAX = "suretax" + DIAMETER_AGENT = "diameter_agent" + COUNTER_EVENT = "*event" + COUNTER_BALANCE = "*balance" + EVENT_NAME = "EventName" + COMPUTE_LCR = "ComputeLcr" + CGR_AUTHORIZATION = "CgrAuthorization" + CGR_SESSION_START = "CgrSessionStart" + CGR_SESSION_UPDATE = "CgrSessionUpdate" + CGR_SESSION_END = "CgrSessionEnd" + CGR_LCR_REQUEST = "CgrLcrRequest" // action trigger threshold types TRIGGER_MIN_EVENT_COUNTER = "*min_event_counter" TRIGGER_MIN_BALANCE_COUNTER = "*min_balance_counter"