func (cmd *Command) writeFiles() error { // open our output file and create an output buffer var w io.WriteCloser w, err := os.Create(cmd.out) if err != nil { return err } defer w.Close() if cmd.compress { w = gzip.NewWriter(w) defer w.Close() } s, e := time.Unix(0, cmd.startTime).Format(time.RFC3339), time.Unix(0, cmd.endTime).Format(time.RFC3339) fmt.Fprintf(w, "# INFLUXDB EXPORT: %s - %s\n", s, e) // Write out all the DDL fmt.Fprintln(w, "# DDL") for key := range cmd.manifest { keys := strings.Split(key, string(byte(os.PathSeparator))) db, rp := influxql.QuoteIdent(keys[0]), influxql.QuoteIdent(keys[1]) fmt.Fprintf(w, "CREATE DATABASE %s WITH NAME %s\n", db, rp) } fmt.Fprintln(w, "# DML") for key := range cmd.manifest { keys := strings.Split(key, string(byte(os.PathSeparator))) fmt.Fprintf(w, "# CONTEXT-DATABASE:%s\n", keys[0]) fmt.Fprintf(w, "# CONTEXT-RETENTION-POLICY:%s\n", keys[1]) if files, ok := cmd.tsmFiles[key]; ok { fmt.Printf("writing out tsm file data for %s...", key) if err := cmd.writeTsmFiles(w, files); err != nil { return err } fmt.Println("complete.") } if _, ok := cmd.walFiles[key]; ok { fmt.Printf("writing out wal file data for %s...", key) if err := cmd.writeWALFiles(w, cmd.walFiles[key], key); err != nil { return err } fmt.Println("complete.") } } return nil }
func (i *InfluxDBOutNode) runOut([]byte) error { i.pointsWritten = &expvar.Int{} i.writeErrors = &expvar.Int{} i.statMap.Set(statsInfluxDBPointsWritten, i.pointsWritten) i.statMap.Set(statsInfluxDBWriteErrors, i.writeErrors) // Start the write buffer i.wb.start() // Create the database and retention policy if i.i.CreateFlag { err := func() error { cli, err := i.et.tm.InfluxDBService.NewNamedClient(i.i.Cluster) if err != nil { return err } var createDb bytes.Buffer createDb.WriteString("CREATE DATABASE ") createDb.WriteString(influxql.QuoteIdent(i.i.Database)) if i.i.RetentionPolicy != "" { createDb.WriteString(" WITH NAME ") createDb.WriteString(influxql.QuoteIdent(i.i.RetentionPolicy)) } _, err = cli.Query(influxdb.Query{Command: createDb.String()}) if err != nil { return err } return nil }() if err != nil { i.logger.Printf("E! failed to create database %q on cluster %q: %v", i.i.Database, i.i.Cluster, err) } } switch i.Wants() { case pipeline.StreamEdge: for p, ok := i.ins[0].NextPoint(); ok; p, ok = i.ins[0].NextPoint() { i.timer.Start() batch := models.Batch{ Name: p.Name, Group: p.Group, Tags: p.Tags, ByName: p.Dimensions.ByName, Points: []models.BatchPoint{models.BatchPointFromPoint(p)}, } err := i.write(p.Database, p.RetentionPolicy, batch) if err != nil { return err } i.timer.Stop() } case pipeline.BatchEdge: for b, ok := i.ins[0].NextBatch(); ok; b, ok = i.ins[0].NextBatch() { i.timer.Start() err := i.write("", "", b) if err != nil { return err } i.timer.Stop() } } return nil }