func TestSetWriteConsistency(t *testing.T) { t.Parallel() c := cli.New(CLIENT_VERSION) config := client.NewConfig() client, _ := client.NewClient(config) c.Client = client // set valid write consistency consistency := "all" c.SetWriteConsistency("consistency " + consistency) if c.WriteConsistency != consistency { t.Fatalf("WriteConsistency is %s but should be %s", c.WriteConsistency, consistency) } // set different valid write consistency and validate change consistency = "quorum" c.SetWriteConsistency("consistency " + consistency) if c.WriteConsistency != consistency { t.Fatalf("WriteConsistency is %s but should be %s", c.WriteConsistency, consistency) } // set invalid write consistency and verify there was no change invalidConsistency := "invalid_consistency" c.SetWriteConsistency("consistency " + invalidConsistency) if c.WriteConsistency == invalidConsistency { t.Fatalf("WriteConsistency is %s but should be %s", c.WriteConsistency, consistency) } }
func TestSetFormat(t *testing.T) { t.Parallel() c := cli.New(CLIENT_VERSION) config := client.NewConfig() client, _ := client.NewClient(config) c.Client = client // validate set non-default format f := "json" c.SetFormat("format " + f) if c.Format != f { t.Fatalf("Format is %s but should be %s", c.Format, f) } }
// InfluxHandler factory function // reutrn *InfluxHandler and error func NewInfluxHandler(h string, p int, db string, u string, pwd string, max int, delay int) (*InfluxHandler, error) { url, err := client.ParseConnectionString(fmt.Sprintf("%s:%d", h, p), false) if err != nil { return nil, err } cfg := client.NewConfig() cfg.URL = url cfg.Username = u cfg.Password = pwd cfg.Precision = "s" // 秒级别的精度就行 c, e := client.NewClient(cfg) if e != nil { return nil, e } _, _, err = c.Ping() if err != nil { return nil, err } ih := new(InfluxHandler) ih.c = c ih.force = make(chan struct{}, 1) ih.last = time.Now() ih.h = h ih.p = p ih.db = db ih.u = u ih.pwd = pwd if max <= 10 || max > 4096 { ih.max = 4096 } else { ih.max = max } if delay <= 60 || delay > 600 { ih.delay = time.Second * 600 } else { ih.delay = time.Second * delay } ih.ch = make(chan unit, int(ih.max+ih.max/2)) go ih.consume() return ih, nil }
// Connect connects client to a server func (c *CommandLine) Connect(cmd string) error { var cl *client.Client var u url.URL // Remove the "connect" keyword if it exists path := strings.TrimSpace(strings.Replace(cmd, "connect", "", -1)) // If they didn't provide a connection string, use the current settings if path == "" { path = net.JoinHostPort(c.Host, strconv.Itoa(c.Port)) } var e error u, e = client.ParseConnectionString(path, c.Ssl) if e != nil { return e } config := client.NewConfig() config.URL = u config.UnixSocket = c.UnixSocket config.Username = c.Username config.Password = c.Password config.UserAgent = "InfluxDBShell/" + c.ClientVersion config.Precision = c.Precision config.UnsafeSsl = c.UnsafeSsl cl, err := client.NewClient(config) if err != nil { return fmt.Errorf("Could not create client %s", err) } c.Client = cl var v string if _, v, e = c.Client.Ping(); e != nil { return fmt.Errorf("Failed to connect to %s: %s\n", c.Client.Addr(), e.Error()) } c.ServerVersion = v // Update the command with the current connection information if h, p, err := net.SplitHostPort(config.URL.Host); err == nil { c.Host = h if i, err := strconv.Atoi(p); err == nil { c.Port = i } } return nil }
func TestSetAuth(t *testing.T) { t.Parallel() c := cli.New(CLIENT_VERSION) config := client.NewConfig() client, _ := client.NewClient(config) c.Client = client u := "userx" p := "pwdy" c.SetAuth("auth " + u + " " + p) // validate CLI configuration if c.Username != u { t.Fatalf("Username is %s but should be %s", c.Username, u) } if c.Password != p { t.Fatalf("Password is %s but should be %s", c.Password, p) } }
func TestSetPrecision(t *testing.T) { t.Parallel() c := cli.New(CLIENT_VERSION) config := client.NewConfig() client, _ := client.NewClient(config) c.Client = client // validate set non-default precision p := "ns" c.SetPrecision("precision " + p) if c.Precision != p { t.Fatalf("Precision is %s but should be %s", c.Precision, p) } // validate set default precision which equals empty string p = "rfc3339" c.SetPrecision("precision " + p) if c.Precision != "" { t.Fatalf("Precision is %s but should be empty", c.Precision) } }
// GetInfluxContext returns a Influx context which contains all the information needed // to query Influx. func (sc *SystemConf) GetInfluxContext() client.Config { c := client.NewConfig() if sc.md.IsDefined("InfluxConf", "URL") { c.URL = *sc.InfluxConf.URL.URL } if sc.md.IsDefined("InfluxConf", "Username") { c.Username = sc.InfluxConf.Username } if sc.md.IsDefined("InfluxConf", "Password") { c.Password = sc.InfluxConf.Password } if sc.md.IsDefined("InfluxConf", "UserAgent") { c.UserAgent = sc.InfluxConf.UserAgent } if sc.md.IsDefined("InfluxConf", "Timeout") { c.Timeout = sc.InfluxConf.Timeout.Duration } if sc.md.IsDefined("InfluxConf", "UnsafeSsl") { c.UnsafeSsl = sc.InfluxConf.UnsafeSSL } return c }
// NewConfig returns an initialized *Config func NewConfig() Config { return Config{Config: client.NewConfig()} }
// Import processes the specified file in the Config and writes the data to the databases in chunks specified by batchSize func (i *Importer) Import() error { // Create a client and try to connect config := client.NewConfig() config.URL = i.config.URL config.Username = i.config.Username config.Password = i.config.Password config.UserAgent = fmt.Sprintf("influxDB importer/%s", i.config.Version) cl, err := client.NewClient(config) if err != nil { return fmt.Errorf("could not create client %s", err) } i.client = cl if _, _, e := i.client.Ping(); e != nil { return fmt.Errorf("failed to connect to %s\n", i.client.Addr()) } // Validate args if i.config.Path == "" { return fmt.Errorf("file argument required") } defer func() { if i.totalInserts > 0 { log.Printf("Processed %d commands\n", i.totalCommands) log.Printf("Processed %d inserts\n", i.totalInserts) log.Printf("Failed %d inserts\n", i.failedInserts) } }() // Open the file f, err := os.Open(i.config.Path) if err != nil { return err } defer f.Close() var r io.Reader // If gzipped, wrap in a gzip reader if i.config.Compressed { gr, err := gzip.NewReader(f) if err != nil { return err } defer gr.Close() // Set the reader to the gzip reader r = gr } else { // Standard text file so our reader can just be the file r = f } // Get our reader scanner := bufio.NewScanner(r) // Process the DDL i.processDDL(scanner) // Set up our throttle channel. Since there is effectively no other activity at this point // the smaller resolution gets us much closer to the requested PPS i.throttle = time.NewTicker(time.Microsecond) defer i.throttle.Stop() // Prime the last write i.lastWrite = time.Now() // Process the DML i.processDML(scanner) // Check if we had any errors scanning the file if err := scanner.Err(); err != nil { return fmt.Errorf("reading standard input: %s", err) } return nil }