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  }