package main

import (
	"flag"
	"os"
	"os/signal"
	"syscall"
	"time"

	"github.com/pingcap/schrodinger/pkg/test_client"
	"golang.org/x/net/context"
)

var defaultPushMetricsInterval = 15 * time.Second

var (
	concurrency = flag.Int("concurrency", 200, "concurrency worker count")
)

func main() {
	client.Info("[consistency check] start consistency check")
	flag.Parse()

	ctx, cancel := context.WithCancel(context.Background())
	cli := client.New(ctx, client.ModeOnline)

	sc := make(chan os.Signal, 1)
	signal.Notify(sc,
		syscall.SIGHUP,
		syscall.SIGINT,
		syscall.SIGTERM,
		syscall.SIGQUIT)
	go func() {
		sig := <-sc
		client.Infof("[consistency check] Got signal [%s] to exist.", sig)
		cancel()
		os.Exit(0)
	}()

	cfg := Config{
		Concurrency: *concurrency,
		PDAddrs:     cli.PDs(),
		TiKVAddrs:   cli.TiKVs(),
	}
	consistencyCheck := NewConsistencyCheckCase(&cfg)
	if err := consistencyCheck.Initialize(ctx); err != nil {
		client.Fatalf("[consistency check] initial failed %v", err)
	}

	if err := consistencyCheck.Execute(ctx); err != nil {
		client.Fatalf("[consistency check] return with error %v", err)
	}
}
