From a307dc3ce07336d1a791f2c38c3ad6b2d3fcf01b Mon Sep 17 00:00:00 2001 From: DanB Date: Mon, 4 Apr 2016 13:02:06 +0200 Subject: [PATCH] Support for latest gorm --- apier/v2/cdrs_mysql_local_test.go | 1 + data/conf/samples/dmtagent/cgrates.json | 4 ++-- data/storage/mysql/create_cdrs_tables.sql | 10 +++++----- data/storage/postgres/create_cdrs_tables.sql | 6 +++--- engine/cdrs.go | 2 +- engine/models.go | 4 ++-- engine/storage_sql.go | 20 ++++++++++---------- glide.lock | 17 +++-------------- 8 files changed, 27 insertions(+), 37 deletions(-) diff --git a/apier/v2/cdrs_mysql_local_test.go b/apier/v2/cdrs_mysql_local_test.go index bbbed922e..60fddfc70 100644 --- a/apier/v2/cdrs_mysql_local_test.go +++ b/apier/v2/cdrs_mysql_local_test.go @@ -247,6 +247,7 @@ func TestV2CDRsMySQLRateWithoutTP(t *testing.T) { if !*testLocal { return } + //"d32a571d7bcbc6700fd35c1c0c5c6f458a62e260" rawCdrCGRID := utils.Sha1("bbb1", time.Date(2015, 11, 21, 10, 47, 24, 0, time.UTC).String()) // Rate the injected CDR, should not rate it since we have no TP loaded attrs := utils.AttrRateCdrs{CgrIds: []string{rawCdrCGRID}} diff --git a/data/conf/samples/dmtagent/cgrates.json b/data/conf/samples/dmtagent/cgrates.json index 6033f4bd2..93fe0df45 100644 --- a/data/conf/samples/dmtagent/cgrates.json +++ b/data/conf/samples/dmtagent/cgrates.json @@ -47,8 +47,8 @@ "sm_generic": { "enabled": true, - "rater": "127.0.0.1:2013", - "cdrs": "127.0.0.1:2013", + "rater": "internal", + "cdrs": "internal", }, "diameter_agent": { diff --git a/data/storage/mysql/create_cdrs_tables.sql b/data/storage/mysql/create_cdrs_tables.sql index 2bd6d9a59..c6e86d496 100644 --- a/data/storage/mysql/create_cdrs_tables.sql +++ b/data/storage/mysql/create_cdrs_tables.sql @@ -29,9 +29,9 @@ CREATE TABLE cdrs ( cost DECIMAL(20,4) NOT NULL, cost_details text, extra_info text, - created_at TIMESTAMP, - updated_at TIMESTAMP, - deleted_at TIMESTAMP, + created_at TIMESTAMP NULL, + updated_at TIMESTAMP NULL, + deleted_at TIMESTAMP NULL, PRIMARY KEY (id), UNIQUE KEY cdrrun (cgrid, run_id, origin_id) ); @@ -46,8 +46,8 @@ CREATE TABLE sm_costs ( cost_source varchar(64) NOT NULL, `usage` DECIMAL(30,9) NOT NULL, cost_details text, - created_at TIMESTAMP, - deleted_at TIMESTAMP, + created_at TIMESTAMP NULL, + deleted_at TIMESTAMP NULL, PRIMARY KEY (`id`), UNIQUE KEY costid (cgrid,run_id), KEY origin_idx (origin_host, origin_id), diff --git a/data/storage/postgres/create_cdrs_tables.sql b/data/storage/postgres/create_cdrs_tables.sql index a44c24520..ed9751694 100644 --- a/data/storage/postgres/create_cdrs_tables.sql +++ b/data/storage/postgres/create_cdrs_tables.sql @@ -30,8 +30,8 @@ CREATE TABLE cdrs ( cost_details jsonb, extra_info text, created_at TIMESTAMP, - updated_at TIMESTAMP, - deleted_at TIMESTAMP, + updated_at TIMESTAMP NULL, + deleted_at TIMESTAMP NULL, UNIQUE (cgrid, run_id, origin_id) ); ; @@ -50,7 +50,7 @@ CREATE TABLE sm_costs ( usage NUMERIC(30,9) NOT NULL, cost_details jsonb, created_at TIMESTAMP, - deleted_at TIMESTAMP, + deleted_at TIMESTAMP NULL, UNIQUE (cgrid, run_id) ); DROP INDEX IF EXISTS cgrid_smcost_idx; diff --git a/engine/cdrs.go b/engine/cdrs.go index dd164fe03..9d43aa862 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -375,7 +375,7 @@ func (self *CdrServer) rateCDR(cdr *CDR) ([]*CDR, error) { } return cdrsRated, nil } - if err != nil && (err == gorm.RecordNotFound || err == mgov2.ErrNotFound) { //calculate CDR as for pseudoprepaid + if err != nil && (err == gorm.ErrRecordNotFound || err == mgov2.ErrNotFound) { //calculate CDR as for pseudoprepaid utils.Logger.Warning(fmt.Sprintf(" WARNING: Could not find CallCostLog for cgrid: %s, source: %s, runid: %s, will recalculate", cdr.CGRID, utils.SESSION_MANAGER_SOURCE, cdr.RunID)) qryCC, err = self.getCostFromRater(cdr) } diff --git a/engine/models.go b/engine/models.go index e5c686892..127c04757 100644 --- a/engine/models.go +++ b/engine/models.go @@ -440,7 +440,7 @@ type TBLCDRs struct { ExtraInfo string CreatedAt time.Time UpdatedAt time.Time - DeletedAt time.Time + DeletedAt *time.Time } func (t TBLCDRs) TableName() string { @@ -457,7 +457,7 @@ type TBLSMCosts struct { Usage float64 CostDetails string CreatedAt time.Time - DeletedAt time.Time + DeletedAt *time.Time } func (t TBLSMCosts) TableName() string { diff --git a/engine/storage_sql.go b/engine/storage_sql.go index 07b878a37..ddb363aec 100644 --- a/engine/storage_sql.go +++ b/engine/storage_sql.go @@ -34,7 +34,7 @@ import ( type SQLStorage struct { Db *sql.DB - db gorm.DB + db *gorm.DB } func (self *SQLStorage) Close() { @@ -675,8 +675,8 @@ func (self *SQLStorage) SetCDR(cdr *CDR, allowUpdate bool) error { return saved.Error } tx = self.db.Begin() - updated := tx.Model(TBLCDRs{}).Where(&TBLCDRs{Cgrid: cdr.CGRID, RunID: cdr.RunID}).Updates( - &TBLCDRs{ + updated := tx.Model(&TBLCDRs{}).Where(&TBLCDRs{Cgrid: cdr.CGRID, RunID: cdr.RunID, OriginID: cdr.OriginID}).Updates( + TBLCDRs{ OriginHost: cdr.OriginHost, Source: cdr.Source, OriginID: cdr.OriginID, @@ -718,9 +718,6 @@ func (self *SQLStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR, q := self.db.Table(utils.TBL_CDRS).Select("*") if qryFltr.Unscoped { q = q.Unscoped() - } else { - // Query filter - q = q.Where("(deleted_at IS NULL OR deleted_at <= '0001-01-02')") // Soft deletes } // Add filters, use in to replace the high number of ORs if len(qryFltr.CGRIDs) != 0 { @@ -957,12 +954,15 @@ func (self *SQLStorage) GetCDRs(qryFltr *utils.CDRsFilter, remove bool) ([]*CDR, q.Find(&results) for _, result := range results { - var extraFieldsMp map[string]string - if err := json.Unmarshal([]byte(result.ExtraFields), &extraFieldsMp); err != nil { - return nil, 0, fmt.Errorf("JSON unmarshal error for cgrid: %s, runid: %v, error: %s", result.Cgrid, result.RunID, err.Error()) + extraFieldsMp := make(map[string]string) + if result.ExtraFields != "" { + if err := json.Unmarshal([]byte(result.ExtraFields), &extraFieldsMp); err != nil { + utils.Logger.Debug(fmt.Sprintf("Unmarshall json for result: %+v, error: %v", result.ExtraFields, err)) + return nil, 0, fmt.Errorf("JSON unmarshal error for cgrid: %s, runid: %v, error: %s", result.Cgrid, result.RunID, err.Error()) + } } var callCost CallCost - if len(result.CostDetails) != 0 { + if result.CostDetails != "" { if err := json.Unmarshal([]byte(result.CostDetails), &callCost); err != nil { return nil, 0, fmt.Errorf("JSON unmarshal callcost error for cgrid: %s, runid: %v, error: %s", result.Cgrid, result.RunID, err.Error()) } diff --git a/glide.lock b/glide.lock index fa156bc51..bc1e4e4f1 100644 --- a/glide.lock +++ b/glide.lock @@ -1,8 +1,6 @@ -hash: c4e3a1bdd7452ec3af195e09b8b3b1b9a61e36edfad557aeb01686706019c352 -updated: 2016-03-09T00:08:37.493018177+02:00 +hash: 5c488630d1d32687b7a3c3b22c47ceaf7eb3cffb764799706728a6accbcd3ff5 +updated: 2016-04-01T13:47:06.215526502+02:00 imports: -- name: github.com/cenkalti/hub - version: 57d753b5f4856e77b3cf8ecce78c97215a7d324d - name: github.com/cenkalti/rpc2 version: 2d1be381ce47537e9e076b2b76dc70933162e4e9 - name: github.com/cgrates/fsock @@ -23,22 +21,16 @@ imports: - diam/datatype - diam/dict - diam/sm - - diam/sm/smparser - - diam/sm/smpeer - name: github.com/go-sql-driver/mysql version: 0f2db9e6c9cff80a97ca5c2c5096242cc1554e16 - name: github.com/gorhill/cronexpr version: a557574d6c024ed6e36acc8b610f5f211c91568a - name: github.com/jinzhu/gorm - version: 2f7811c55f286c55cfc3a2aefb5c4049b9cd5214 -- name: github.com/jinzhu/inflection - version: 3272df6c21d04180007eb3349844c89a3856bc25 + version: 2530dcbccd9c9ff7ce5a903e01bbf8601b726112 - name: github.com/kr/pty version: f7ee69f31298ecbe5d2b349c711e2547a617d398 - name: github.com/lib/pq version: 165a3529e799da61ab10faed1fabff3662d6193f - subpackages: - - oid - name: github.com/mediocregopher/radix.v2 version: 7bdaf7c45ec452ca691ab20535471e24460f0876 subpackages: @@ -54,13 +46,10 @@ imports: version: a4bbce9fcae005b22ae5443f6af064d80a6f5a55 subpackages: - websocket - - context - name: gopkg.in/fsnotify.v1 version: 875cf421b32f8f1b31bd43776297876d01542279 - name: gopkg.in/mgo.v2 version: d90005c5262a3463800497ea5a89aed5fe22c886 subpackages: - bson - - internal/sasl - - internal/scram devImports: []