Control dirty flag in StatQueue needing to be stored

This commit is contained in:
DanB
2017-09-30 19:08:47 +02:00
parent 3ed3cde528
commit 8b4ba2f4aa
2 changed files with 13 additions and 17 deletions

View File

@@ -240,21 +240,7 @@ func testV1STSProcessEvent(t *testing.T) {
}
func testV1STSGetStatsAfterRestart(t *testing.T) {
expectedMetrics := map[string]string{
utils.MetaASR: "66.66667%",
utils.MetaACD: "1m30s",
utils.MetaACC: "61.5",
utils.MetaTCD: "3m0s",
utils.MetaTCC: "123",
utils.MetaPDD: "4s",
}
var metrics map[string]string
//get stats metrics before restart
if err := stsV1Rpc.Call("StatSV1.GetQueueStringMetrics", &utils.TenantID{Tenant: "cgrates.org", ID: "Stats1"}, &metrics); err != nil {
t.Error(err)
} else if !reflect.DeepEqual(expectedMetrics, metrics) {
t.Errorf("expecting: %+v, received reply: %s", expectedMetrics, metrics)
}
time.Sleep(time.Second)
if _, err := engine.StopStartEngine(stsV1CfgPath, statsDelay); err != nil {
t.Fatal(err)
}

View File

@@ -32,8 +32,10 @@ import (
// NewStatService initializes a StatService
func NewStatService(dm *DataManager, storeInterval time.Duration) (ss *StatService, err error) {
return &StatService{dm: dm, storeInterval: storeInterval,
stopBackup: make(chan struct{})}, nil
return &StatService{dm: dm,
storeInterval: storeInterval,
storedStatQueues: make(utils.StringMap),
stopBackup: make(chan struct{})}, nil
}
// StatService builds stats for events
@@ -211,6 +213,14 @@ func (sS *StatService) processEvent(ev *StatEvent) (err error) {
sq.TenantID(), ev.TenantID(), err.Error()))
withErrors = true
}
if sS.storeInterval == -1 {
sS.StoreStatQueue(sq)
} else if sq.dirty != nil {
*sq.dirty = true // mark it to be saved
sS.ssqMux.Lock()
sS.storedStatQueues[sq.TenantID()] = true
sS.ssqMux.Unlock()
}
}
if withErrors {
err = utils.ErrPartiallyExecuted