62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"mxl-player/internal/source"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
domain := flag.String("domain", "/dev/shm/mxl", "MXL domain")
|
|
flowID := flag.String("flow", "5fbec3b1-1b0f-417d-9059-8b94a47197ed", "Flow UUID")
|
|
timeout := flag.Duration("timeout", 200*time.Millisecond, "Per-grain read timeout")
|
|
count := flag.Int("count", 10, "Stop after N grains (0 = run forever)")
|
|
flag.Parse()
|
|
|
|
src, err := source.Open(*domain, *flowID)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer src.Close()
|
|
fmt.Printf("format=%s rate=%d/%d stride=%d grainCount=%d\n",
|
|
src.Format(),
|
|
src.Rate().Num,
|
|
src.Rate().Den,
|
|
src.Stride(),
|
|
src.GrainCount())
|
|
stop := make(chan os.Signal, 1)
|
|
signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
|
|
|
|
grains := 0
|
|
for {
|
|
select {
|
|
case <-stop:
|
|
fmt.Printf("\nstopping: %d grains read\n", grains)
|
|
return
|
|
default:
|
|
}
|
|
|
|
f, err := src.Next(*timeout)
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
return
|
|
}
|
|
lines := uint32(0)
|
|
if src.Stride() > 0 {
|
|
lines = f.Size / src.Stride()
|
|
}
|
|
fmt.Printf("idx=%d size=%d (%dx%d, %d lines) invalid=%v\n",
|
|
f.Index, f.Size, f.Width, f.Height, lines, f.Invalid)
|
|
grains++
|
|
if *count > 0 && grains >= *count {
|
|
fmt.Printf("done: %d grains read\n", grains)
|
|
return
|
|
}
|
|
}
|
|
}
|