func startStatsDClient()

in cmd/statsd-generator/statsd-generator.go [38:82]


func startStatsDClient(clientId, tps, metricNum int) {
	// Create the client
	c, err := statsd.NewBuffered("127.0.0.1:8125", 100)
	if err != nil {
		log.Fatal(err)
	}
	// Prefix every metric with the app name
	c.Namespace = "SoakTest."
	c.Tags = append(c.Tags, "clientId:"+strconv.Itoa(clientId), "region:us-west-2", "airportCode:pdx", "tag_name_only",
		"long_tag_name.long_tag_name.long_tag_name.long_tag_name.long_tag_name:long_tag_value.long_tag_value.long_tag_value.long_tag_value.long_tag_value")
	loopNum := metricNum / operationNum
	//use float64 to avoid dividing by 0.
	sendRate := 1000 / (float64(tps) / float64(metricNum))
	ticker := time.NewTicker(time.Millisecond * time.Duration(sendRate))
	for range ticker.C {
		current := time.Now()
		for i := 0; i < loopNum; i++ {
			iString := strconv.Itoa(i)
			err := c.Gauge("request.Gauge."+iString, 12, []string{"type:Gauge"}, 1)
			if err != nil {
				log.Printf("Client %v Func %v err: %v", clientId, "Gauge", err)
			}
			err = c.Timing("request.Timing."+iString, time.Millisecond*time.Duration(rand.Float64()*100), []string{"type:Timing"}, 1)
			if err != nil {
				log.Printf("Client %v Func %v err: %v", clientId, "Timing", err)
			}
			err = c.Count("request.Count."+iString, 2, []string{"type:Count"}, 1)
			if err != nil {
				log.Printf("Client %v Func %v err: %v", clientId, "Count", err)
			}
			err = c.Set("request.Set."+iString, strconv.Itoa(rand.Intn(1000)), []string{"type:Set"}, 1)
			if err != nil {
				log.Printf("Client %v Func %v err: %v", clientId, "Set", err)
			}
			err = c.Histogram("request.Histogram."+iString, rand.Float64()*1000, []string{"type:Histogram"}, 1)
			if err != nil {
				log.Printf("Client %v Func %v err: %v", clientId, "Histogram", err)
			}
		}
		timeCost := time.Now().Sub(current)
		if timeCost > time.Duration(sendRate)*time.Millisecond {
			log.Printf("Completed %v request in %v, supposed to be completed within %v milliseconds.", operationNum*loopNum, timeCost, sendRate)
		}
	}
}