package main import ( "errors" "fmt" "os" "os/exec" "path/filepath" ) func run_r_script(name string, args []string) error { var rpath, logpath string var ok bool workdate, dealname, reinvflag := args[0], args[1], args[2] if val, ok := os.LookupEnv("CODE_DIR"); ok { rpath = filepath.Join(val, "R") } else { return errors.New("CODE_DIR environment variable not set.") } if logpath, ok = os.LookupEnv("SERENITAS_LOG_DIR"); !ok { return errors.New("SERENITAS_LOG_DIR environment variable not set.") } cmd := exec.Command("Rscript", "--vanilla", filepath.Join(rpath, fmt.Sprintf("%s.R", name)), workdate, dealname+","+reinvflag) cmd.Dir = rpath if f, err := os.OpenFile(filepath.Join(logpath, fmt.Sprintf("%s.Rout", name)), os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600); err != nil { return err } else { cmd.Stdout = f if err := cmd.Run(); err != nil { return err } return nil } } func run_python_script(name string, args []string) error { var python_path string if val, ok := os.LookupEnv("CODE_DIR"); ok { python_path = filepath.Join(val, "python") } else { return errors.New("CODE_DIR environment variable not set.") } args = append([]string{filepath.Join(python_path, name)}, args...) cmd := exec.Command("python3", args...) cmd.Dir = python_path return cmd.Run() } var tasks = map[string]func([]string) error{ "build_portfolios": func(args []string) error { return run_r_script("build_portfolios", args) }, "build_scenarios": func(args []string) error { return run_r_script("build_scenarios", args) }, "generate_scenarios": func(args []string) error { return run_python_script(filepath.Join("intex", "intex_scenarios.py"), args) }, }