From d405c8116666789441dc7ed34a256f45153aa214 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Fri, 3 Jul 2015 20:21:40 +0300 Subject: [PATCH] started Destination Id Archive --- engine/stats_metrics.go | 33 +++++++++++++++++++++++++++++++++ engine/stats_queue.go | 2 ++ 2 files changed, 35 insertions(+) diff --git a/engine/stats_metrics.go b/engine/stats_metrics.go index 930879776..ddca49c6f 100644 --- a/engine/stats_metrics.go +++ b/engine/stats_metrics.go @@ -229,3 +229,36 @@ func (tcc *TCCMetric) GetValue() float64 { } return utils.Round(tcc.sum, globalRoundingDecimals, utils.ROUNDING_MIDDLE) } + +// DIA - Destination ID Archive +// +type DIAMetric struct { + destinations map[string]int64 +} + +func (dia *DIAMetric) AddCdr(cdr *QCdr) { + if dia.destinations == nil { + dia.destinations = make(map[string]int64) + } + if count, exists := dia.destinations[cdr.Dest]; exists { + dia.destinations[cdr.Dest] = count + 1 + } +} + +func (dia *DIAMetric) RemoveCdr(cdr *QCdr) { + if dia.destinations == nil { + dia.destinations = make(map[string]int64) + } + if count, exists := dia.destinations[cdr.Dest]; exists && count > 1 { + dia.destinations[cdr.Dest] = count - 1 + } else { + dia.destinations[cdr.Dest] = 0 + } +} + +func (dia *DIAMetric) GetValue() float64 { + if len(dia.destinations) == 0 { + return STATS_NA + } + return len(dia.destinations) +} diff --git a/engine/stats_queue.go b/engine/stats_queue.go index 6004f63a4..f7c189f6b 100644 --- a/engine/stats_queue.go +++ b/engine/stats_queue.go @@ -55,6 +55,7 @@ type QCdr struct { Pdd time.Duration Usage time.Duration Cost float64 + Dest string } func NewStatsQueue(conf *CdrStats) *StatsQueue { @@ -164,6 +165,7 @@ func (sq *StatsQueue) simplifyCdr(cdr *StoredCdr) *QCdr { Pdd: cdr.Pdd, Usage: cdr.Usage, Cost: cdr.Cost, + Dest: cdr.Destination, } }