github.com/pingcap/chaos@v0.0.0-20190710112158-c86faf4b3719/cmd/verifier/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "flag" 6 "log" 7 "net/http" 8 _ "net/http/pprof" 9 "os" 10 "os/signal" 11 "strings" 12 "syscall" 13 14 "github.com/pingcap/chaos/db/tidb" 15 "github.com/pingcap/chaos/pkg/check/porcupine" 16 "github.com/pingcap/chaos/pkg/model" 17 "github.com/pingcap/chaos/pkg/verify" 18 ) 19 20 var ( 21 historyFile = flag.String("history", "./history.log", "history file") 22 names = flag.String("names", "", "model names, seperate by comma") 23 pprofAddr = flag.String("pprof", "0.0.0.0:6060", "Pprof address") 24 ) 25 26 func main() { 27 flag.Parse() 28 29 ctx, cancel := context.WithCancel(context.Background()) 30 sigs := make(chan os.Signal, 1) 31 signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) 32 33 go func() { 34 http.ListenAndServe(*pprofAddr, nil) 35 }() 36 37 go func() { 38 <-sigs 39 cancel() 40 }() 41 42 childCtx, cancel := context.WithCancel(ctx) 43 44 go func() { 45 for _, name := range strings.Split(*names, ",") { 46 s := verify.Suit{} 47 switch name { 48 case "tidb_bank": 49 s.Model, s.Parser, s.Checker = tidb.BankModel(), tidb.BankParser(), porcupine.Checker{} 50 case "tidb_bank_tso": 51 // Actually we can omit BankModel, since BankTsoChecker does not require a Model. 52 s.Model, s.Parser, s.Checker = tidb.BankModel(), tidb.BankParser(), tidb.BankTsoChecker() 53 case "sequential": 54 s.Parser, s.Checker = tidb.NewSequentialParser(), tidb.NewSequentialChecker() 55 case "register": 56 s.Model, s.Parser, s.Checker = model.RegisterModel(), model.RegisterParser(), porcupine.Checker{} 57 case "": 58 continue 59 default: 60 log.Printf("%s is not supported", name) 61 continue 62 } 63 s.Verify(*historyFile) 64 } 65 66 cancel() 67 }() 68 69 <-childCtx.Done() 70 }