func worker() { worker := beam.NewWorker(&beam.NetTransport{"tcp", ":6379"}, "/jobs") worker.RegisterJob("tty", func(name string, args []string, env map[string]string, streams beam.Streamer, db beam.DB) error { p := exec.Command("bash") master, slave, err := pty.Open() if err != nil { return err } if slave == nil { return fmt.Errorf("tty is nil") } term.SetWinsize(master.Fd(), winsize) p.Stdout = slave p.Stderr = slave p.Stdin = slave p.SysProcAttr = &syscall.SysProcAttr{Setctty: true, Setsid: true} go streams.ReadFrom(master, "stdout") go streams.ReadFrom(master, "stderr") go streams.WriteTo(master, "stdin") return p.Run() }) worker.Work() }
func worker() { worker := beam.NewWorker(&beam.NetTransport{"tcp", ":6379"}, "/jobs") worker.RegisterJob("exec", func(name string, args []string, env map[string]string, streams *beam.Streamer, db beam.DB) error { var ( cmdName string cmdArgs []string ) if len(args) >= 1 { cmdName = args[0] } else { return fmt.Errorf("Not enough arguments") } if len(args) > 1 { cmdArgs = args[1:] } p := exec.Command(cmdName, cmdArgs...) out := streams.OpenWrite("stdout") err := streams.OpenWrite("stderr") defer out.Close() defer err.Close() p.Stdout = out p.Stderr = err streams.Shutdown() return p.Run() }) worker.Work() }
// This is a placeholder for the beam command-line tool. // It is meant as a convenience to expose capabilities of the protocol and library // from the command-line. func main() { flag.Parse() worker := beam.NewWorker(&beam.NetTransport{"tcp", flag.Arg(0)}, "/jobs") worker.RegisterJob("hello", JobHello) if err := worker.Work(); err != nil { log.Fatal(err) } }