func (c *Client) Write(samples model.Samples) error {
	reqs := make([]StoreSamplesRequest, 0, len(samples))
	for _, s := range samples {
		v := float64(s.Value)
		if math.IsNaN(v) || math.IsInf(v, 0) {
			level.Debug(c.logger).Log("msg", "cannot send value to OpenTSDB, skipping sample", "value", v, "sample", s)
			continue
		}
		metric := TagValue(s.Metric[model.MetricNameLabel])
		reqs = append(reqs, StoreSamplesRequest{
			Metric:    metric,
			Timestamp: s.Timestamp.Unix(),
			Value:     v,
			Tags:      tagsFromMetric(s.Metric),
		})
	}

	u, err := url.Parse(c.url)
	if err != nil {
		return err
	}

	u.Path = putEndpoint

	buf, err := json.Marshal(reqs)
	if err != nil {
		return err
	}

	ctx, cancel := context.WithTimeout(context.Background(), c.timeout)
	defer cancel()

	req, err := http.NewRequest("POST", u.String(), bytes.NewBuffer(buf))
	if err != nil {
		return err
	}
	req.Header.Set("Content-Type", contentTypeJSON)
	resp, err := http.DefaultClient.Do(req.WithContext(ctx))
	if err != nil {
		return err
	}
	defer func() {
		io.Copy(ioutil.Discard, resp.Body)
		resp.Body.Close()
	}()

	// API returns status code 204 for successful writes.
	// http://opentsdb.net/docs/build/html/api_http/put.html
	if resp.StatusCode == http.StatusNoContent {
		return nil
	}

	// API returns status code 400 on error, encoding error details in the
	// response content in JSON.
	buf, err = ioutil.ReadAll(resp.Body)
	if err != nil {
		return err
	}

	var r map[string]int
	if err := json.Unmarshal(buf, &r); err != nil {
		return err
	}
	return errors.Errorf("failed to write %d samples to OpenTSDB, %d succeeded", r["failed"], r["success"])
}
func (c *Client) Write(samples model.Samples) error {
	reqs := make([]StoreSamplesRequest, 0, len(samples))
	for _, s := range samples {
		v := float64(s.Value)
		if math.IsNaN(v) || math.IsInf(v, 0) {
			level.Debug(c.logger).Log("msg", "cannot send value to OpenTSDB, skipping sample", "value", v, "sample", s)
			continue
		}
		metric := TagValue(s.Metric[model.MetricNameLabel])
		reqs = append(reqs, StoreSamplesRequest{
			Metric:    metric,
			Timestamp: s.Timestamp.Unix(),
			Value:     v,
			Tags:      tagsFromMetric(s.Metric),
		})
	}

	u, err := url.Parse(c.url)
	if err != nil {
		return err
	}

	u.Path = putEndpoint

	buf, err := json.Marshal(reqs)
	if err != nil {
		return err
	}

	ctx, cancel := context.WithTimeout(context.Background(), c.timeout)
	defer cancel()

	req, err := http.NewRequest("POST", u.String(), bytes.NewBuffer(buf))
	if err != nil {
		return err
	}
	req.Header.Set("Content-Type", contentTypeJSON)
	resp, err := http.DefaultClient.Do(req.WithContext(ctx))
	if err != nil {
		return err
	}
	defer func() {
		io.Copy(ioutil.Discard, resp.Body)
		resp.Body.Close()
	}()

	
	
	if resp.StatusCode == http.StatusNoContent {
		return nil
	}

	
	
	buf, err = ioutil.ReadAll(resp.Body)
	if err != nil {
		return err
	}

	var r map[string]int
	if err := json.Unmarshal(buf, &r); err != nil {
		return err
	}
	return errors.Errorf("failed to write %d samples to OpenTSDB, %d succeeded", r["failed"], r["success"])
}
func ( c * Client ) Write ( samples model . Samples ) error { reqs := make ( [ ] StoreSamplesRequest , 0 , len ( samples ) ) for _ , s := range samples { v := float64 ( s . Value ) if math . IsNaN ( v ) || math . IsInf ( v , 0 ) { level . Debug ( c . logger ) . Log ( " " , " " , " " , v , " " , s ) continue } metric := TagValue ( s . Metric [ model . MetricNameLabel ] ) reqs = append ( reqs , StoreSamplesRequest { Metric : metric , Timestamp : s . Timestamp . Unix ( ) , Value : v , Tags : tagsFromMetric ( s . Metric ) , } ) } u , err := url . Parse ( c . url ) if err != nil { return err } u . Path = putEndpoint buf , err := json . Marshal ( reqs ) if err != nil { return err } ctx , cancel := context . WithTimeout ( context . Background ( ) , c . timeout ) defer cancel ( ) req , err := http . NewRequest ( " " , u . String ( ) , bytes . NewBuffer ( buf ) ) if err != nil { return err } req . Header . Set ( " " , contentTypeJSON ) resp , err := http . DefaultClient . Do ( req . WithContext ( ctx ) ) if err != nil { return err } defer func ( ) { io . Copy ( ioutil . Discard , resp . Body ) resp . Body . Close ( ) } ( ) // API returns status code 204 for successful writes. // http://opentsdb.net/docs/build/html/api_http/put.html if resp . StatusCode == http . StatusNoContent { return nil } // API returns status code 400 on error, encoding error details in the // response content in JSON. buf , err = ioutil . ReadAll ( resp . Body ) if err != nil { return err } var r map [ string ] int if err := json . Unmarshal ( buf , & r ) ; err != nil { return err } return errors . Errorf ( " " , r [ " " ] , r [ " " ] ) }
// Write sends a batch of samples to OpenTSDB via its HTTP API.
Write sends a batch of samples to OpenTSDB via its HTTP API .