mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
beam/examples/beamsh: use beam.Router to simplify 'logger'
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
This commit is contained in:
parent
9206b18818
commit
63fd2ec0f7
1 changed files with 14 additions and 29 deletions
|
@ -243,7 +243,6 @@ func Handlers() (*beam.UnixConn, error) {
|
||||||
func GetHandler(name string) Handler {
|
func GetHandler(name string) Handler {
|
||||||
if name == "logger" {
|
if name == "logger" {
|
||||||
return func(args []string, in beam.Receiver, out beam.Sender) {
|
return func(args []string, in beam.Receiver, out beam.Sender) {
|
||||||
var tasks sync.WaitGroup
|
|
||||||
stdout, err := beam.SendPipe(out, data.Empty().Set("cmd", "log", "stdout").Set("fromcmd", args...).Bytes())
|
stdout, err := beam.SendPipe(out, data.Empty().Set("cmd", "log", "stdout").Set("fromcmd", args...).Bytes())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -258,35 +257,17 @@ func GetHandler(name string) Handler {
|
||||||
fmt.Fprintf(stderr, "%v\n", err)
|
fmt.Fprintf(stderr, "%v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
var tasks sync.WaitGroup
|
||||||
|
defer tasks.Wait()
|
||||||
var n int = 1
|
var n int = 1
|
||||||
for {
|
r := beam.NewRouter(out)
|
||||||
payload, attachment, err := in.Receive()
|
r.NewRoute().HasAttachment().KeyStartsWith("cmd", "log").Handler(func (payload []byte, attachment *os.File) error {
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if attachment == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
w, err := beam.SendPipe(out, payload)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(stderr, "%v\n", err)
|
|
||||||
attachment.Close()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
tasks.Add(1)
|
tasks.Add(1)
|
||||||
go func(payload []byte, attachment *os.File, n int, sink *os.File) {
|
go func(n int) {
|
||||||
defer tasks.Done()
|
defer tasks.Done()
|
||||||
defer attachment.Close()
|
defer attachment.Close()
|
||||||
defer sink.Close()
|
|
||||||
cmd := data.Message(payload).Get("cmd")
|
|
||||||
if cmd == nil || len(cmd) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if cmd[0] != "log" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var streamname string
|
var streamname string
|
||||||
if len(cmd) == 1 || cmd[1] == "stdout" {
|
if cmd := data.Message(payload).Get("cmd"); len(cmd) == 1 || cmd[1] == "stdout" {
|
||||||
streamname = "stdout"
|
streamname = "stdout"
|
||||||
} else {
|
} else {
|
||||||
streamname = cmd[1]
|
streamname = cmd[1]
|
||||||
|
@ -299,13 +280,17 @@ func GetHandler(name string) Handler {
|
||||||
fmt.Fprintf(stderr, "%v\n", err)
|
fmt.Fprintf(stderr, "%v\n", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
io.Copy(io.MultiWriter(logfile, sink), attachment)
|
defer logfile.Close()
|
||||||
|
io.Copy(logfile, attachment)
|
||||||
logfile.Sync()
|
logfile.Sync()
|
||||||
logfile.Close()
|
}(n)
|
||||||
}(payload, attachment, n, w)
|
|
||||||
n++
|
n++
|
||||||
|
return nil
|
||||||
|
}).Tee(out)
|
||||||
|
if _, err := beam.Copy(r, in); err != nil {
|
||||||
|
fmt.Fprintf(stderr, "%v\n", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
tasks.Wait()
|
|
||||||
}
|
}
|
||||||
} else if name == "render" {
|
} else if name == "render" {
|
||||||
return func(args []string, in beam.Receiver, out beam.Sender) {
|
return func(args []string, in beam.Receiver, out beam.Sender) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue