Skip to content

Commit

Permalink
edgexfoundry#196: Centralized URLClient logic to the request package.
Browse files Browse the repository at this point in the history
Signed-off-by: Brandon Forster <me@brandonforster.com>
  • Loading branch information
brandonforster committed Jan 24, 2020
1 parent 40d6aaf commit 4b1aba3
Show file tree
Hide file tree
Showing 16 changed files with 173 additions and 504 deletions.
26 changes: 5 additions & 21 deletions clients/command/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,36 +48,25 @@ func NewCommandClient(params types.EndpointParams, m interfaces.Endpointer) Comm
}

func (cc *commandRestClient) Get(deviceId string, commandId string, ctx context.Context) (string, error) {
url, err := cc.urlClient.Prefix()
if err != nil {
return "", err
}

body, err := clients.GetRequest(url+"/"+deviceId+"/command/"+commandId, ctx)
body, err := clients.GetRequest("/"+deviceId+"/command/"+commandId, ctx, cc.urlClient)
return string(body), err
}

func (cc *commandRestClient) Put(deviceId string, commandId string, body string, ctx context.Context) (string, error) {
url, err := cc.urlClient.Prefix()
if err != nil {
return "", err
}

return clients.PutRequest(url+"/"+deviceId+"/command/"+commandId, []byte(body), ctx)
return clients.PutRequest("/"+deviceId+"/command/"+commandId, []byte(body), ctx, cc.urlClient)
}

func (cc *commandRestClient) GetDeviceCommandByNames(
deviceName string,
commandName string,
ctx context.Context) (string, error) {

url, err := cc.urlClient.Prefix()
body, err := clients.GetRequest("/name/"+deviceName+"/command/"+commandName, ctx, cc.urlClient)
if err != nil {
return "", err
}

body, err := clients.GetRequest(url+"/name/"+deviceName+"/command/"+commandName, ctx)
return string(body), err
return string(body), nil
}

func (cc *commandRestClient) PutDeviceCommandByNames(
Expand All @@ -86,10 +75,5 @@ func (cc *commandRestClient) PutDeviceCommandByNames(
body string,
ctx context.Context) (string, error) {

urlPrefix, err := cc.urlClient.Prefix()
if err != nil {
return "", err
}

return clients.PutRequest(urlPrefix+"/name/"+deviceName+"/command/"+commandName, []byte(body), ctx)
return clients.PutRequest("/name/"+deviceName+"/command/"+commandName, []byte(body), ctx, cc.urlClient)
}
79 changes: 12 additions & 67 deletions clients/coredata/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,7 @@ func NewEventClient(params types.EndpointParams, m interfaces.Endpointer) EventC

// Helper method to request and decode an event slice
func (e *eventRestClient) requestEventSlice(urlSuffix string, ctx context.Context) ([]models.Event, error) {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return []models.Event{}, err
}

data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx)
data, err := clients.GetRequest(urlSuffix, ctx, e.urlClient)
if err != nil {
return []models.Event{}, err
}
Expand All @@ -98,12 +93,7 @@ func (e *eventRestClient) requestEventSlice(urlSuffix string, ctx context.Contex

// Helper method to request and decode an event
func (e *eventRestClient) requestEvent(urlSuffix string, ctx context.Context) (models.Event, error) {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return models.Event{}, err
}

data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx)
data, err := clients.GetRequest(urlSuffix, ctx, e.urlClient)
if err != nil {
return models.Event{}, err
}
Expand All @@ -122,21 +112,11 @@ func (e *eventRestClient) Event(id string, ctx context.Context) (models.Event, e
}

func (e *eventRestClient) EventCount(ctx context.Context) (int, error) {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return 0, err
}

return clients.CountRequest(urlPrefix+"/count", ctx)
return clients.CountRequest("/count", ctx, e.urlClient)
}

func (e *eventRestClient) EventCountForDevice(deviceId string, ctx context.Context) (int, error) {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return 0, err
}

return clients.CountRequest(urlPrefix+"/count/"+url.QueryEscape(deviceId), ctx)
return clients.CountRequest("/count/"+url.QueryEscape(deviceId), ctx, e.urlClient)
}

func (e *eventRestClient) EventsForDevice(deviceId string, limit int, ctx context.Context) ([]models.Event, error) {
Expand Down Expand Up @@ -166,71 +146,36 @@ func (e *eventRestClient) EventsForDeviceAndValueDescriptor(
func (e *eventRestClient) Add(event *models.Event, ctx context.Context) (string, error) {
content := clients.FromContext(clients.ContentType, ctx)

urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return "", err
}

if content == clients.ContentTypeCBOR {
return clients.PostRequest(urlPrefix, event.CBOR(), ctx)
return clients.PostRequest("", event.CBOR(), ctx, e.urlClient)
} else {
return clients.PostJsonRequest(urlPrefix, event, ctx)
return clients.PostJsonRequest("", event, ctx, e.urlClient)
}
}

func (e *eventRestClient) AddBytes(event []byte, ctx context.Context) (string, error) {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return "", err
}

return clients.PostRequest(urlPrefix, event, ctx)
return clients.PostRequest("", event, ctx, e.urlClient)
}

