diff --git a/cdrs/cdrs.go b/cdrs/cdrs.go index 63c055b03..38b8d19dc 100644 --- a/cdrs/cdrs.go +++ b/cdrs/cdrs.go @@ -38,7 +38,10 @@ func cdrHandler(w http.ResponseWriter, r *http.Request) { if fsCdr, err := new(FSCdr).New(body); err == nil { storage.SetCdr(fsCdr) if cfg.CDRSMediator == "internal" { - medi.MediateCdrFromDB(fsCdr, storage) + errMedi := medi.MediateCdrFromDB(fsCdr, storage) + if errMedi != nil { + rater.Logger.Err(fmt.Sprintf("Could not run mediation on CDR: %s", errMedi.Error())) + } } else { //TODO: use the connection to mediator } diff --git a/cdrs/fscdr.go b/cdrs/fscdr.go index 6bea99479..697f8ec29 100644 --- a/cdrs/fscdr.go +++ b/cdrs/fscdr.go @@ -42,9 +42,9 @@ const ( UUID = "uuid" // -Unique ID for this call leg CSTMID = "cgr_cstmid" CALL_DEST_NR = "dialed_extension" - PARK_TIME = "start_stamp" - START_TIME = "answer_stamp" - END_TIME = "end_stamp" + PARK_TIME = "start_epoch" + START_TIME = "answer_epoch" + END_TIME = "end_epoch" USERNAME = "user_name" FS_IP = "sip_local_network_addr" RATE = "rate" diff --git a/cmd/cgr-rater/cgr-rater.go b/cmd/cgr-rater/cgr-rater.go index d7aaadf8f..40275c04e 100644 --- a/cmd/cgr-rater/cgr-rater.go +++ b/cmd/cgr-rater/cgr-rater.go @@ -121,14 +121,6 @@ func startMediator(responder *rater.Responder, loggerDb rater.DataStorage) { } connector = &rater.RPCClientConnector{Client: client} } - if _, err := os.Stat(cfg.MediatorCDRInDir); err != nil { - rater.Logger.Crit(fmt.Sprintf("The input path for mediator does not exist: %v", cfg.MediatorCDRInDir)) - exitChan <- true - } - if _, err := os.Stat(cfg.MediatorCDROutDir); err != nil { - rater.Logger.Crit(fmt.Sprintf("The output path for mediator does not exist: %v", cfg.MediatorCDROutDir)) - exitChan <- true - } var err error medi, err = mediator.NewMediator(connector, loggerDb, cfg.MediatorCDROutDir, cfg.MediatorPseudoprepaid, cfg.FreeswitchDirectionIdx, cfg.FreeswitchTORIdx, cfg.FreeswitchTenantIdx, cfg.FreeswitchSubjectIdx, cfg.FreeswitchAccountIdx, @@ -138,7 +130,19 @@ func startMediator(responder *rater.Responder, loggerDb rater.DataStorage) { exitChan <- true } - medi.TrackCDRFiles(cfg.MediatorCDRInDir) + if cfg.MediatorEnabled { //Mediator as standalone service + if _, err := os.Stat(cfg.MediatorCDRInDir); err != nil { + rater.Logger.Crit(fmt.Sprintf("The input path for mediator does not exist: %v", cfg.MediatorCDRInDir)) + exitChan <- true + } + if _, err := os.Stat(cfg.MediatorCDROutDir); err != nil { + rater.Logger.Crit(fmt.Sprintf("The output path for mediator does not exist: %v", cfg.MediatorCDROutDir)) + exitChan <- true + } + medi.TrackCDRFiles(cfg.MediatorCDRInDir) + } + + } func startSessionManager(responder *rater.Responder, loggerDb rater.DataStorage) { @@ -319,6 +323,19 @@ func main() { } if cfg.CDRSListen != "" { rater.Logger.Info("Starting CGRateS CDR Server.") + if !cfg.MediatorEnabled { + go startMediator(responder, loggerDb) // Will start it internally, important to connect the responder + } + for i := 0; i < 3; i++ { // ToDo: If the right approach, make the reconnects configurable + time.Sleep(time.Duration(i/2) * time.Second) + if medi!=nil { // Got our mediator, no need to wait any longer + break + } + } + if medi == nil { + rater.Logger.Crit(" Could not connect to mediator, exiting.") + exitChan <- true + } cs := cdrs.New(loggerDb, medi, cfg) go cs.StartCapturingCDRs() }