diff options
Diffstat (limited to 'go/task_runner/main.go')
| -rw-r--r-- | go/task_runner/main.go | 64 |
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) + } + } + } + } +} |
