diff --git a/apier/v1/triggers.go b/apier/v1/triggers.go
index e1002b341..eff24c748 100644
--- a/apier/v1/triggers.go
+++ b/apier/v1/triggers.go
@@ -28,6 +28,7 @@ type AttrAddAccountActionTriggers struct {
ActionTriggerIDs *[]string
ActionTriggerOverwrite bool
ActivationDate string
+ Executed bool
}
func (self *ApierV1) AddAccountActionTriggers(attr AttrAddAccountActionTriggers, reply *string) error {
@@ -66,6 +67,7 @@ func (self *ApierV1) AddAccountActionTriggers(attr AttrAddAccountActionTriggers,
}
}
at.ActivationDate = actTime
+ at.Executed = attr.Executed
if !found {
account.ActionTriggers = append(account.ActionTriggers, at)
}
diff --git a/cmd/cgr-tester/cdr_repl/post_server.py b/cmd/cgr-tester/cdr_repl/post_server.py
new file mode 100644
index 000000000..3cd57a115
--- /dev/null
+++ b/cmd/cgr-tester/cdr_repl/post_server.py
@@ -0,0 +1,28 @@
+from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
+import SocketServer
+
+class S(BaseHTTPRequestHandler):
+ def _set_headers(self):
+ self.send_response(200)
+ self.send_header('Content-type', 'text/html')
+ self.end_headers()
+
+ def do_POST(self):
+ # Doesn't do anything with posted data
+ self._set_headers()
+ print(self)
+ #self.wfile.write("
POST!
")
+
+def run(server_class=HTTPServer, handler_class=S, port=80):
+ server_address = ('', port)
+ httpd = server_class(server_address, handler_class)
+ print('Starting httpd...')
+ httpd.serve_forever()
+
+if __name__ == "__main__":
+ from sys import argv
+
+ if len(argv) == 2:
+ run(port=int(argv[1]))
+ else:
+ run(port=12080)
diff --git a/cmd/cgr-tester/cdr_repl/process_cdr.go b/cmd/cgr-tester/cdr_repl/process_cdr.go
new file mode 100644
index 000000000..77166a747
--- /dev/null
+++ b/cmd/cgr-tester/cdr_repl/process_cdr.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "path"
+ "time"
+
+ "github.com/cgrates/cgrates/config"
+ "github.com/cgrates/cgrates/engine"
+ "github.com/cgrates/cgrates/utils"
+ "github.com/cgrates/rpcclient"
+)
+
+var dataDir = flag.String("data_dir", "/usr/share/cgrates", "CGR data dir path here")
+
+func main() {
+ flag.Parse()
+ var err error
+ var cdrsMasterRpc *rpcclient.RpcClient
+ var cdrsMasterCfgPath string
+ var cdrsMasterCfg *config.CGRConfig
+ cdrsMasterCfgPath = path.Join(*dataDir, "conf", "samples", "cdrsreplicationmaster")
+ if cdrsMasterCfg, err = config.NewCGRConfigFromFolder(cdrsMasterCfgPath); err != nil {
+ log.Fatal("Got config error: ", err.Error())
+ }
+ cdrsMasterRpc, err = rpcclient.NewRpcClient("tcp", cdrsMasterCfg.RPCJSONListen, 1, 1, "json", nil)
+ if err != nil {
+ log.Fatal("Could not connect to rater: ", err.Error())
+ }
+ cdrs := make([]*engine.CDR, 0)
+ for i := 0; i < 10000; i++ {
+ cdr := &engine.CDR{OriginID: fmt.Sprintf("httpjsonrpc_%d", i),
+ ToR: utils.VOICE, OriginHost: "192.168.1.1", Source: "UNKNOWN", RequestType: utils.META_PSEUDOPREPAID,
+ Direction: "*out", Tenant: "cgrates.org", Category: "call", Account: "1001", Subject: "1001", Destination: "1002",
+ SetupTime: time.Date(2013, 12, 7, 8, 42, 24, 0, time.UTC), AnswerTime: time.Date(2013, 12, 7, 8, 42, 26, 0, time.UTC),
+ Usage: time.Duration(10) * time.Second, ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}}
+ cdrs = append(cdrs, cdr)
+ }
+ var reply string
+ for _, cdr := range cdrs {
+ if err := cdrsMasterRpc.Call("CdrsV2.ProcessCdr", cdr, &reply); err != nil {
+ log.Fatal("Unexpected error: ", err.Error())
+ } else if reply != utils.OK {
+ log.Fatal("Unexpected reply received: ", reply)
+ }
+ }
+}
diff --git a/data/docker/devel/Dockerfile b/data/docker/devel/Dockerfile
index dea7243d8..51597c945 100644
--- a/data/docker/devel/Dockerfile
+++ b/data/docker/devel/Dockerfile
@@ -17,7 +17,7 @@ RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
RUN echo 'deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main' | tee '/etc/apt/sources.list.d/mongodb-org-3.2.list'
# install dependencies
-RUN apt-get -y update && apt-get -y install git bzr mercurial redis-server mysql-server python-pycurl python-mysqldb postgresql postgresql-client sudo wget freeswitch-meta-vanilla vim zsh mongodb-org tmux rsyslog ngrep
+RUN apt-get -y update && apt-get -y install git bzr mercurial redis-server mysql-server python-pycurl python-mysqldb postgresql postgresql-client sudo wget freeswitch-meta-vanilla vim zsh mongodb-org tmux rsyslog ngrep curl
# add mongo conf
COPY mongod.conf /etc/mongod.conf
diff --git a/engine/cdrs.go b/engine/cdrs.go
index 968ec230a..d296df1a0 100644
--- a/engine/cdrs.go
+++ b/engine/cdrs.go
@@ -451,7 +451,10 @@ func (self *CdrServer) replicateCdr(cdr *CDR) error {
}
body = jsn
}
- errChan := make(chan error)
+ var errChan chan error
+ if rplCfg.Synchronous {
+ errChan = make(chan error)
+ }
go func(body interface{}, rplCfg *config.CdrReplicationCfg, content string, errChan chan error) {
fallbackPath := path.Join(
self.cgrCfg.HttpFailedDir,
@@ -462,10 +465,13 @@ func (self *CdrServer) replicateCdr(cdr *CDR) error {
if err != nil {
utils.Logger.Err(fmt.Sprintf(
" Replicating CDR: %+v, got error: %s", cdr, err.Error()))
- errChan <- err
+ if rplCfg.Synchronous {
+ errChan <- err
+ }
+ }
+ if rplCfg.Synchronous {
+ errChan <- nil
}
- errChan <- nil
-
}(body, rplCfg, content, errChan)
if rplCfg.Synchronous { // Synchronize here
<-errChan
diff --git a/sessionmanager/session.go b/sessionmanager/session.go
index 6e10e1a1d..d1731154a 100644
--- a/sessionmanager/session.go
+++ b/sessionmanager/session.go
@@ -207,7 +207,7 @@ func (s *Session) Refund(lastCC *engine.CallCost, hangupTime time.Time) error {
Increments: refundIncrements,
}
cd.Increments.Compress()
- utils.Logger.Info(fmt.Sprintf("Refunding duration %v with cd: %+v", refundDuration, cd))
+ //utils.Logger.Info(fmt.Sprintf("Refunding duration %v with cd: %+v", refundDuration, cd))
var response float64
err := s.sessionManager.Rater().Call("Responder.RefundIncrements", cd, &response)
if err != nil {