Add usage opt in config for routes subsystem

This commit is contained in:
ionutboangiu
2021-10-06 16:24:49 +03:00
committed by Dan Christian Bogos
parent e104c2d297
commit f8063c99d2
8 changed files with 71 additions and 8 deletions

View File

@@ -156,6 +156,7 @@ func newCGRConfig(config []byte) (cfg *CGRConfig, err error) {
ProfileCount: []*utils.DynamicIntOpt{},
Limit: []*utils.DynamicIntOpt{},
Offset: []*utils.DynamicIntOpt{},
Usage: []*utils.DynamicDecimalBigOpt{},
}},
sureTaxCfg: new(SureTaxCfg),
dispatcherSCfg: new(DispatcherSCfg),

View File

@@ -806,7 +806,10 @@ const CGRATES_CFG_JSON = `
// },
// "*offset": { //
// "*default": 1,
// },
// },
"*usage": { //
"*default": "1m",
},
},
},

View File

@@ -36,6 +36,7 @@ import (
"github.com/cgrates/birpc/context"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
"github.com/ericlagergren/decimal"
)
var (
@@ -437,6 +438,12 @@ func testCGRConfigReloadSupplierS(t *testing.T) {
},
Limit: []*utils.DynamicIntOpt{},
Offset: []*utils.DynamicIntOpt{},
Usage: []*utils.DynamicDecimalBigOpt{
{
FilterIDs: []string{utils.MetaDefault},
Value: decimal.New(int64(time.Minute), 0),
},
},
},
}
if !reflect.DeepEqual(expAttr, cfg.RouteSCfg()) {

View File

@@ -975,6 +975,9 @@ func TestDfRouteSJsonCfg(t *testing.T) {
MaxCost: map[string]interface{}{
utils.MetaDefault: utils.EmptyString,
},
Usage: map[string]string{
utils.MetaDefault: "1m",
},
},
}
dfCgrJSONCfg, err := NewCgrJsonCfgFromBytes([]byte(CGRATES_CFG_JSON))

File diff suppressed because one or more lines are too long

View File

@@ -30,6 +30,7 @@ type RoutesOpts struct {
Limit []*utils.DynamicIntOpt
Offset []*utils.DynamicIntOpt
ProfileCount []*utils.DynamicIntOpt
Usage []*utils.DynamicDecimalBigOpt
}
// RouteSCfg is the configuration of route service
@@ -58,7 +59,7 @@ func (rts *RouteSCfg) Load(ctx *context.Context, jsnCfg ConfigDB, _ *CGRConfig)
return rts.loadFromJSONCfg(jsnRouteSCfg)
}
func (rtsOpts *RoutesOpts) loadFromJSONCfg(jsnCfg *RoutesOptsJson) {
func (rtsOpts *RoutesOpts) loadFromJSONCfg(jsnCfg *RoutesOptsJson) (err error) {
if jsnCfg == nil {
return
}
@@ -80,6 +81,14 @@ func (rtsOpts *RoutesOpts) loadFromJSONCfg(jsnCfg *RoutesOptsJson) {
if jsnCfg.ProfileCount != nil {
rtsOpts.ProfileCount = append(rtsOpts.ProfileCount, utils.MapToDynamicIntOpts(jsnCfg.ProfileCount)...)
}
if jsnCfg.Usage != nil {
var usage []*utils.DynamicDecimalBigOpt
if usage, err = utils.MapToDynamicDecimalBigOpts(jsnCfg.Usage); err != nil {
return
}
rtsOpts.Usage = append(rtsOpts.Usage, usage...)
}
return
}
func (rts *RouteSCfg) loadFromJSONCfg(jsnCfg *RouteSJsonCfg) (err error) {
@@ -119,12 +128,12 @@ func (rts *RouteSCfg) loadFromJSONCfg(jsnCfg *RouteSJsonCfg) (err error) {
if jsnCfg.Default_ratio != nil {
rts.DefaultRatio = *jsnCfg.Default_ratio
}
if jsnCfg.Opts != nil {
rts.Opts.loadFromJSONCfg(jsnCfg.Opts)
}
if jsnCfg.Nested_fields != nil {
rts.NestedFields = *jsnCfg.Nested_fields
}
if jsnCfg.Opts != nil {
err = rts.Opts.loadFromJSONCfg(jsnCfg.Opts)
}
return
}
func (rts *RoutesOpts) Clone() (cln *RoutesOpts) {
@@ -152,6 +161,10 @@ func (rts *RoutesOpts) Clone() (cln *RoutesOpts) {
if rts.Offset != nil {
offset = utils.CloneDynamicIntOpt(rts.Offset)
}
var usage []*utils.DynamicDecimalBigOpt
if rts.Usage != nil {
usage = utils.CloneDynamicDecimalBigOpt(rts.Usage)
}
cln = &RoutesOpts{
Context: context,
IgnoreErrors: ignoreErrors,
@@ -159,6 +172,7 @@ func (rts *RoutesOpts) Clone() (cln *RoutesOpts) {
Limit: limit,
Offset: offset,
ProfileCount: profileCount,
Usage: usage,
}
return
}
@@ -172,6 +186,7 @@ func (rts RouteSCfg) AsMapInterface(string) interface{} {
utils.MetaMaxCostCfg: utils.DynamicInterfaceOptsToMap(rts.Opts.MaxCost),
utils.MetaLimitCfg: utils.DynamicIntOptsToMap(rts.Opts.Limit),
utils.MetaOffsetCfg: utils.DynamicIntOptsToMap(rts.Opts.Offset),
utils.MetaUsage: utils.DynamicDecimalBigOptsToMap(rts.Opts.Usage),
}
mp := map[string]interface{}{
@@ -254,6 +269,7 @@ type RoutesOptsJson struct {
Limit map[string]int `json:"*limit"`
Offset map[string]int `json:"*offset"`
ProfileCount map[string]int `json:"*profileCount"`
Usage map[string]string `json:"*usage"`
}
// Route service config section
@@ -295,6 +311,9 @@ func diffRoutesOptsJsonCfg(d *RoutesOptsJson, v1, v2 *RoutesOpts) *RoutesOptsJso
if !utils.DynamicIntOptEqual(v1.ProfileCount, v2.ProfileCount) {
d.ProfileCount = utils.DynamicIntOptsToMap(v2.ProfileCount)
}
if !utils.DynamicDecimalBigOptEqual(v1.Usage, v2.Usage) {
d.Usage = utils.DynamicDecimalBigOptsToMap(v2.Usage)
}
return d
}

View File

@@ -20,8 +20,10 @@ package config
import (
"reflect"
"testing"
"time"
"github.com/cgrates/cgrates/utils"
"github.com/ericlagergren/decimal"
)
func TestRouteSCfgloadFromJsonCfg(t *testing.T) {
@@ -79,6 +81,12 @@ func TestRouteSCfgloadFromJsonCfg(t *testing.T) {
},
Limit: []*utils.DynamicIntOpt{},
Offset: []*utils.DynamicIntOpt{},
Usage: []*utils.DynamicDecimalBigOpt{
{
FilterIDs: []string{utils.MetaDefault},
Value: decimal.New(int64(time.Minute), 0),
},
},
},
}
jsonCfg := NewDefaultCGRConfig()
@@ -120,6 +128,9 @@ func TestRouteSCfgAsMapInterface(t *testing.T) {
utils.MetaMaxCostCfg: map[string]interface{}{
utils.MetaDefault: utils.EmptyString,
},
utils.MetaUsage: map[string]string{
utils.MetaDefault: decimal.New(int64(time.Minute), 0).String(),
},
},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {
@@ -175,6 +186,9 @@ func TestRouteSCfgAsMapInterface1(t *testing.T) {
utils.MetaMaxCostCfg: map[string]interface{}{
utils.MetaDefault: utils.EmptyString,
},
utils.MetaUsage: map[string]string{
utils.MetaDefault: decimal.New(int64(time.Minute), 0).String(),
},
},
}
if cgrCfg, err := NewCGRConfigFromJSONStringWithDefaults(cfgJSONStr); err != nil {