From 8b4ba2f4aa3a55b0a0faed957a3881d3fdfa651b Mon Sep 17 00:00:00 2001 From: DanB Date: Sat, 30 Sep 2017 19:08:47 +0200 Subject: [PATCH] Control dirty flag in StatQueue needing to be stored --- apier/v1/stats_it_test.go | 16 +--------------- engine/stats.go | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/apier/v1/stats_it_test.go b/apier/v1/stats_it_test.go index 794d85f5e..827d141a1 100644 --- a/apier/v1/stats_it_test.go +++ b/apier/v1/stats_it_test.go @@ -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) } diff --git a/engine/stats.go b/engine/stats.go index 5206bc885..d73d31f67 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -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