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