func (e *eventRestClient) Delete(id string, ctx context.Context) error {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return err
}

return clients.DeleteRequest(urlPrefix+"/id/"+id, ctx)
return clients.DeleteRequest("/id/"+id, ctx, e.urlClient)
}

func (e *eventRestClient) DeleteForDevice(deviceId string, ctx context.Context) error {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return err
}

return clients.DeleteRequest(urlPrefix+"/device/"+url.QueryEscape(deviceId), ctx)
return clients.DeleteRequest("/device/"+url.QueryEscape(deviceId), ctx, e.urlClient)
}

func (e *eventRestClient) DeleteOld(age int, ctx context.Context) error {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return err
}

return clients.DeleteRequest(urlPrefix+"/removeold/age/"+strconv.Itoa(age), ctx)
return clients.DeleteRequest("/removeold/age/"+strconv.Itoa(age), ctx, e.urlClient)
}

func (e *eventRestClient) MarkPushed(id string, ctx context.Context) error {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return err
}

_, err = clients.PutRequest(urlPrefix+"/id/"+id, nil, ctx)
_, err := clients.PutRequest("/id/"+id, nil, ctx, e.urlClient)
return err
}

func (e *eventRestClient) MarkPushedByChecksum(checksum string, ctx context.Context) error {
urlPrefix, err := e.urlClient.Prefix()
if err != nil {
return err
}

_, err = clients.PutRequest(urlPrefix+"/checksum/"+checksum, nil, ctx)
_, err := clients.PutRequest("/checksum/"+checksum, nil, ctx, e.urlClient)
return err
}

Expand Down
35 changes: 5 additions & 30 deletions clients/coredata/reading.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,7 @@ func NewReadingClient(params types.EndpointParams, m interfaces.Endpointer) Read

