aboutsummaryrefslogtreecommitdiffstats
path: root/go/task_runner/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/task_runner/main.go')
-rw-r--r--go/task_runner/main.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/go/task_runner/main.go b/go/task_runner/main.go
new file mode 100644
index 00000000..e5cb525a
--- /dev/null
+++ b/go/task_runner/main.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "os"
+ "strings"
+
+ "github.com/go-redis/redis"
+)
+
+type Rpc struct {
+ Fun string `json:"fun"`
+ Args []string `json:"args"`
+}
+
+func main() {
+ host, ok := os.LookupEnv("REDIS_HOST")
+ if !ok {
+ log.Fatal("Please set REDIS_HOST environment variable")
+ }
+ var network = "tcp"
+ if strings.Contains(host, string(os.PathSeparator)) {
+ network = "unix"
+ } else {
+ host += ":6379"
+ }
+ client := redis.NewClient(&redis.Options{
+ Network: network,
+ Addr: host,
+ Password: "", // no password set
+ DB: 0, // use default DB
+ })
+ for {
+ if result, err := client.BLPop(0, "tasks").Result(); err != nil {
+ log.Println(err)
+ } else {
+ var call Rpc
+ err := json.Unmarshal([]byte(result[1]), &call)
+ if err != nil {
+ log.Println(err)
+ }
+ if err := tasks[call.Fun](call.Args); err != nil {
+ log.Println(err)
+ continue
+ } else {
+ if call.Fun == "build_portfolios" {
+ call.Fun = "build_scenarios"
+ } else if call.Fun == "build_scenarios" {
+ call.Fun = "generate_scenarios"
+ }
+ var call_json []byte
+ call_json, err := json.Marshal(call)
+ if err != nil {
+ fmt.Println(err)
+ }
+ if err := client.RPush("tasks", call_json).Err(); err != nil {
+ log.Println(err)
+ }
+ }
+ }
+ }
+}