package syncdb import ( "fmt" "io/ioutil" "log" "os" "strings" "basic.com/pubsub/syncdb.git/command/agent" sdb "basic.com/pubsub/syncdb.git/db" "github.com/hashicorp/serf/serf" "github.com/mitchellh/cli" ) func Doquery() { //members: get name of first member serfins := agent.OAgent.Serf() raw := serfins.Members() var specmembername string for _, m := range raw { if m.Addr.String() != agent.OAgent.SerfConfig().MemberlistConfig.BindAddr { specmembername = m.Name break } } fmt.Println(specmembername) //query: get db file. params := serf.QueryParam{ FilterNodes: strings.Fields(specmembername), } resp, err := agent.OAgent.Query("109node", []byte("get db file"), ¶ms) if err == nil || !strings.Contains(err.Error(), "cannot contain") { fmt.Println("err: ", err) } go func() { respCh := resp.ResponseCh() for { select { case r := <-respCh: fmt.Println("x length is: ", len(r.Payload)) // // byte to file. sdb.Dbconn.Close() sdb.Dbconn = nil err = ioutil.WriteFile("test.db", r.Payload, 0644) if err != nil { fmt.Println("query byte to file error!", err) } err := sdb.GetConn() if err != nil { fmt.Println("create db conn of test.db error: ", err) } return } } }() } func Doevent() { // event : use to send command to operate db. err := agent.OAgent.UserEvent("109node", []byte("CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)"), false) if err == nil || !strings.Contains(err.Error(), "cannot contain") { fmt.Println("err: ", err) } } func Init() { log.SetOutput(ioutil.Discard) // Get the command line args. We shortcut "--version" and "-v" to // just show the version. args := os.Args[1:] for _, arg := range args { if arg == "-v" || arg == "--version" { newArgs := make([]string, len(args)+1) newArgs[0] = "version" copy(newArgs[1:], args) args = newArgs break } } go func() { cli := &cli.CLI{ Args: args, Commands: Commands, HelpFunc: cli.BasicHelpFunc("serf"), } exitCode, err := cli.Run() if err != nil { fmt.Fprintf(os.Stderr, "Error executing CLI: %s\n", err.Error()) os.Exit(1) } fmt.Println("================ run over ======================") //Doquery() os.Exit(exitCode) }() }