tools/cmd/data-gen/main.go (58 lines of code) (raw):
package main
import (
"flag"
"fmt"
"os"
"time"
"github.com/Azure/adx-mon/pkg/prompb"
"github.com/Azure/adx-mon/tools/data"
)
func main() {
var (
dataFile string
verbose bool
batchSize, totalSamples int
hosts, metrics int
)
flag.BoolVar(&verbose, "verbose", false, "Verbose logging")
flag.StringVar(&dataFile, "data-file", "", "Data file input created from TSBS suite")
flag.IntVar(&batchSize, "batch-size", 2500, "Batch size of requests")
flag.IntVar(&totalSamples, "total-samples", 100*1000*1000, "Total samples to generate")
flag.IntVar(&hosts, "hosts", 1, "Total hosts (increases cardinality of metrics)")
flag.IntVar(&metrics, "metrics", 1, "Total metrics")
flag.Parse()
fmt.Printf("Generating data set to: %s\n", dataFile)
fmt.Printf("Total Samples: %d\n", totalSamples)
fmt.Printf("Batch Size: %d\n", batchSize)
f, err := data.NewFileWriter(dataFile)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
defer f.Close()
ds := data.NewDataSet(data.SetOptions{
Cardinality: hosts,
NumMetrics: metrics,
})
ts := time.Now().UTC()
ts = ts.Add(time.Duration(-totalSamples/batchSize/60) * time.Minute)
wr := &prompb.WriteRequest{}
for i := 0; i < totalSamples; i++ {
series := ds.Next(ts)
wr.Timeseries = append(wr.Timeseries, series)
if len(wr.Timeseries) == batchSize {
if _, err := f.Write(wr); err != nil {
fmt.Println(err.Error())
return
}
wr.Timeseries = wr.Timeseries[:0]
ts = ts.Add(time.Second)
}
}
if len(wr.Timeseries) > 0 {
if _, err := f.Write(wr); err != nil {
fmt.Println(err.Error())
return
}
}
}