From 4b1aba370a2a780425ec0b989b3dc7884f6a1289 Mon Sep 17 00:00:00 2001 From: Brandon Forster Date: Thu, 23 Jan 2020 14:24:06 -0600 Subject: [PATCH] #196: Centralized URLClient logic to the request package. Signed-off-by: Brandon Forster --- clients/command/client.go | 26 ++---- clients/coredata/event.go | 79 +++--------------- clients/coredata/reading.go | 35 ++------ clients/coredata/value_descriptor.go | 52 ++++-------- clients/general/client.go | 10 +-- clients/logger/logger.go | 11 ++- clients/metadata/addressable.go | 31 ++------ clients/metadata/command.go | 38 ++------- clients/metadata/device.go | 110 ++++++-------------------- clients/metadata/device_profile.go | 54 +++---------- clients/metadata/device_service.go | 31 ++------ clients/metadata/provision_watcher.go | 38 ++------- clients/notifications/client.go | 7 +- clients/request.go | 71 +++++++++++++---- clients/scheduler/interval.go | 42 ++-------- clients/scheduler/interval_action.go | 42 ++-------- 16 files changed, 173 insertions(+), 504 deletions(-) diff --git a/clients/command/client.go b/clients/command/client.go index 1b95a742..dced9c20 100644 --- a/clients/command/client.go +++ b/clients/command/client.go @@ -48,22 +48,12 @@ 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( @@ -71,13 +61,12 @@ func (cc *commandRestClient) GetDeviceCommandByNames( 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( @@ -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) } diff --git a/clients/coredata/event.go b/clients/coredata/event.go index 012563c0..ee939d37 100644 --- a/clients/coredata/event.go +++ b/clients/coredata/event.go @@ -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 } @@ -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 } @@ -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) { @@ -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 } diff --git a/clients/coredata/reading.go b/clients/coredata/reading.go index cd7bdef1..c96512f6 100644 --- a/clients/coredata/reading.go +++ b/clients/coredata/reading.go @@ -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 } @@ -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 } @@ -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( @@ -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) } diff --git a/clients/coredata/value_descriptor.go b/clients/coredata/value_descriptor.go index 00c73a58..b1d0e302 100644 --- a/clients/coredata/value_descriptor.go +++ b/clients/coredata/value_descriptor.go @@ -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 } @@ -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 } @@ -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 } @@ -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. diff --git a/clients/general/client.go b/clients/general/client.go index 3efc3d48..c9a5712e 100644 --- a/clients/general/client.go +++ b/clients/general/client.go @@ -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 } diff --git a/clients/logger/logger.go b/clients/logger/logger.go index 6897f333..12cc9733 100644 --- a/clients/logger/logger.go +++ b/clients/logger/logger.go @@ -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" ) @@ -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()) } diff --git a/clients/metadata/addressable.go b/clients/metadata/addressable.go index 0fbdaee0..410fe482 100644 --- a/clients/metadata/addressable.go +++ b/clients/metadata/addressable.go @@ -47,18 +47,12 @@ type addressableRestClient struct { // NewAddressableClient creates an instance of AddressableClient func NewAddressableClient(params types.EndpointParams, m interfaces.Endpointer) AddressableClient { - a := addressableRestClient{urlClient: urlclient.New(params, m)} - return &a + return &addressableRestClient{urlClient: urlclient.New(params, m)} } // Helper method to request and decode an addressable func (a *addressableRestClient) requestAddressable(urlSuffix string, ctx context.Context) (models.Addressable, error) { - urlPrefix, err := a.urlClient.Prefix() - if err != nil { - return models.Addressable{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, a.urlClient) if err != nil { return models.Addressable{}, err } @@ -69,12 +63,7 @@ func (a *addressableRestClient) requestAddressable(urlSuffix string, ctx context } func (a *addressableRestClient) Add(addr *models.Addressable, ctx context.Context) (string, error) { - serviceURL, err := a.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(serviceURL, addr, ctx) + return clients.PostJsonRequest("", addr, ctx, a.urlClient) } func (a *addressableRestClient) Addressable(id string, ctx context.Context) (models.Addressable, error) { @@ -86,19 +75,9 @@ func (a *addressableRestClient) AddressableForName(name string, ctx context.Cont } func (a *addressableRestClient) Update(addr models.Addressable, ctx context.Context) error { - serviceURL, err := a.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(serviceURL, addr, ctx) + return clients.UpdateRequest("", addr, ctx, a.urlClient) } func (a *addressableRestClient) Delete(id string, ctx context.Context) error { - serviceURL, err := a.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(serviceURL+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, a.urlClient) } diff --git a/clients/metadata/command.go b/clients/metadata/command.go index c77489c4..84ef64aa 100644 --- a/clients/metadata/command.go +++ b/clients/metadata/command.go @@ -49,18 +49,12 @@ type commandRestClient struct { // NewCommandClient creates an instance of CommandClient func NewCommandClient(params types.EndpointParams, m interfaces.Endpointer) CommandClient { - c := commandRestClient{urlClient: urlclient.New(params, m)} - return &c + return &commandRestClient{urlClient: urlclient.New(params, m)} } // Helper method to request and decode a command func (c *commandRestClient) requestCommand(urlSuffix string, ctx context.Context) (models.Command, error) { - urlPrefix, err := c.urlClient.Prefix() - if err != nil { - return models.Command{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, c.urlClient) if err != nil { return models.Command{}, err } @@ -72,12 +66,7 @@ func (c *commandRestClient) requestCommand(urlSuffix string, ctx context.Context // Helper method to request and decode a command slice func (c *commandRestClient) requestCommandSlice(urlSuffix string, ctx context.Context) ([]models.Command, error) { - urlPrefix, err := c.urlClient.Prefix() - if err != nil { - return nil, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, c.urlClient) if err != nil { return []models.Command{}, err } @@ -104,28 +93,13 @@ func (c *commandRestClient) CommandsForDeviceId(id string, ctx context.Context) } func (c *commandRestClient) Add(com *models.Command, ctx context.Context) (string, error) { - serviceURL, err := c.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(serviceURL, com, ctx) + return clients.PostJsonRequest("", com, ctx, c.urlClient) } func (c *commandRestClient) Update(com models.Command, ctx context.Context) error { - serviceURL, err := c.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(serviceURL, com, ctx) + return clients.UpdateRequest("", com, ctx, c.urlClient) } func (c *commandRestClient) Delete(id string, ctx context.Context) error { - serviceURL, err := c.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(serviceURL+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, c.urlClient) } diff --git a/clients/metadata/device.go b/clients/metadata/device.go index fc6b6d78..729b41cd 100644 --- a/clients/metadata/device.go +++ b/clients/metadata/device.go @@ -84,12 +84,7 @@ func NewDeviceClient(params types.EndpointParams, m interfaces.Endpointer) Devic // Helper method to request and decode a device func (d *deviceRestClient) requestDevice(urlSuffix string, ctx context.Context) (models.Device, error) { - urlPrefix, err := d.urlClient.Prefix() - if err != nil { - return models.Device{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, d.urlClient) if err != nil { return models.Device{}, err } @@ -101,12 +96,7 @@ func (d *deviceRestClient) requestDevice(urlSuffix string, ctx context.Context) // Helper method to request and decode a device slice func (d *deviceRestClient) requestDeviceSlice(urlSuffix string, ctx context.Context) ([]models.Device, error) { - urlPrefix, err := d.urlClient.Prefix() - if err != nil { - return nil, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, d.urlClient) if err != nil { return []models.Device{}, err } @@ -153,119 +143,67 @@ func (d *deviceRestClient) DevicesForProfileByName(profileName string, ctx conte } func (d *deviceRestClient) Add(dev *models.Device, ctx context.Context) (string, error) { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(deviceURL, dev, ctx) + return clients.PostJsonRequest("", dev, ctx, d.urlClient) } func (d *deviceRestClient) Update(dev models.Device, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(deviceURL, dev, ctx) + return clients.UpdateRequest("", dev, ctx, d.urlClient) } func (d *deviceRestClient) UpdateLastConnected(id string, time int64, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/"+id+"/lastconnected/"+strconv.FormatInt(time, 10), nil, ctx) + _, err := clients.PutRequest("/"+id+"/lastconnected/"+strconv.FormatInt(time, 10), nil, ctx, d.urlClient) return err } func (d *deviceRestClient) UpdateLastConnectedByName(name string, time int64, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/name/"+url.QueryEscape(name)+"/lastconnected/"+strconv.FormatInt(time, 10), nil, - ctx) + _, err := clients.PutRequest( + "/name/"+url.QueryEscape(name)+"/lastconnected/"+strconv.FormatInt(time, 10), + nil, + ctx, + d.urlClient, + ) return err } func (d *deviceRestClient) UpdateLastReported(id string, time int64, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/"+id+"/lastreported/"+strconv.FormatInt(time, 10), nil, ctx) + _, err := clients.PutRequest("/"+id+"/lastreported/"+strconv.FormatInt(time, 10), nil, ctx, d.urlClient) return err } func (d *deviceRestClient) UpdateLastReportedByName(name string, time int64, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/name/"+url.QueryEscape(name)+"/lastreported/"+strconv.FormatInt(time, 10), - nil, ctx) + _, err := clients.PutRequest( + "/name/"+url.QueryEscape(name)+"/lastreported/"+strconv.FormatInt(time, 10), + nil, + ctx, + d.urlClient, + ) return err } func (d *deviceRestClient) UpdateOpState(id string, opState string, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/"+id+"/opstate/"+opState, nil, ctx) + _, err := clients.PutRequest("/"+id+"/opstate/"+opState, nil, ctx, d.urlClient) return err } func (d *deviceRestClient) UpdateOpStateByName(name string, opState string, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/name/"+url.QueryEscape(name)+"/opstate/"+opState, nil, ctx) + _, err := clients.PutRequest("/name/"+url.QueryEscape(name)+"/opstate/"+opState, nil, ctx, d.urlClient) return err } func (d *deviceRestClient) UpdateAdminState(id string, adminState string, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/"+id+"/adminstate/"+adminState, nil, ctx) + _, err := clients.PutRequest("/"+id+"/adminstate/"+adminState, nil, ctx, d.urlClient) return err } func (d *deviceRestClient) UpdateAdminStateByName(name string, adminState string, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(deviceURL+"/name/"+url.QueryEscape(name)+"/adminstate/"+adminState, nil, ctx) + _, err := clients.PutRequest("/name/"+url.QueryEscape(name)+"/adminstate/"+adminState, nil, ctx, d.urlClient) return err } func (d *deviceRestClient) Delete(id string, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(deviceURL+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, d.urlClient) } func (d *deviceRestClient) DeleteByName(name string, ctx context.Context) error { - deviceURL, err := d.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(deviceURL+"/name/"+url.QueryEscape(name), ctx) + return clients.DeleteRequest("/name/"+url.QueryEscape(name), ctx, d.urlClient) } diff --git a/clients/metadata/device_profile.go b/clients/metadata/device_profile.go index 9536946d..d0f4a829 100644 --- a/clients/metadata/device_profile.go +++ b/clients/metadata/device_profile.go @@ -54,8 +54,7 @@ type deviceProfileRestClient struct { // Return an instance of DeviceProfileClient func NewDeviceProfileClient(params types.EndpointParams, m interfaces.Endpointer) DeviceProfileClient { - d := deviceProfileRestClient{urlClient: urlclient.New(params, m)} - return &d + return &deviceProfileRestClient{urlClient: urlclient.New(params, m)} } // Helper method to request and decode a device profile @@ -63,12 +62,7 @@ func (dpc *deviceProfileRestClient) requestDeviceProfile( urlSuffix string, ctx context.Context) (models.DeviceProfile, error) { - urlPrefix, err := dpc.urlClient.Prefix() - if err != nil { - return models.DeviceProfile{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, dpc.urlClient) if err != nil { return models.DeviceProfile{}, err } @@ -83,7 +77,7 @@ func (dpc *deviceProfileRestClient) requestDeviceProfileSlice( urlSuffix string, ctx context.Context) ([]models.DeviceProfile, error) { - data, err := clients.GetRequest(urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, dpc.urlClient) if err != nil { return []models.DeviceProfile{}, err } @@ -94,30 +88,15 @@ func (dpc *deviceProfileRestClient) requestDeviceProfileSlice( } func (dpc *deviceProfileRestClient) Add(dp *models.DeviceProfile, ctx context.Context) (string, error) { - serviceURL, err := dpc.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(serviceURL, dp, ctx) + return clients.PostJsonRequest("", dp, ctx, dpc.urlClient) } func (dpc *deviceProfileRestClient) Delete(id string, ctx context.Context) error { - serviceURL, err := dpc.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(serviceURL+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, dpc.urlClient) } func (dpc *deviceProfileRestClient) DeleteByName(name string, ctx context.Context) error { - serviceURL, err := dpc.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(serviceURL+"/name/"+url.QueryEscape(name), ctx) + return clients.DeleteRequest("/name/"+url.QueryEscape(name), ctx, dpc.urlClient) } func (dpc *deviceProfileRestClient) DeviceProfile(id string, ctx context.Context) (models.DeviceProfile, error) { @@ -133,30 +112,15 @@ func (dpc *deviceProfileRestClient) DeviceProfileForName(name string, ctx contex } func (dpc *deviceProfileRestClient) Update(dp models.DeviceProfile, ctx context.Context) error { - serviceURL, err := dpc.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(serviceURL, dp, ctx) + return clients.UpdateRequest("", dp, ctx, dpc.urlClient) } func (dpc *deviceProfileRestClient) Upload(yamlString string, ctx context.Context) (string, error) { - serviceURL, err := dpc.urlClient.Prefix() - if err != nil { - return "", err - } - ctx = context.WithValue(ctx, clients.ContentType, clients.ContentTypeYAML) - return clients.PostRequest(serviceURL+"/upload", []byte(yamlString), ctx) + return clients.PostRequest("/upload", []byte(yamlString), ctx, dpc.urlClient) } func (dpc *deviceProfileRestClient) UploadFile(yamlFilePath string, ctx context.Context) (string, error) { - serviceURL, err := dpc.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.UploadFileRequest(serviceURL+"/uploadfile", yamlFilePath, ctx) + return clients.UploadFileRequest("/uploadfile", yamlFilePath, ctx, dpc.urlClient) } diff --git a/clients/metadata/device_service.go b/clients/metadata/device_service.go index fe44dc35..7b50e721 100644 --- a/clients/metadata/device_service.go +++ b/clients/metadata/device_service.go @@ -44,49 +44,28 @@ type deviceServiceRestClient struct { // NewDeviceServiceClient creates an instance of DeviceServiceClient func NewDeviceServiceClient(params types.EndpointParams, m interfaces.Endpointer) DeviceServiceClient { - s := deviceServiceRestClient{urlClient: urlclient.New(params, m)} - return &s + return &deviceServiceRestClient{urlClient: urlclient.New(params, m)} } func (dsc *deviceServiceRestClient) UpdateLastConnected(id string, time int64, ctx context.Context) error { - serviceURL, err := dsc.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(serviceURL+"/"+id+"/lastconnected/"+strconv.FormatInt(time, 10), nil, ctx) + _, err := clients.PutRequest("/"+id+"/lastconnected/"+strconv.FormatInt(time, 10), nil, ctx, dsc.urlClient) return err } func (dsc *deviceServiceRestClient) UpdateLastReported(id string, time int64, ctx context.Context) error { - serviceURL, err := dsc.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PutRequest(serviceURL+"/"+id+"/lastreported/"+strconv.FormatInt(time, 10), nil, ctx) + _, err := clients.PutRequest("/"+id+"/lastreported/"+strconv.FormatInt(time, 10), nil, ctx, dsc.urlClient) return err } func (dsc *deviceServiceRestClient) Add(ds *models.DeviceService, ctx context.Context) (string, error) { - serviceURL, err := dsc.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(serviceURL, ds, ctx) + return clients.PostJsonRequest("", ds, ctx, dsc.urlClient) } func (dsc *deviceServiceRestClient) DeviceServiceForName( name string, ctx context.Context) (models.DeviceService, error) { - urlPrefix, err := dsc.urlClient.Prefix() - if err != nil { - return models.DeviceService{}, err - } - - data, err := clients.GetRequest(urlPrefix+"/name/"+name, ctx) + data, err := clients.GetRequest("/name/"+name, ctx, dsc.urlClient) if err != nil { return models.DeviceService{}, err } diff --git a/clients/metadata/provision_watcher.go b/clients/metadata/provision_watcher.go index ff77e696..5954716d 100644 --- a/clients/metadata/provision_watcher.go +++ b/clients/metadata/provision_watcher.go @@ -56,8 +56,7 @@ type provisionWatcherRestClient struct { // NewProvisionWatcherClient creates an instance of ProvisionWatcherClient func NewProvisionWatcherClient(params types.EndpointParams, m interfaces.Endpointer) ProvisionWatcherClient { - pw := provisionWatcherRestClient{urlClient: urlclient.New(params, m)} - return &pw + return &provisionWatcherRestClient{urlClient: urlclient.New(params, m)} } // Helper method to request and decode a provision watcher @@ -65,12 +64,7 @@ func (pwc *provisionWatcherRestClient) requestProvisionWatcher( urlSuffix string, ctx context.Context) (models.ProvisionWatcher, error) { - urlPrefix, err := pwc.urlClient.Prefix() - if err != nil { - return models.ProvisionWatcher{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, pwc.urlClient) if err != nil { return models.ProvisionWatcher{}, err } @@ -85,12 +79,7 @@ func (pwc *provisionWatcherRestClient) requestProvisionWatcherSlice( urlSuffix string, ctx context.Context) ([]models.ProvisionWatcher, error) { - urlPrefix, err := pwc.urlClient.Prefix() - if err != nil { - return nil, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, pwc.urlClient) if err != nil { return []models.ProvisionWatcher{}, err } @@ -129,28 +118,13 @@ func (pwc *provisionWatcherRestClient) ProvisionWatchersForProfileByName(profile } func (pwc *provisionWatcherRestClient) Add(dev *models.ProvisionWatcher, ctx context.Context) (string, error) { - serviceURL, err := pwc.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(serviceURL, dev, ctx) + return clients.PostJsonRequest("", dev, ctx, pwc.urlClient) } func (pwc *provisionWatcherRestClient) Update(dev models.ProvisionWatcher, ctx context.Context) error { - serviceURL, err := pwc.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(serviceURL, dev, ctx) + return clients.UpdateRequest("", dev, ctx, pwc.urlClient) } func (pwc *provisionWatcherRestClient) Delete(id string, ctx context.Context) error { - serviceURL, err := pwc.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(serviceURL+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, pwc.urlClient) } diff --git a/clients/notifications/client.go b/clients/notifications/client.go index 07649f1f..cce7a63b 100644 --- a/clients/notifications/client.go +++ b/clients/notifications/client.go @@ -79,11 +79,6 @@ func NewNotificationsClient(params types.EndpointParams, m interfaces.Endpointer } func (nc *notificationsRestClient) SendNotification(n Notification, ctx context.Context) error { - urlPrefix, err := nc.urlClient.Prefix() - if err != nil { - return err - } - - _, err = clients.PostJsonRequest(urlPrefix, n, ctx) + _, err := clients.PostJsonRequest("", n, ctx, nc.urlClient) return err } diff --git a/clients/request.go b/clients/request.go index 3003c50e..cf0b8d9b 100644 --- a/clients/request.go +++ b/clients/request.go @@ -27,6 +27,7 @@ import ( "path/filepath" "strconv" + "github.com/edgexfoundry/go-mod-core-contracts/clients/interfaces" "github.com/edgexfoundry/go-mod-core-contracts/clients/types" ) @@ -45,8 +46,13 @@ func makeRequest(req *http.Request) (*http.Response, error) { } // Helper method to make the get request and return the body -func GetRequest(url string, ctx context.Context) ([]byte, error) { - req, err := http.NewRequest(http.MethodGet, url, nil) +func GetRequest(urlSuffix string, ctx context.Context, urlClient interfaces.URLClient) ([]byte, error) { + urlPrefix, err := urlClient.Prefix() + if err != nil { + return nil, err + } + + req, err := http.NewRequest(http.MethodGet, urlPrefix+urlSuffix, nil) if err != nil { return nil, err } @@ -74,8 +80,9 @@ func GetRequest(url string, ctx context.Context) ([]byte, error) { } // Helper method to make the count request -func CountRequest(url string, ctx context.Context) (int, error) { - data, err := GetRequest(url, ctx) +func CountRequest(urlSuffix string, ctx context.Context, urlClient interfaces.URLClient) (int, error) { + // do not get URLPrefix here since GetRequest does it + data, err := GetRequest(urlSuffix, ctx, urlClient) if err != nil { return 0, err } @@ -88,7 +95,12 @@ func CountRequest(url string, ctx context.Context) (int, error) { } // Helper method to make the post JSON request and return the body -func PostJsonRequest(url string, data interface{}, ctx context.Context) (string, error) { +func PostJsonRequest( + urlSuffix string, + data interface{}, + ctx context.Context, + urlClient interfaces.URLClient) (string, error) { + jsonStr, err := json.Marshal(data) if err != nil { return "", err @@ -96,17 +108,23 @@ func PostJsonRequest(url string, data interface{}, ctx context.Context) (string, ctx = context.WithValue(ctx, ContentType, ContentTypeJSON) - return PostRequest(url, jsonStr, ctx) + // do not get URLPrefix here since PostRequest does it + return PostRequest(urlSuffix, jsonStr, ctx, urlClient) } // Helper method to make the post request and return the body -func PostRequest(url string, data []byte, ctx context.Context) (string, error) { +func PostRequest(urlSuffix string, data []byte, ctx context.Context, urlClient interfaces.URLClient) (string, error) { + urlPrefix, err := urlClient.Prefix() + if err != nil { + return "", err + } + content := FromContext(ContentType, ctx) if content == "" { content = ContentTypeJSON } - req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(data)) + req, err := http.NewRequest(http.MethodPost, urlPrefix+urlSuffix, bytes.NewReader(data)) if err != nil { return "", err } @@ -136,7 +154,11 @@ func PostRequest(url string, data []byte, ctx context.Context) (string, error) { } // Helper method to make a post request in order to upload a file and return the request body -func UploadFileRequest(url string, filePath string, ctx context.Context) (string, error) { +func UploadFileRequest( + urlSuffix string, + filePath string, + ctx context.Context, urlClient interfaces.URLClient) (string, error) { + fileContents, err := ioutil.ReadFile(filePath) if err != nil { return "", err @@ -155,7 +177,12 @@ func UploadFileRequest(url string, filePath string, ctx context.Context) (string } writer.Close() - req, err := http.NewRequest(http.MethodPost, url, body) + urlPrefix, err := urlClient.Prefix() + if err != nil { + return "", err + } + + req, err := http.NewRequest(http.MethodPost, urlPrefix+urlSuffix, body) if err != nil { return "", err } @@ -185,23 +212,28 @@ func UploadFileRequest(url string, filePath string, ctx context.Context) (string } // Helper method to make the update request -func UpdateRequest(url string, data interface{}, ctx context.Context) error { +func UpdateRequest(urlSuffix string, data interface{}, ctx context.Context, urlClient interfaces.URLClient) error { jsonStr, err := json.Marshal(data) if err != nil { return err } - _, err = PutRequest(url, jsonStr, ctx) + // do not get URLPrefix here since PutRequest does it + _, err = PutRequest(urlSuffix, jsonStr, ctx, urlClient) return err } // Helper method to make the put request -func PutRequest(url string, body []byte, ctx context.Context) (string, error) { +func PutRequest(urlSuffix string, body []byte, ctx context.Context, urlClient interfaces.URLClient) (string, error) { var err error var req *http.Request + urlPrefix, err := urlClient.Prefix() + if err != nil { + return "", err + } if body != nil { - req, err = http.NewRequest(http.MethodPut, url, bytes.NewReader(body)) + req, err = http.NewRequest(http.MethodPut, urlPrefix+urlSuffix, bytes.NewReader(body)) content := FromContext(ContentType, ctx) if content == "" { @@ -209,7 +241,7 @@ func PutRequest(url string, body []byte, ctx context.Context) (string, error) { } req.Header.Set(ContentType, content) } else { - req, err = http.NewRequest(http.MethodPut, url, nil) + req, err = http.NewRequest(http.MethodPut, urlPrefix+urlSuffix, nil) } if err != nil { return "", err @@ -239,8 +271,13 @@ func PutRequest(url string, body []byte, ctx context.Context) (string, error) { } // Helper method to make the delete request -func DeleteRequest(url string, ctx context.Context) error { - req, err := http.NewRequest(http.MethodDelete, url, nil) +func DeleteRequest(urlSuffix string, ctx context.Context, urlClient interfaces.URLClient) error { + urlPrefix, err := urlClient.Prefix() + if err != nil { + return err + } + + req, err := http.NewRequest(http.MethodDelete, urlPrefix+urlSuffix, nil) if err != nil { return err } diff --git a/clients/scheduler/interval.go b/clients/scheduler/interval.go index 229bfc67..3ec2d9f4 100644 --- a/clients/scheduler/interval.go +++ b/clients/scheduler/interval.go @@ -55,30 +55,15 @@ func NewIntervalClient(params types.EndpointParams, m interfaces.Endpointer) Int } func (ic *intervalRestClient) Add(interval *models.Interval, ctx context.Context) (string, error) { - urlPrefix, err := ic.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(urlPrefix, interval, ctx) + return clients.PostJsonRequest("", interval, ctx, ic.urlClient) } func (ic *intervalRestClient) Delete(id string, ctx context.Context) error { - urlPrefix, err := ic.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(urlPrefix+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, ic.urlClient) } func (ic *intervalRestClient) DeleteByName(name string, ctx context.Context) error { - urlPrefix, err := ic.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(urlPrefix+"/name/"+url.QueryEscape(name), ctx) + return clients.DeleteRequest("/name/"+url.QueryEscape(name), ctx, ic.urlClient) } func (ic *intervalRestClient) Interval(id string, ctx context.Context) (models.Interval, error) { @@ -94,22 +79,12 @@ func (ic *intervalRestClient) Intervals(ctx context.Context) ([]models.Interval, } func (ic *intervalRestClient) Update(interval models.Interval, ctx context.Context) error { - urlPrefix, err := ic.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(urlPrefix, interval, ctx) + return clients.UpdateRequest("", interval, ctx, ic.urlClient) } // helper request and decode an interval func (ic *intervalRestClient) requestInterval(urlSuffix string, ctx context.Context) (models.Interval, error) { - urlPrefix, err := ic.urlClient.Prefix() - if err != nil { - return models.Interval{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, ic.urlClient) if err != nil { return models.Interval{}, err } @@ -125,12 +100,7 @@ func (ic *intervalRestClient) requestInterval(urlSuffix string, ctx context.Cont // helper returns a slice of intervals func (ic *intervalRestClient) requestIntervalSlice(urlSuffix string, ctx context.Context) ([]models.Interval, error) { - urlPrefix, err := ic.urlClient.Prefix() - if err != nil { - return []models.Interval{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, ic.urlClient) if err != nil { return []models.Interval{}, err } diff --git a/clients/scheduler/interval_action.go b/clients/scheduler/interval_action.go index bae18ea5..b920fe42 100644 --- a/clients/scheduler/interval_action.go +++ b/clients/scheduler/interval_action.go @@ -60,12 +60,7 @@ func (iac *intervalActionRestClient) requestIntervalAction( urlSuffix string, ctx context.Context) (models.IntervalAction, error) { - urlPrefix, err := iac.urlClient.Prefix() - if err != nil { - return models.IntervalAction{}, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, iac.urlClient) if err != nil { return models.IntervalAction{}, err } @@ -84,12 +79,7 @@ func (iac *intervalActionRestClient) requestIntervalActionSlice( urlSuffix string, ctx context.Context) ([]models.IntervalAction, error) { - urlPrefix, err := iac.urlClient.Prefix() - if err != nil { - return nil, err - } - - data, err := clients.GetRequest(urlPrefix+urlSuffix, ctx) + data, err := clients.GetRequest(urlSuffix, ctx, iac.urlClient) if err != nil { return []models.IntervalAction{}, err } @@ -104,30 +94,15 @@ func (iac *intervalActionRestClient) requestIntervalActionSlice( } func (iac *intervalActionRestClient) Add(ia *models.IntervalAction, ctx context.Context) (string, error) { - url, err := iac.urlClient.Prefix() - if err != nil { - return "", err - } - - return clients.PostJsonRequest(url, ia, ctx) + return clients.PostJsonRequest("", ia, ctx, iac.urlClient) } func (iac *intervalActionRestClient) Delete(id string, ctx context.Context) error { - urlPrefix, err := iac.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(urlPrefix+"/id/"+id, ctx) + return clients.DeleteRequest("/id/"+id, ctx, iac.urlClient) } func (iac *intervalActionRestClient) DeleteByName(name string, ctx context.Context) error { - urlPrefix, err := iac.urlClient.Prefix() - if err != nil { - return err - } - - return clients.DeleteRequest(urlPrefix+"/name/"+url.QueryEscape(name), ctx) + return clients.DeleteRequest("/name/"+url.QueryEscape(name), ctx, iac.urlClient) } func (iac *intervalActionRestClient) IntervalAction(id string, ctx context.Context) (models.IntervalAction, error) { @@ -147,10 +122,5 @@ func (iac *intervalActionRestClient) IntervalActionsForTargetByName(name string, } func (iac *intervalActionRestClient) Update(ia models.IntervalAction, ctx context.Context) error { - url, err := iac.urlClient.Prefix() - if err != nil { - return err - } - - return clients.UpdateRequest(url, ia, ctx) + return clients.UpdateRequest("", ia, ctx, iac.urlClient) }