// Helper method to request and decode a reading slice
func (r *readingRestClient) requestReadingSlice(urlSuffix string, ctx context.Context) ([]models.Reading, error) {
urlPrefix, err := r.urlClient.Prefix()
if err != nil {
return nil, err
}

data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx)
data, err := clients.GetRequest(urlSuffix, ctx, r.urlClient)
if err != nil {
return []models.Reading{}, err
}
Expand All @@ -86,12 +81,7 @@ func (r *readingRestClient) requestReadingSlice(urlSuffix string, ctx context.Co

// Helper method to request and decode a reading
func (r *readingRestClient) requestReading(urlSuffix string, ctx context.Context) (models.Reading, error) {
urlPrefix, err := r.urlClient.Prefix()
if err != nil {
return models.Reading{}, err
}

data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx)
data, err := clients.GetRequest(urlSuffix, ctx, r.urlClient)
if err != nil {
return models.Reading{}, err
}
Expand All @@ -110,12 +100,7 @@ func (r *readingRestClient) Reading(id string, ctx context.Context) (models.Read
}

func (r *readingRestClient) ReadingCount(ctx context.Context) (int, error) {
urlPrefix, err := r.urlClient.Prefix()
if err != nil {
return 0, err
}

return clients.CountRequest(urlPrefix+"/count", ctx)
return clients.CountRequest("/count", ctx, r.urlClient)
}

func (r *readingRestClient) ReadingsForDevice(
Expand Down Expand Up @@ -176,19 +161,9 @@ func (r *readingRestClient) ReadingsForInterval(
}

func (r *readingRestClient) Add(reading *models.Reading, ctx context.Context) (string, error) {
urlPrefix, err := r.urlClient.Prefix()
if err != nil {
return "", err
}

return clients.PostJsonRequest(urlPrefix, reading, ctx)
return clients.PostJsonRequest("", reading, ctx, r.urlClient)
}

func (r *readingRestClient) Delete(id string, ctx context.Context) error {
urlPrefix, err := r.urlClient.Prefix()
if err != nil {
return err
}

return clients.DeleteRequest(urlPrefix+"/id/"+id, ctx)
return clients.DeleteRequest("/id/"+id, ctx, r.urlClient)
}
52 changes: 15 additions & 37 deletions clients/coredata/value_descriptor.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,7 @@ func (v *valueDescriptorRestClient) requestValueDescriptorSlice(
urlSuffix string,
ctx context.Context) ([]models.ValueDescriptor, error) {

urlPrefix, err := v.urlClient.Prefix()
if err != nil {
return nil, err
}

data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx)
data, err := clients.GetRequest(urlSuffix, ctx, v.urlClient)
if err != nil {
return []models.ValueDescriptor{}, err
}
Expand All @@ -89,12 +84,7 @@ func (v *valueDescriptorRestClient) requestValueDescriptor(
urlSuffix string,
ctx context.Context) (models.ValueDescriptor, error) {

urlPrefix, err := v.urlClient.Prefix()
if err != nil {
return models.ValueDescriptor{}, err
}

data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx)
data, err := clients.GetRequest(urlSuffix, ctx, v.urlClient)
if err != nil {
return models.ValueDescriptor{}, err
}
Expand Down Expand Up @@ -161,7 +151,15 @@ func (v *valueDescriptorRestClient) ValueDescriptorsUsage(names []string, ctx co
q := u.Query()
q.Add("names", strings.Join(names, ","))
u.RawQuery = q.Encode()
data, err := clients.GetRequest(u.String(), ctx)

// create a new URL client with an empty URL to fulfil the GetRequest contract while relying wholly on
// our parsed URL for the actual endpoint data
emptyURLClient := urlclient.New(types.EndpointParams{
UseRegistry: false,
Url: "",
}, nil)

data, err := clients.GetRequest(u.String(), ctx, emptyURLClient)
if err != nil {
return nil, err
}
Expand All @@ -175,39 +173,19 @@ func (v *valueDescriptorRestClient) ValueDescriptorsUsage(names []string, ctx co
}

func (v *valueDescriptorRestClient) Add(vdr *models.ValueDescriptor, ctx context.Context) (string, error) {
urlPrefix, err := v.urlClient.Prefix()
if err != nil {
return "", err
}

return clients.PostJsonRequest(urlPrefix, vdr, ctx)
return clients.PostJsonRequest("", vdr, ctx, v.urlClient)
}

func (v *valueDescriptorRestClient) Update(vdr *models.ValueDescriptor, ctx context.Context) error {
urlPrefix, err := v.urlClient.Prefix()
if err != nil {
return err
}

return clients.UpdateRequest(urlPrefix, vdr, ctx)
return clients.UpdateRequest("", vdr, ctx, v.urlClient)
}

func (v *valueDescriptorRestClient) Delete(id string, ctx context.Context) error {
urlPrefix, err := v.urlClient.Prefix()
if err != nil {
return err
}

return clients.DeleteRequest(urlPrefix+"/id/"+id, ctx)
return clients.DeleteRequest("/id/"+id, ctx, v.urlClient)
}

func (v *valueDescriptorRestClient) DeleteByName(name string, ctx context.Context) error {
urlPrefix, err := v.urlClient.Prefix()
if err != nil {
return err
}

return clients.DeleteRequest(urlPrefix+"/name/"+name, ctx)
return clients.DeleteRequest("/name/"+name, ctx, v.urlClient)
}

// flattenValueDescriptorUsage puts all key and values into one map.
Expand Down
10 changes: 4 additions & 6 deletions clients/general/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,19 @@ func NewGeneralClient(params types.EndpointParams, m interfaces.Endpointer) Gene
}

func (gc *generalRestClient) FetchConfiguration(ctx context.Context) (string, error) {
urlPrefix, err := gc.urlClient.Prefix()
body, err := clients.GetRequest(clients.ApiConfigRoute, ctx, gc.urlClient)
if err != nil {
return "", err
}

body, err := clients.GetRequest(urlPrefix+clients.ApiConfigRoute, ctx)
return string(body), err
return string(body), nil
}

func (gc *generalRestClient) FetchMetrics(ctx context.Context) (string, error) {
urlPrefix, err := gc.urlClient.Prefix()
body, err := clients.GetRequest(clients.ApiMetricsRoute, ctx, gc.urlClient)
if err != nil {
return "", err
}

body, err := clients.GetRequest(urlPrefix+clients.ApiMetricsRoute, ctx)
return string(body), err
return string(body), nil
}
11 changes: 10 additions & 1 deletion clients/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ import (

"github.com/edgexfoundry/go-mod-core-contracts/clients"
"github.com/edgexfoundry/go-mod-core-contracts/clients/types"
"github.com/edgexfoundry/go-mod-core-contracts/clients/urlclient"
"github.com/edgexfoundry/go-mod-core-contracts/models"

"github.com/go-kit/kit/log"
)

Expand Down Expand Up @@ -249,8 +251,15 @@ func (lc edgeXLogger) buildLogEntry(logLevel string, msg string, args ...interfa

// Send the log as an http request
func (lc edgeXLogger) sendLog(logEntry models.LogEntry) {
// create a new URL client with an empty URL to fulfil the PostJsonRequest contract while relying wholly on
// logTarget for the actual endpoint data
emptyURLClient := urlclient.New(types.EndpointParams{
UseRegistry: false,
Url: "",
}, nil)

go func() {
_, err := clients.PostJsonRequest(lc.logTarget, logEntry, context.Background())
_, err := clients.PostJsonRequest(lc.logTarget, logEntry, context.Background(), emptyURLClient)
if err != nil {
fmt.Println(err.Error())
}
Expand Down
Loading

0 comments on commit 4b1aba3

Please sign in to comment.