MySQL and PostgreSQL implementing now their own Flush()

This commit is contained in:
DanB
2014-11-08 18:25:55 +01:00
parent 8517b9b8c8
commit 1e9f1131ba
6 changed files with 63 additions and 40 deletions

View File

@@ -83,7 +83,7 @@ CREATE TABLE `tp_rating_plans` (
`tag` varchar(64) NOT NULL,
`destrates_tag` varchar(64) NOT NULL,
`timing_tag` varchar(64) NOT NULL,
`weight` double(8,2) NOT NULL,
`weight` DECIMAL(8,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `tpid` (`tpid`),
KEY `tpid_rpl` (`tpid`,`tag`),
@@ -140,15 +140,15 @@ CREATE TABLE `tp_actions` (
`action` varchar(24) NOT NULL,
`balance_type` varchar(24) NOT NULL,
`direction` varchar(8) NOT NULL,
`units` double(20,4) NOT NULL,
`units` DECIMAL(20,4) NOT NULL,
`expiry_time` varchar(24) NOT NULL,
`destination_tag` varchar(64) NOT NULL,
`rating_subject` varchar(64) NOT NULL,
`category` varchar(16) NOT NULL,
`shared_group` varchar(64) NOT NULL,
`balance_weight` double(8,2) NOT NULL,
`balance_weight` DECIMAL(8,2) NOT NULL,
`extra_parameters` varchar(256) NOT NULL,
`weight` double(8,2) NOT NULL,
`weight` DECIMAL(8,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `tpid` (`tpid`),
UNIQUE KEY `unique_action` (`tpid`,`tag`,`action`,`balance_type`,`direction`,`expiry_time`,`destination_tag`,`shared_group`,`balance_weight`,`weight`)
@@ -165,7 +165,7 @@ CREATE TABLE `tp_action_plans` (
`tag` varchar(64) NOT NULL,
`actions_tag` varchar(64) NOT NULL,
`timing_tag` varchar(64) NOT NULL,
`weight` double(8,2) NOT NULL,
`weight` DECIMAL(8,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `tpid` (`tpid`),
UNIQUE KEY `unique_action_schedule` (`tpid`,`tag`,`actions_tag`)
@@ -183,18 +183,18 @@ CREATE TABLE `tp_action_triggers` (
`balance_type` varchar(24) NOT NULL,
`direction` varchar(8) NOT NULL,
`threshold_type` char(12) NOT NULL,
`threshold_value` double(20,4) NOT NULL,
`threshold_value` DECIMAL(20,4) NOT NULL,
`recurrent` bool NOT NULL,
`min_sleep` int(11) NOT NULL,
`destination_tag` varchar(64) NOT NULL,
`balance_weight` double(8,2) NOT NULL,
`balance_weight` DECIMAL(8,2) NOT NULL,
`balance_expiry_time` varchar(24) NOT NULL,
`balance_rating_subject` varchar(64) NOT NULL,
`balance_category` varchar(16) NOT NULL,
`balance_shared_group` varchar(64) NOT NULL,
`min_queued_items` int(11) NOT NULL,
`actions_tag` varchar(64) NOT NULL,
`weight` double(8,2) NOT NULL,
`weight` DECIMAL(8,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `tpid` (`tpid`),
UNIQUE KEY `unique_trigger_definition` (`tpid`,`tag`,`balance_type`,`direction`,`threshold_type`,`threshold_value`,`destination_tag`,`actions_tag`)
@@ -235,7 +235,7 @@ CREATE TABLE tp_lcr_rules (
`strategy` varchar(16) NOT NULL,
`suppliers` varchar(64) NOT NULL,
`activation_time` varchar(24) NOT NULL,
`weight` double(8,2) NOT NULL,
`weight` DECIMAL(8,2) NOT NULL,
PRIMARY KEY (`id`),
KEY `tpid` (`tpid`)
);
@@ -254,7 +254,7 @@ CREATE TABLE tp_derived_chargers (
`category` varchar(16) NOT NULL,
`account` varchar(24) NOT NULL,
`subject` varchar(64) NOT NULL,
`run_id` varchar(24) NOT NULL,
`runid` varchar(24) NOT NULL,
`run_filters` varchar(256) NOT NULL,
`req_type_field` varchar(24) NOT NULL,
`direction_field` varchar(24) NOT NULL,
@@ -295,7 +295,7 @@ CREATE TABLE tp_cdr_stats (
`subject` varchar(64) NOT NULL,
`destination_prefix` varchar(64) NOT NULL,
`usage_interval` varchar(64) NOT NULL,
`mediation_run_ids` varchar(64) NOT NULL,
`mediation_runids` varchar(64) NOT NULL,
`rated_account` varchar(64) NOT NULL,
`rated_subject` varchar(64) NOT NULL,
`cost_interval` varchar(24) NOT NULL,

View File

@@ -206,7 +206,7 @@ type TpDerivedCharger struct {
Category string
Account string
Subject string
RunId string
Runid string
RunFilters string
ReqTypeField string
DirectionField string
@@ -253,7 +253,7 @@ type TpCdrStat struct {
Subject string
DestinationPrefix string
UsageInterval string
MediationRunIds string
MediationRunids string
RatedAccount string
RatedSubject string
CostInterval string

View File

@@ -52,11 +52,10 @@ const (
LOG_CDR = "cdr_"
LOG_MEDIATED_CDR = "mcd_"
// sources
SESSION_MANAGER_SOURCE = "SMR"
MEDIATOR_SOURCE = "MED"
SCHED_SOURCE = "SCH"
RATER_SOURCE = "RAT"
// Some consts used in tests
SESSION_MANAGER_SOURCE = "SMR"
MEDIATOR_SOURCE = "MED"
SCHED_SOURCE = "SCH"
RATER_SOURCE = "RAT"
CREATE_CDRS_TABLES_SQL = "create_cdrs_tables.sql"
CREATE_TARIFFPLAN_TABLES_SQL = "create_tariffplan_tables.sql"
TEST_SQL = "TEST_SQL"

View File

@@ -20,15 +20,14 @@ package engine
import (
"fmt"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
"path"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)
type MySQLStorage struct {
*SQLStorage
}
func NewMySQLStorage(host, port, name, user, password string, maxConn, maxIdleConn int) (Storage, error) {
connectString := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&loc=Local&parseTime=true", user, password, host, port, name)
db, err := gorm.Open("mysql", connectString)
@@ -45,3 +44,22 @@ func NewMySQLStorage(host, port, name, user, password string, maxConn, maxIdleCo
return &MySQLStorage{&SQLStorage{Db: db.DB(), db: db}}, nil
}
type MySQLStorage struct {
*SQLStorage
}
func (self *MySQLStorage) Flush() (err error) {
cfg := config.CgrConfig()
for _, scriptName := range []string{CREATE_CDRS_TABLES_SQL, CREATE_TARIFFPLAN_TABLES_SQL} {
if err := self.CreateTablesFromScript(path.Join(cfg.DataFolderPath, "storage", utils.MYSQL, scriptName)); err != nil {
return err
}
}
for _, tbl := range []string{utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_EXTRA} {
if _, err := self.Db.Query(fmt.Sprintf("SELECT 1 FROM %s", tbl)); err != nil {
return err
}
}
return nil
}

View File

@@ -20,6 +20,9 @@ package engine
import (
"fmt"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
"path"
_ "github.com/bmizerany/pq"
"github.com/jinzhu/gorm"
@@ -45,3 +48,18 @@ func NewPostgresStorage(host, port, name, user, password string) (Storage, error
return &PostgresStorage{&SQLStorage{Db: db.DB(), db: db}}, nil
}
func (self *PostgresStorage) Flush() (err error) {
cfg := config.CgrConfig()
for _, scriptName := range []string{CREATE_CDRS_TABLES_SQL, CREATE_TARIFFPLAN_TABLES_SQL} {
if err := self.CreateTablesFromScript(path.Join(cfg.DataFolderPath, "storage", utils.POSTGRES, scriptName)); err != nil {
return err
}
}
for _, tbl := range []string{utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_EXTRA} {
if _, err := self.Db.Query(fmt.Sprintf("SELECT 1 FROM %s", tbl)); err != nil {
return err
}
}
return nil
}

View File

@@ -22,14 +22,13 @@ import (
"bytes"
"database/sql"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"path"
"strconv"
"strings"
"time"
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
"github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
@@ -46,18 +45,7 @@ func (self *SQLStorage) Close() {
}
func (self *SQLStorage) Flush() (err error) {
cfg := config.CgrConfig()
for _, scriptName := range []string{CREATE_CDRS_TABLES_SQL, CREATE_TARIFFPLAN_TABLES_SQL} {
if err := self.CreateTablesFromScript(path.Join(cfg.DataFolderPath, "storage", "mysql", scriptName)); err != nil {
return err
}
}
for _, tbl := range []string{utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_EXTRA} {
if _, err := self.Db.Query(fmt.Sprintf("SELECT 1 from %s", tbl)); err != nil {
return err
}
}
return nil
return errors.New(utils.ERR_NOT_IMPLEMENTED)
}
func (self *SQLStorage) GetKeysForPrefix(prefix string) ([]string, error) {
@@ -380,7 +368,7 @@ func (self *SQLStorage) SetTPCdrStats(tpid string, css map[string][]*utils.TPCdr
Subject: cs.Subject,
DestinationPrefix: cs.DestinationPrefix,
UsageInterval: cs.UsageInterval,
MediationRunIds: cs.MediationRunIds,
MediationRunids: cs.MediationRunIds,
RatedAccount: cs.RatedAccount,
RatedSubject: cs.RatedSubject,
CostInterval: cs.CostInterval,
@@ -415,7 +403,7 @@ func (self *SQLStorage) SetTPDerivedChargers(tpid string, sgs map[string][]*util
for _, dc := range dChargers {
newDc := TpDerivedCharger{
Tpid: tpid,
RunId: dc.RunId,
Runid: dc.RunId,
RunFilters: dc.RunFilters,
ReqTypeField: dc.ReqTypeField,
DirectionField: dc.DirectionField,
@@ -1394,7 +1382,7 @@ func (self *SQLStorage) GetTpCdrStats(tpid, tag string) (map[string][]*utils.TPC
Subject: tpCs.Subject,
DestinationPrefix: tpCs.DestinationPrefix,
UsageInterval: tpCs.UsageInterval,
MediationRunIds: tpCs.MediationRunIds,
MediationRunIds: tpCs.MediationRunids,
RatedAccount: tpCs.RatedAccount,
RatedSubject: tpCs.RatedSubject,
CostInterval: tpCs.CostInterval,
@@ -1437,7 +1425,7 @@ func (self *SQLStorage) GetTpDerivedChargers(dc *utils.TPDerivedChargers) (map[s
dcs[tag] = tpDc
}
dcs[tag].DerivedChargers = append(dcs[tag].DerivedChargers, &utils.TPDerivedCharger{
RunId: tpDcMdl.RunId,
RunId: tpDcMdl.Runid,
RunFilters: tpDcMdl.RunFilters,
ReqTypeField: tpDcMdl.ReqTypeField,
DirectionField: tpDcMdl.DirectionField,