Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 15 additions & 13 deletions clients/http/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package http

import (
"context"
"net/url"
"path"
"strconv"

Expand Down Expand Up @@ -68,15 +67,16 @@ func (ec *eventClient) Add(ctx context.Context, serviceName string, req requests
}

func (ec *eventClient) AllEvents(ctx context.Context, offset, limit int) (responses.MultiEventsResponse, errors.EdgeX) {
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
return ec.AllEventsWithQueryParams(ctx, offset, limit, nil)
}

func (ec *eventClient) AllEventsWithQueryParams(ctx context.Context, offset, limit int, queryParams map[string]string) (responses.MultiEventsResponse, errors.EdgeX) {
res := responses.MultiEventsResponse{}
baseUrl, err := clients.GetBaseUrl(ec.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, common.ApiAllEventRoute, requestParams, ec.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, common.ApiAllEventRoute, utils.ToRequestParameters(offset, limit, queryParams), ec.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
Expand Down Expand Up @@ -112,16 +112,17 @@ func (ec *eventClient) EventCountByDeviceName(ctx context.Context, name string)

func (ec *eventClient) EventsByDeviceName(ctx context.Context, name string, offset, limit int) (
responses.MultiEventsResponse, errors.EdgeX) {
return ec.EventsByDeviceNameWithQueryParams(ctx, name, offset, limit, nil)
}

func (ec *eventClient) EventsByDeviceNameWithQueryParams(ctx context.Context, name string, offset, limit int, queryParams map[string]string) (responses.MultiEventsResponse, errors.EdgeX) {
requestPath := path.Join(common.ApiEventRoute, common.Device, common.Name, name)
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiEventsResponse{}
baseUrl, err := clients.GetBaseUrl(ec.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, ec.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), ec.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
Expand All @@ -144,16 +145,17 @@ func (ec *eventClient) DeleteByDeviceName(ctx context.Context, name string) (dto

func (ec *eventClient) EventsByTimeRange(ctx context.Context, start, end int64, offset, limit int) (
responses.MultiEventsResponse, errors.EdgeX) {
return ec.EventsByTimeRangeWithQueryParams(ctx, start, end, offset, limit, nil)
}

func (ec *eventClient) EventsByTimeRangeWithQueryParams(ctx context.Context, start, end int64, offset, limit int, queryParams map[string]string) (responses.MultiEventsResponse, errors.EdgeX) {
requestPath := path.Join(common.ApiEventRoute, common.Start, strconv.FormatInt(start, 10), common.End, strconv.FormatInt(end, 10))
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiEventsResponse{}
baseUrl, err := clients.GetBaseUrl(ec.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, ec.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), ec.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
Expand Down
17 changes: 17 additions & 0 deletions clients/http/event_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (
"github.com/stretchr/testify/require"
)

var queryParameters = map[string]string{common.Numeric: common.ValueTrue}

func TestAddEvent(t *testing.T) {
serviceName := "serviceName"
event := dtos.Event{ProfileName: "profileName", DeviceName: "deviceName", SourceName: "sourceName"}
Expand All @@ -41,9 +43,14 @@ func TestQueryAllEvents(t *testing.T) {
defer ts.Close()

client := NewEventClient(ts.URL, NewNullAuthenticationInjector(), false)

res, err := client.AllEvents(context.Background(), 1, 10)
require.NoError(t, err)
assert.IsType(t, responses.MultiEventsResponse{}, res)

res, err = client.AllEventsWithQueryParams(context.Background(), 1, 10, queryParameters)
require.NoError(t, err)
assert.IsType(t, responses.MultiEventsResponse{}, res)
}

func TestQueryEventCount(t *testing.T) {
Expand Down Expand Up @@ -75,9 +82,14 @@ func TestQueryEventsByDeviceName(t *testing.T) {
defer ts.Close()

client := NewEventClient(ts.URL, NewNullAuthenticationInjector(), false)

res, err := client.EventsByDeviceName(context.Background(), deviceName, 1, 10)
require.NoError(t, err)
assert.IsType(t, responses.MultiEventsResponse{}, res)

res, err = client.EventsByDeviceNameWithQueryParams(context.Background(), deviceName, 1, 10, queryParameters)
require.NoError(t, err)
assert.IsType(t, responses.MultiEventsResponse{}, res)
}

func TestDeleteEventsByDeviceName(t *testing.T) {
Expand All @@ -100,9 +112,14 @@ func TestQueryEventsByTimeRange(t *testing.T) {
defer ts.Close()

client := NewEventClient(ts.URL, NewNullAuthenticationInjector(), false)

res, err := client.EventsByTimeRange(context.Background(), start, end, 1, 10)
require.NoError(t, err)
assert.IsType(t, responses.MultiEventsResponse{}, res)

res, err = client.EventsByTimeRangeWithQueryParams(context.Background(), start, end, 1, 10, queryParameters)
require.NoError(t, err)
assert.IsType(t, responses.MultiEventsResponse{}, res)
}

func TestDeleteEventsByAge(t *testing.T) {
Expand Down
74 changes: 40 additions & 34 deletions clients/http/reading.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package http

import (
"context"
"net/url"
"path"
"strconv"

Expand Down Expand Up @@ -46,15 +45,16 @@ func NewReadingClientWithUrlCallback(baseUrlFunc clients.ClientBaseUrlFunc, auth
}

func (rc readingClient) AllReadings(ctx context.Context, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
return rc.AllReadingsWithQueryParams(ctx, offset, limit, nil)
}

func (rc readingClient) AllReadingsWithQueryParams(ctx context.Context, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, common.ApiAllReadingRoute, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, common.ApiAllReadingRoute, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
Expand Down Expand Up @@ -89,51 +89,54 @@ func (rc readingClient) ReadingCountByDeviceName(ctx context.Context, name strin
}

func (rc readingClient) ReadingsByDeviceName(ctx context.Context, name string, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByDeviceNameWithQueryParams(ctx, name, offset, limit, nil)
}

func (rc readingClient) ReadingsByDeviceNameWithQueryParams(ctx context.Context, name string, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := path.Join(common.ApiReadingRoute, common.Device, common.Name, name)
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
return res, nil
}

func (rc readingClient) ReadingsByResourceName(ctx context.Context, name string, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByResourceNameWithQueryParams(ctx, name, offset, limit, nil)
}

func (rc readingClient) ReadingsByResourceNameWithQueryParams(ctx context.Context, name string, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := common.NewPathBuilder().EnableNameFieldEscape(rc.enableNameFieldEscape).
SetPath(common.ApiReadingRoute).SetPath(common.ResourceName).SetNameFieldPath(name).BuildPath()
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
return res, nil
}

func (rc readingClient) ReadingsByTimeRange(ctx context.Context, start, end int64, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByTimeRangeWithQueryParams(ctx, start, end, offset, limit, nil)
}

func (rc readingClient) ReadingsByTimeRangeWithQueryParams(ctx context.Context, start, end int64, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := path.Join(common.ApiReadingRoute, common.Start, strconv.FormatInt(start, 10), common.End, strconv.FormatInt(end, 10))
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
Expand All @@ -142,68 +145,71 @@ func (rc readingClient) ReadingsByTimeRange(ctx context.Context, start, end int6

// ReadingsByResourceNameAndTimeRange returns readings by resource name and specified time range. Readings are sorted in descending order of origin time.
func (rc readingClient) ReadingsByResourceNameAndTimeRange(ctx context.Context, name string, start, end int64, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByResourceNameAndTimeRangeWithQueryParams(ctx, name, start, end, offset, limit, nil)
}

func (rc readingClient) ReadingsByResourceNameAndTimeRangeWithQueryParams(ctx context.Context, name string, start, end int64, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := common.NewPathBuilder().EnableNameFieldEscape(rc.enableNameFieldEscape).
SetPath(common.ApiReadingRoute).SetPath(common.ResourceName).SetNameFieldPath(name).SetPath(common.Start).SetPath(strconv.FormatInt(start, 10)).SetPath(common.End).SetPath(strconv.FormatInt(end, 10)).BuildPath()
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
return res, nil
}

func (rc readingClient) ReadingsByDeviceNameAndResourceName(ctx context.Context, deviceName, resourceName string, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByDeviceNameAndResourceNameWithQueryParams(ctx, deviceName, resourceName, offset, limit, nil)
}

func (rc readingClient) ReadingsByDeviceNameAndResourceNameWithQueryParams(ctx context.Context, deviceName, resourceName string, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := common.NewPathBuilder().EnableNameFieldEscape(rc.enableNameFieldEscape).
SetPath(common.ApiReadingRoute).SetPath(common.Device).SetPath(common.Name).SetNameFieldPath(deviceName).SetPath(common.ResourceName).SetNameFieldPath(resourceName).BuildPath()
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
return res, nil

}

func (rc readingClient) ReadingsByDeviceNameAndResourceNameAndTimeRange(ctx context.Context, deviceName, resourceName string, start, end int64, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByDeviceNameAndResourceNameAndTimeRangeWithQueryParams(ctx, deviceName, resourceName, start, end, offset, limit, nil)
}

func (rc readingClient) ReadingsByDeviceNameAndResourceNameAndTimeRangeWithQueryParams(ctx context.Context, deviceName, resourceName string, start, end int64, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := common.NewPathBuilder().EnableNameFieldEscape(rc.enableNameFieldEscape).
SetPath(common.ApiReadingRoute).SetPath(common.Device).SetPath(common.Name).SetNameFieldPath(deviceName).SetPath(common.ResourceName).SetNameFieldPath(resourceName).
SetPath(common.Start).SetPath(strconv.FormatInt(start, 10)).SetPath(common.End).SetPath(strconv.FormatInt(end, 10)).BuildPath()
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
res := responses.MultiReadingsResponse{}
baseUrl, err := clients.GetBaseUrl(rc.baseUrlFunc)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, requestParams, rc.authInjector)
err = utils.GetRequest(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
return res, nil
}

func (rc readingClient) ReadingsByDeviceNameAndResourceNamesAndTimeRange(ctx context.Context, deviceName string, resourceNames []string, start, end int64, offset, limit int) (responses.MultiReadingsResponse, errors.EdgeX) {
return rc.ReadingsByDeviceNameAndResourceNamesAndTimeRangeWithQueryParams(ctx, deviceName, resourceNames, start, end, offset, limit, nil)
}

func (rc readingClient) ReadingsByDeviceNameAndResourceNamesAndTimeRangeWithQueryParams(ctx context.Context, deviceName string, resourceNames []string, start, end int64, offset, limit int, queryParams map[string]string) (responses.MultiReadingsResponse, errors.EdgeX) {
requestPath := common.NewPathBuilder().EnableNameFieldEscape(rc.enableNameFieldEscape).
SetPath(common.ApiReadingRoute).SetPath(common.Device).SetPath(common.Name).SetNameFieldPath(deviceName).
SetPath(common.Start).SetPath(strconv.FormatInt(start, 10)).SetPath(common.End).SetPath(strconv.FormatInt(end, 10)).BuildPath()
requestParams := url.Values{}
requestParams.Set(common.Offset, strconv.Itoa(offset))
requestParams.Set(common.Limit, strconv.Itoa(limit))
var queryPayload map[string]interface{}
if len(resourceNames) > 0 { // gosimple S1009: len(nil slice) == 0
queryPayload = make(map[string]interface{}, 1)
Expand All @@ -214,7 +220,7 @@ func (rc readingClient) ReadingsByDeviceNameAndResourceNamesAndTimeRange(ctx con
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
err = utils.GetRequestWithBodyRawData(ctx, &res, baseUrl, requestPath, requestParams, queryPayload, rc.authInjector)
err = utils.GetRequestWithBodyRawData(ctx, &res, baseUrl, requestPath, utils.ToRequestParameters(offset, limit, queryParams), queryPayload, rc.authInjector)
if err != nil {
return res, errors.NewCommonEdgeXWrapper(err)
}
Expand Down
Loading