github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/apiserver/metricsender/sender.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package metricsender 5 6 import ( 7 "bytes" 8 "encoding/json" 9 "net/http" 10 11 "github.com/juju/errors" 12 wireformat "github.com/juju/romulus/wireformat/metrics" 13 ) 14 15 var ( 16 metricsHost string = "https://api.jujucharms.com/omnibus/v2/metrics" 17 ) 18 19 // HTTPSender is the default used for sending 20 // metrics to the collector service. 21 type HTTPSender struct { 22 } 23 24 // Send sends the given metrics to the collector service. 25 func (s *HTTPSender) Send(metrics []*wireformat.MetricBatch) (*wireformat.Response, error) { 26 b, err := json.Marshal(metrics) 27 if err != nil { 28 return nil, errors.Trace(err) 29 } 30 r := bytes.NewBuffer(b) 31 client := &http.Client{} 32 resp, err := client.Post(metricsHost, "application/json", r) 33 if err != nil { 34 return nil, errors.Trace(err) 35 } 36 if resp.StatusCode != http.StatusOK { 37 return nil, errors.Errorf("failed to send metrics http %v", resp.StatusCode) 38 } 39 40 defer resp.Body.Close() 41 respReader := json.NewDecoder(resp.Body) 42 metricsResponse := wireformat.Response{} 43 err = respReader.Decode(&metricsResponse) 44 if err != nil { 45 return nil, errors.Trace(err) 46 } 47 return &metricsResponse, nil 48 }