github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/scripts/estream/estream.go (about) 1 // Program estream is a manual testing tool for polling the event stream 2 // of a running Tendermint consensus node. 3 package main 4 5 import ( 6 "context" 7 "encoding/json" 8 "flag" 9 "fmt" 10 "log" 11 "os" 12 "os/signal" 13 "path/filepath" 14 15 "github.com/ari-anchor/sei-tendermint/rpc/client/eventstream" 16 rpcclient "github.com/ari-anchor/sei-tendermint/rpc/client/http" 17 "github.com/ari-anchor/sei-tendermint/rpc/coretypes" 18 ) 19 20 var ( 21 query = flag.String("query", "", "Filter query") 22 batchSize = flag.Int("batch", 0, "Batch size") 23 resumeFrom = flag.String("resume", "", "Resume cursor") 24 numItems = flag.Int("count", 0, "Number of items to read (0 to stream)") 25 waitTime = flag.Duration("poll", 0, "Long poll interval") 26 rpcAddr = flag.String("addr", "http://localhost:26657", "RPC service address") 27 ) 28 29 func init() { 30 flag.Usage = func() { 31 fmt.Fprintf(os.Stderr, `Usage: %[1]s [options] 32 33 Connect to the Tendermint node whose RPC service is at -addr, and poll for events 34 matching the specified -query. If no query is given, all events are fetched. 35 The resulting event data are written to stdout as JSON. 36 37 Use -resume to pick up polling from a previously-reported event cursor. 38 Use -count to stop polling after a certain number of events has been reported. 39 Use -batch to override the default request batch size. 40 Use -poll to override the default long-polling interval. 41 42 Options: 43 `, filepath.Base(os.Args[0])) 44 flag.PrintDefaults() 45 } 46 } 47 48 func main() { 49 flag.Parse() 50 51 cli, err := rpcclient.New(*rpcAddr) 52 if err != nil { 53 log.Fatalf("RPC client: %v", err) 54 } 55 stream := eventstream.New(cli, *query, &eventstream.StreamOptions{ 56 BatchSize: *batchSize, 57 ResumeFrom: *resumeFrom, 58 WaitTime: *waitTime, 59 }) 60 61 // Shut down cleanly on SIGINT. Don't attempt clean shutdown for other 62 // fatal signals. 63 ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) 64 defer cancel() 65 66 var nr int 67 if err := stream.Run(ctx, func(itm *coretypes.EventItem) error { 68 nr++ 69 bits, err := json.Marshal(itm) 70 if err != nil { 71 return err 72 } 73 fmt.Println(string(bits)) 74 if *numItems > 0 && nr >= *numItems { 75 return eventstream.ErrStopRunning 76 } 77 return nil 78 }); err != nil { 79 log.Fatalf("Stream failed: %v", err) 80 } 81 }