From 25db02a6fb4ad4adf02582f5f502d735517a0ec0 Mon Sep 17 00:00:00 2001 From: DanB Date: Sun, 10 Nov 2013 09:01:35 +0100 Subject: [PATCH] Shifting GetAllRatedCdrs into filtered GetRatedCdrs to prepare it for exporter --- engine/storage_interface.go | 2 +- engine/storage_sql.go | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/engine/storage_interface.go b/engine/storage_interface.go index a53be1b94..733c50f3d 100644 --- a/engine/storage_interface.go +++ b/engine/storage_interface.go @@ -83,7 +83,7 @@ type CdrStorage interface { Storage SetCdr(utils.CDR) error SetRatedCdr(utils.CDR, *CallCost, string) error - GetAllRatedCdr() ([]utils.CDR, error) + GetRatedCdrs(time.Time, time.Time) ([]utils.CDR, error) } type LogStorage interface { diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 1be85d50f..8d056a49c 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -885,9 +885,17 @@ func (self *SQLStorage) SetRatedCdr(cdr utils.CDR, cc *CallCost, extraInfo strin return } -func (self *SQLStorage) GetAllRatedCdr() ([]utils.CDR, error) { +// Return a slice of rated CDRs from storDb using optional timeStart and timeEnd as filters. +func (self *SQLStorage) GetRatedCdrs(timeStart, timeEnd time.Time) ([]utils.CDR, error) { var cdrs []utils.CDR q := fmt.Sprintf("SELECT %s.cgrid,accid,cdrhost,reqtype,direction,tenant,tor,account,%s.subject,destination,answer_timestamp,duration,extra_fields,cost FROM %s LEFT JOIN %s ON %s.cgrid=%s.cgrid LEFT JOIN %s ON %s.cgrid=%s.cgrid", utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_EXTRA, utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_EXTRA, utils.TBL_RATED_CDRS, utils.TBL_CDRS_PRIMARY, utils.TBL_RATED_CDRS) + if !timeStart.IsZero() && !timeEnd.IsZero() { + q += fmt.Sprintf(" WHERE answer_timestamp>=%d AND answer_timestamp<%d", timeStart.Unix(), timeEnd.Unix()) + } else if !timeStart.IsZero() { + q += fmt.Sprintf(" WHERE answer_timestamp>=%d", timeStart.Unix()) + } else if !timeEnd.IsZero() { + q += fmt.Sprintf(" WHERE answer_timestamp<%d", timeEnd.Unix()) + } rows, err := self.Db.Query(q) if err != nil { return nil, err