// 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.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\n", c.Client.Addr()) } c.ServerVersion = v return nil }
// 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 }