mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-25 00:58:45 +05:00
cfg: add conn_status_stat_queue/threshold_ids for diameter
This commit is contained in:
committed by
Dan Christian Bogos
parent
80e645e38b
commit
22211b2b96
@@ -1028,6 +1028,8 @@ const CGRATES_CFG_JSON = `
|
||||
"asr_template": "", // enable AbortSession message being sent to client on DisconnectSession
|
||||
"rar_template": "", // template used to build the Re-Auth-Request
|
||||
"forced_disconnect": "*none", // the request to send to diameter on DisconnectSession <*none|*asr|*rar>
|
||||
"conn_status_stat_queue_ids": [], // StatQueue IDs for connection status events
|
||||
"conn_status_threshold_ids": [], // Threshold IDs for connection status events
|
||||
"conn_health_check_interval": "0", // peer connection health check interval (0 to disable)
|
||||
"request_processors": [] // list of processors to be applied to diameter messages
|
||||
},
|
||||
|
||||
@@ -791,6 +791,8 @@ func TestDiameterAgentJsonCfg(t *testing.T) {
|
||||
SessionSConns: &[]string{rpcclient.BiRPCInternal},
|
||||
StatSConns: &[]string{},
|
||||
ThresholdSConns: &[]string{},
|
||||
ConnStatusStatQueueIDs: &[]string{},
|
||||
ConnStatusThresholdIDs: &[]string{},
|
||||
OriginHost: utils.StringPointer("CGR-DA"),
|
||||
OriginRealm: utils.StringPointer("cgrates.org"),
|
||||
VendorID: utils.IntPointer(0),
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -274,6 +274,14 @@ func (cfg *CGRConfig) checkConfigSanity() error {
|
||||
return fmt.Errorf("<%s> no %s connections defined",
|
||||
utils.DiameterAgent, utils.SessionS)
|
||||
}
|
||||
if len(cfg.diameterAgentCfg.ConnStatusStatQueueIDs) != 0 && len(cfg.diameterAgentCfg.StatSConns) == 0 {
|
||||
return fmt.Errorf("<%s> stat_queue_ids defined but no %s connections configured",
|
||||
utils.DiameterAgent, utils.StatS)
|
||||
}
|
||||
if len(cfg.diameterAgentCfg.ConnStatusThresholdIDs) != 0 && len(cfg.diameterAgentCfg.ThresholdSConns) == 0 {
|
||||
return fmt.Errorf("<%s> threshold_ids defined but no %s connections configured",
|
||||
utils.DiameterAgent, utils.ThresholdS)
|
||||
}
|
||||
for _, connID := range cfg.diameterAgentCfg.SessionSConns {
|
||||
isInternal := strings.HasPrefix(connID, utils.MetaInternal) || strings.HasPrefix(connID, rpcclient.BiRPCInternal)
|
||||
if isInternal && !cfg.sessionSCfg.Enabled {
|
||||
|
||||
@@ -44,6 +44,8 @@ type DiameterAgentCfg struct {
|
||||
ASRTemplate string
|
||||
RARTemplate string
|
||||
ForcedDisconnect string
|
||||
ConnStatusStatQueueIDs []string
|
||||
ConnStatusThresholdIDs []string
|
||||
ConnHealthCheckInterval time.Duration // peer connection health check interval (0 to disable)
|
||||
RequestProcessors []*RequestProcessor
|
||||
}
|
||||
@@ -110,6 +112,12 @@ func (da *DiameterAgentCfg) loadFromJSONCfg(jc *DiameterAgentJsonCfg) (err error
|
||||
if jc.ForcedDisconnect != nil {
|
||||
da.ForcedDisconnect = *jc.ForcedDisconnect
|
||||
}
|
||||
if jc.ConnStatusStatQueueIDs != nil {
|
||||
da.ConnStatusStatQueueIDs = *jc.ConnStatusStatQueueIDs
|
||||
}
|
||||
if jc.ConnStatusThresholdIDs != nil {
|
||||
da.ConnStatusThresholdIDs = *jc.ConnStatusThresholdIDs
|
||||
}
|
||||
if jc.ConnHealthCheckInterval != nil {
|
||||
da.ConnHealthCheckInterval, err = utils.ParseDurationWithNanosecs(*jc.ConnHealthCheckInterval)
|
||||
if err != nil {
|
||||
@@ -134,6 +142,8 @@ func (da DiameterAgentCfg) AsMapInterface() any {
|
||||
utils.SessionSConnsCfg: stripInternalConns(da.SessionSConns),
|
||||
utils.StatSConnsCfg: stripInternalConns(da.StatSConns),
|
||||
utils.ThresholdSConnsCfg: stripInternalConns(da.ThresholdSConns),
|
||||
utils.ConnStatusStatQueueIDsCfg: da.ConnStatusStatQueueIDs,
|
||||
utils.ConnStatusThresholdIDsCfg: da.ConnStatusThresholdIDs,
|
||||
utils.OriginHostCfg: da.OriginHost,
|
||||
utils.OriginRealmCfg: da.OriginRealm,
|
||||
utils.VendorIDCfg: da.VendorID,
|
||||
@@ -175,6 +185,8 @@ func (da DiameterAgentCfg) Clone() *DiameterAgentCfg {
|
||||
ASRTemplate: da.ASRTemplate,
|
||||
RARTemplate: da.RARTemplate,
|
||||
ForcedDisconnect: da.ForcedDisconnect,
|
||||
ConnStatusStatQueueIDs: slices.Clone(da.ConnStatusStatQueueIDs),
|
||||
ConnStatusThresholdIDs: slices.Clone(da.ConnStatusThresholdIDs),
|
||||
ConnHealthCheckInterval: da.ConnHealthCheckInterval,
|
||||
}
|
||||
if da.CEApplications != nil {
|
||||
@@ -208,6 +220,8 @@ type DiameterAgentJsonCfg struct {
|
||||
ASRTemplate *string `json:"asr_template"`
|
||||
RARTemplate *string `json:"rar_template"`
|
||||
ForcedDisconnect *string `json:"forced_disconnect"`
|
||||
ConnStatusStatQueueIDs *[]string `json:"conn_status_stat_queue_ids"`
|
||||
ConnStatusThresholdIDs *[]string `json:"conn_status_threshold_ids"`
|
||||
ConnHealthCheckInterval *string `json:"conn_health_check_interval"`
|
||||
RequestProcessors *[]*ReqProcessorJsnCfg `json:"request_processors"`
|
||||
}
|
||||
@@ -264,6 +278,12 @@ func diffDiameterAgentJsonCfg(d *DiameterAgentJsonCfg, v1, v2 *DiameterAgentCfg)
|
||||
if v1.ForcedDisconnect != v2.ForcedDisconnect {
|
||||
d.ForcedDisconnect = utils.StringPointer(v2.ForcedDisconnect)
|
||||
}
|
||||
if !slices.Equal(v1.ConnStatusStatQueueIDs, v2.ConnStatusStatQueueIDs) {
|
||||
d.ConnStatusStatQueueIDs = utils.SliceStringPointer(v2.ConnStatusStatQueueIDs)
|
||||
}
|
||||
if !slices.Equal(v1.ConnStatusThresholdIDs, v2.ConnStatusThresholdIDs) {
|
||||
d.ConnStatusThresholdIDs = utils.SliceStringPointer(v2.ConnStatusThresholdIDs)
|
||||
}
|
||||
if v1.ConnHealthCheckInterval != v2.ConnHealthCheckInterval {
|
||||
d.ConnHealthCheckInterval = utils.StringPointer(v2.ConnHealthCheckInterval.String())
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package config
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/cgrates/cgrates/utils"
|
||||
"github.com/cgrates/rpcclient"
|
||||
@@ -51,22 +52,24 @@ func TestDiameterAgentCfgloadFromJsonCfg(t *testing.T) {
|
||||
},
|
||||
}
|
||||
expected := &DiameterAgentCfg{
|
||||
Enabled: true,
|
||||
ListenNet: "tcp",
|
||||
Listen: "127.0.0.1:3868",
|
||||
DictionariesPath: "/usr/share/cgrates/diameter/dict/",
|
||||
CEApplications: []string{"Base"},
|
||||
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS), "*conn1"},
|
||||
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"},
|
||||
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"},
|
||||
OriginHost: "CGR-DA",
|
||||
OriginRealm: "cgrates.org",
|
||||
VendorID: 0,
|
||||
ProductName: "randomName",
|
||||
SyncedConnReqs: true,
|
||||
ASRTemplate: "randomTemplate",
|
||||
RARTemplate: "randomTemplate",
|
||||
ForcedDisconnect: "forced",
|
||||
Enabled: true,
|
||||
ListenNet: "tcp",
|
||||
Listen: "127.0.0.1:3868",
|
||||
DictionariesPath: "/usr/share/cgrates/diameter/dict/",
|
||||
CEApplications: []string{"Base"},
|
||||
SessionSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS), "*conn1"},
|
||||
StatSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStats), "*conn1"},
|
||||
ThresholdSConns: []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds), "*conn1"},
|
||||
ConnStatusStatQueueIDs: []string{},
|
||||
ConnStatusThresholdIDs: []string{},
|
||||
OriginHost: "CGR-DA",
|
||||
OriginRealm: "cgrates.org",
|
||||
VendorID: 0,
|
||||
ProductName: "randomName",
|
||||
SyncedConnReqs: true,
|
||||
ASRTemplate: "randomTemplate",
|
||||
RARTemplate: "randomTemplate",
|
||||
ForcedDisconnect: "forced",
|
||||
RequestProcessors: []*RequestProcessor{
|
||||
{
|
||||
ID: "cgrates",
|
||||
@@ -172,6 +175,8 @@ func TestDiameterAgentCfgAsMapInterface(t *testing.T) {
|
||||
utils.SessionSConnsCfg: []string{rpcclient.BiRPCInternal, utils.MetaInternal, "*conn1"},
|
||||
utils.StatSConnsCfg: []string{rpcclient.BiRPCInternal, utils.MetaInternal, "*conn1"},
|
||||
utils.ThresholdSConnsCfg: []string{rpcclient.BiRPCInternal, utils.MetaInternal, "*conn1"},
|
||||
utils.ConnStatusStatQueueIDsCfg: []string{},
|
||||
utils.ConnStatusThresholdIDsCfg: []string{},
|
||||
utils.SyncedConnReqsCfg: true,
|
||||
utils.VendorIDCfg: 0,
|
||||
utils.ConnHealthCheckIntervalCfg: "0s",
|
||||
@@ -235,6 +240,8 @@ func TestDiameterAgentCfgAsMapInterface1(t *testing.T) {
|
||||
utils.SessionSConnsCfg: []string{rpcclient.BiRPCInternal},
|
||||
utils.StatSConnsCfg: []string{},
|
||||
utils.ThresholdSConnsCfg: []string{},
|
||||
utils.ConnStatusStatQueueIDsCfg: []string{},
|
||||
utils.ConnStatusThresholdIDsCfg: []string{},
|
||||
utils.SyncedConnReqsCfg: false,
|
||||
utils.VendorIDCfg: 0,
|
||||
utils.ConnHealthCheckIntervalCfg: "0s",
|
||||
@@ -287,41 +294,47 @@ func TestDiffDiameterAgentJsonCfg(t *testing.T) {
|
||||
var d *DiameterAgentJsonCfg
|
||||
|
||||
v1 := &DiameterAgentCfg{
|
||||
Enabled: false,
|
||||
ListenNet: "tcp",
|
||||
Listen: "localhost:8080",
|
||||
DictionariesPath: "/path/",
|
||||
SessionSConns: []string{"*localhost"},
|
||||
StatSConns: []string{"*localhost"},
|
||||
ThresholdSConns: []string{"*localhost"},
|
||||
OriginHost: "originHost",
|
||||
OriginRealm: "originRealm",
|
||||
VendorID: 2,
|
||||
ProductName: "productName",
|
||||
SyncedConnReqs: false,
|
||||
ASRTemplate: "ASRTemplate",
|
||||
RARTemplate: "RARTemplate",
|
||||
ForcedDisconnect: "ForcedDisconnect",
|
||||
RequestProcessors: []*RequestProcessor{},
|
||||
Enabled: false,
|
||||
ListenNet: "tcp",
|
||||
Listen: "localhost:8080",
|
||||
DictionariesPath: "/path/",
|
||||
SessionSConns: []string{"*localhost"},
|
||||
StatSConns: []string{"*localhost"},
|
||||
ThresholdSConns: []string{"*localhost"},
|
||||
OriginHost: "originHost",
|
||||
OriginRealm: "originRealm",
|
||||
ConnStatusStatQueueIDs: []string{"conn1", "conn2"},
|
||||
ConnStatusThresholdIDs: []string{"conn1", "conn2"},
|
||||
ConnHealthCheckInterval: time.Second,
|
||||
VendorID: 2,
|
||||
ProductName: "productName",
|
||||
SyncedConnReqs: false,
|
||||
ASRTemplate: "ASRTemplate",
|
||||
RARTemplate: "RARTemplate",
|
||||
ForcedDisconnect: "ForcedDisconnect",
|
||||
RequestProcessors: []*RequestProcessor{},
|
||||
}
|
||||
|
||||
v2 := &DiameterAgentCfg{
|
||||
Enabled: true,
|
||||
ListenNet: "udp",
|
||||
Listen: "localhost:8037",
|
||||
DictionariesPath: "/path/different",
|
||||
CEApplications: []string{"Base"},
|
||||
SessionSConns: []string{"*birpc_internal"},
|
||||
StatSConns: []string{"*internal"},
|
||||
ThresholdSConns: []string{"*internal"},
|
||||
OriginHost: "diffOriginHost",
|
||||
OriginRealm: "diffOriginRealm",
|
||||
VendorID: 5,
|
||||
ProductName: "diffProductName",
|
||||
SyncedConnReqs: true,
|
||||
ASRTemplate: "diffASRTemplate",
|
||||
RARTemplate: "diffRARTemplate",
|
||||
ForcedDisconnect: "diffForcedDisconnect",
|
||||
Enabled: true,
|
||||
ListenNet: "udp",
|
||||
Listen: "localhost:8037",
|
||||
DictionariesPath: "/path/different",
|
||||
CEApplications: []string{"Base"},
|
||||
SessionSConns: []string{"*birpc_internal"},
|
||||
StatSConns: []string{"*internal"},
|
||||
ThresholdSConns: []string{"*internal"},
|
||||
OriginHost: "diffOriginHost",
|
||||
OriginRealm: "diffOriginRealm",
|
||||
ConnStatusStatQueueIDs: []string{"conn2", "conn3"},
|
||||
ConnStatusThresholdIDs: []string{"conn2", "conn3"},
|
||||
ConnHealthCheckInterval: 2 * time.Second,
|
||||
VendorID: 5,
|
||||
ProductName: "diffProductName",
|
||||
SyncedConnReqs: true,
|
||||
ASRTemplate: "diffASRTemplate",
|
||||
RARTemplate: "diffRARTemplate",
|
||||
ForcedDisconnect: "diffForcedDisconnect",
|
||||
RequestProcessors: []*RequestProcessor{
|
||||
{
|
||||
ID: "id",
|
||||
@@ -330,22 +343,25 @@ func TestDiffDiameterAgentJsonCfg(t *testing.T) {
|
||||
}
|
||||
|
||||
expected := &DiameterAgentJsonCfg{
|
||||
Enabled: utils.BoolPointer(true),
|
||||
ListenNet: utils.StringPointer("udp"),
|
||||
Listen: utils.StringPointer("localhost:8037"),
|
||||
DictionariesPath: utils.StringPointer("/path/different"),
|
||||
CEApplications: utils.SliceStringPointer([]string{"Base"}),
|
||||
SessionSConns: &[]string{"*birpc_internal"},
|
||||
StatSConns: &[]string{"*internal"},
|
||||
ThresholdSConns: &[]string{"*internal"},
|
||||
OriginHost: utils.StringPointer("diffOriginHost"),
|
||||
OriginRealm: utils.StringPointer("diffOriginRealm"),
|
||||
VendorID: utils.IntPointer(5),
|
||||
ProductName: utils.StringPointer("diffProductName"),
|
||||
SyncedConnRequests: utils.BoolPointer(true),
|
||||
ASRTemplate: utils.StringPointer("diffASRTemplate"),
|
||||
RARTemplate: utils.StringPointer("diffRARTemplate"),
|
||||
ForcedDisconnect: utils.StringPointer("diffForcedDisconnect"),
|
||||
Enabled: utils.BoolPointer(true),
|
||||
ListenNet: utils.StringPointer("udp"),
|
||||
Listen: utils.StringPointer("localhost:8037"),
|
||||
DictionariesPath: utils.StringPointer("/path/different"),
|
||||
CEApplications: utils.SliceStringPointer([]string{"Base"}),
|
||||
SessionSConns: &[]string{"*birpc_internal"},
|
||||
StatSConns: &[]string{"*internal"},
|
||||
ThresholdSConns: &[]string{"*internal"},
|
||||
OriginHost: utils.StringPointer("diffOriginHost"),
|
||||
OriginRealm: utils.StringPointer("diffOriginRealm"),
|
||||
VendorID: utils.IntPointer(5),
|
||||
ProductName: utils.StringPointer("diffProductName"),
|
||||
SyncedConnRequests: utils.BoolPointer(true),
|
||||
ASRTemplate: utils.StringPointer("diffASRTemplate"),
|
||||
RARTemplate: utils.StringPointer("diffRARTemplate"),
|
||||
ForcedDisconnect: utils.StringPointer("diffForcedDisconnect"),
|
||||
ConnStatusStatQueueIDs: &[]string{"conn2", "conn3"},
|
||||
ConnStatusThresholdIDs: &[]string{"conn2", "conn3"},
|
||||
ConnHealthCheckInterval: utils.StringPointer("2s"),
|
||||
RequestProcessors: &[]*ReqProcessorJsnCfg{
|
||||
{
|
||||
ID: utils.StringPointer("id"),
|
||||
|
||||
Reference in New Issue
Block a user