parent
ce5c9f4854
commit
7ad2fe692a
@ -0,0 +1,73 @@ |
||||
package udrclient |
||||
|
||||
import ( |
||||
"bytes" |
||||
"encoding/json" |
||||
l "gitlab.com/cyclops-utilities/logging" |
||||
"io/ioutil" |
||||
"net/http" |
||||
) |
||||
|
||||
// The UDRRecord is reasonably self-explanaroy - the one point that is a little
|
||||
// non-obvious is the data field - this can be populated using code such as the
|
||||
// following:
|
||||
//
|
||||
// d := map[string]interface{}{
|
||||
// "UID": "1",
|
||||
// "numberData": 200,
|
||||
// }
|
||||
//
|
||||
// and setting this equal to the data field in the struct. Note that this
|
||||
// implementation requires a bit more work to support embedding entire objects
|
||||
// within the Data field.
|
||||
//
|
||||
type UDRRecord struct { |
||||
Metric string `json:"metric"` |
||||
Account string `json:"account"` |
||||
Usage float64 `json:"usage"` |
||||
Time int64 `json:"time"` |
||||
Data map[string]interface{} `json:"data"` |
||||
Unit string `json:"unit"` |
||||
} |
||||
|
||||
// UDRService simply contains the endpoint where the UDR service lives...
|
||||
// It is implemented as an interface which includes a PostCommand...
|
||||
type UDRService struct { |
||||
Endpoint string |
||||
} |
||||
|
||||
// PostRecord takes a UDRRecord and posts it to the UDR endpoint
|
||||
func (u *UDRService) PostRecord(r UDRRecord) (success bool, err error) { |
||||
val, _ := json.Marshal(r) |
||||
// fmt.Printf("r= %+v\n", string(val))
|
||||
req, err := http.NewRequest("POST", u.Endpoint, bytes.NewBuffer(val)) |
||||
req.Header.Set("Content-Type", "application/json") |
||||
|
||||
client := &http.Client{} |
||||
resp, err := client.Do(req) |
||||
|
||||
if err != nil { |
||||
//panic(err)
|
||||
l.Error.Printf("error = %v\n", err.Error()) |
||||
success = false |
||||
return |
||||
} |
||||
|
||||
defer resp.Body.Close() |
||||
|
||||
if err == nil { |
||||
if resp.StatusCode != http.StatusCreated { |
||||
l.Warning.Printf("Unexpected response POSTing to UDR - Response Status: %v\n", resp.Status) |
||||
body, _ := ioutil.ReadAll(resp.Body) |
||||
l.Debug.Printf("Response Body: %v\n", string(body)) |
||||
success = false |
||||
} else { |
||||
// this is the successful case - only dump output if in debug mode as this
|
||||
// should be the default...
|
||||
body, _ := ioutil.ReadAll(resp.Body) |
||||
l.Debug.Printf("Sending to Cyclops UDR service - Response Status: %v, Response Body: %v\n", resp.Status, string(body)) |
||||
success = true |
||||
} |
||||
} |
||||
return |
||||
} |
Loading…
Reference in new issue