func (w *Worker) Run() error { uid := uuid.NewRandom() copy(w.Id[:], uid) w.lastjob = time.Now() w.FileCache = map[string][]byte{} wd, err := os.Getwd() if err != nil { return err } os.Setenv("PATH", os.Getenv("PATH")+":"+wd) if w.Wait == 0 { w.Wait = 10 * time.Second } for { wait, err := w.dojob() if err != nil { log.Print(err) } if w.MaxIdle > 0 && time.Now().Sub(w.lastjob) > w.MaxIdle { log.Printf("no jobs received for %v, shutting down", w.MaxIdle) return nil } if wait { <-time.After(w.Wait) } } }
func (j *Job) setup() error { var err error if j.wd == "" { j.wd, err = os.Getwd() if err != nil { return err } } j.dir = uuid.NewRandom().String() err = os.MkdirAll(j.dir, 0755) if err != nil { return err } if err := os.Chdir(j.dir); err != nil { return err } for _, f := range j.Infiles { err := ioutil.WriteFile(f.Name, f.Data, 0755) if err != nil { return err } } return nil }
func NewJob() *Job { uid := uuid.NewRandom() var id [16]byte copy(id[:], uid) return &Job{ Id: id, Timeout: DefaultTimeout, } }
func (w *goodWorker) Run(kill chan struct{}) error { uid := uuid.NewRandom() copy(w.Id[:], uid) for { select { case <-kill: return nil default: err := w.dojob() if err != nil { log.Print(err) } <-time.After(workerpoll) } } }
func (s *Scenario) Run(stdout, stderr io.Writer) (dbfile string, simid []byte, err error) { // generate cyclus input file and run cyclus ui := uuid.NewRandom() cycin := ui.String() + ".cyclus.xml" cycout := ui.String() + ".sqlite" data, err := s.GenCyclusInfile() if err != nil { return "", nil, err } err = ioutil.WriteFile(cycin, data, 0644) if err != nil { return "", nil, err } cmd := exec.Command("cyclus", cycin, "-o", cycout) cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout if stdout != nil { cmd.Stdout = stdout } if stderr != nil { cmd.Stderr = stderr } if err := cmd.Run(); err != nil { return "", nil, err } // post process cyclus output db db, err := sql.Open("sqlite3", cycout) if err != nil { return "", nil, err } defer db.Close() simids, err := post.Process(db) if err != nil { return "", nil, err } return cycout, simids[0], nil }