Skip to content

Commit 4476c2f

Browse files
authored
feat: Allow event reading query to return numeric value (#5234)
* feat: Allow event reading query to return numeric value Allow event reading query to return numeric value instead of string Signed-off-by: bruce <[email protected]> * refactor: Refactor the array parsing function Refactor the array parsing function and update the swagger file. Signed-off-by: bruce <[email protected]> --------- Signed-off-by: bruce <[email protected]>
1 parent cf03c0e commit 4476c2f

File tree

12 files changed

+354
-103
lines changed

12 files changed

+354
-103
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/blang/semver/v4 v4.0.0
77
github.com/eclipse/paho.mqtt.golang v1.5.0
88
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.1.0-dev.31
9-
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.1.0-dev.12
9+
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.1.0-dev.14
1010
github.com/edgexfoundry/go-mod-messaging/v4 v4.1.0-dev.13
1111
github.com/edgexfoundry/go-mod-secrets/v4 v4.1.0-dev.4
1212
github.com/fxamacker/cbor/v2 v2.9.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ github.com/edgexfoundry/go-mod-bootstrap/v4 v4.1.0-dev.31 h1:YTGd985lXEySEt76d/y
7676
github.com/edgexfoundry/go-mod-bootstrap/v4 v4.1.0-dev.31/go.mod h1:sQKOtdQlVuRzo06mDgNbJeyT/9QV94LlaY5wO1MsycU=
7777
github.com/edgexfoundry/go-mod-configuration/v4 v4.1.0-dev.12 h1:sW0dy9juPYPOwgwZAq1riDhJ96ivZBV9bdn+qWeeWO0=
7878
github.com/edgexfoundry/go-mod-configuration/v4 v4.1.0-dev.12/go.mod h1:8av7ex+XGeQHXQe/qyCdZ6g9AYWAYGRkkeFK0TKbiOQ=
79-
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.1.0-dev.12 h1:y5DmnfDWSzkil3n/mOM3geNlObQw59U75901R4s0a94=
80-
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.1.0-dev.12/go.mod h1:amP1pD+VT+LkOJ5nryqYubgeBWBJTnqsq5sA/uKIyo0=
79+
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.1.0-dev.14 h1:jAKaThg8zx5pwqcHGQ1o6BCQwZ0l9bDUYE3PqqlK1xs=
80+
github.com/edgexfoundry/go-mod-core-contracts/v4 v4.1.0-dev.14/go.mod h1:amP1pD+VT+LkOJ5nryqYubgeBWBJTnqsq5sA/uKIyo0=
8181
github.com/edgexfoundry/go-mod-messaging/v4 v4.1.0-dev.13 h1:rIG8wnB5YpaoT2sfXzrKoNFxSXuvLYbfM/iG6ONYB24=
8282
github.com/edgexfoundry/go-mod-messaging/v4 v4.1.0-dev.13/go.mod h1:3G5kyVZFfn63u9st+D3reVTfifnERhWT12iX9lToOZM=
8383
github.com/edgexfoundry/go-mod-registry/v4 v4.1.0-dev.4 h1:xTQc2DpLTuaB2+sLuZzK3Mjg408e5Bchqe/sMhn0i30=

internal/core/data/application/event.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/edgexfoundry/go-mod-core-contracts/v4/models"
2222

2323
"github.com/edgexfoundry/edgex-go/internal/core/data/container"
24+
"github.com/edgexfoundry/edgex-go/internal/core/data/query"
2425
"github.com/edgexfoundry/edgex-go/internal/pkg/correlation"
2526
"github.com/edgexfoundry/edgex-go/internal/pkg/utils"
2627

@@ -188,83 +189,87 @@ func (a *CoreDataApp) DeleteEventsByDeviceName(deviceName string, dic *di.Contai
188189
}
189190

190191
// AllEvents query events by offset and limit
191-
func (a *CoreDataApp) AllEvents(offset int, limit int, dic *di.Container) (events []dtos.Event, totalCount uint32, err errors.EdgeX) {
192+
func (a *CoreDataApp) AllEvents(parms query.Parameters, dic *di.Container) (events []dtos.Event, totalCount uint32, err errors.EdgeX) {
192193
dbClient := container.DBClientFrom(dic.Get)
193194

194-
eventModels, err := dbClient.AllEvents(offset, limit)
195+
eventModels, err := dbClient.AllEvents(parms.Offset, parms.Limit)
195196
if err != nil {
196197
return events, totalCount, errors.NewCommonEdgeXWrapper(err)
197198
}
198199
events = make([]dtos.Event, len(eventModels))
199200
for i, e := range eventModels {
200201
events[i] = dtos.FromEventModelToDTO(e)
202+
processNumericReadings(parms.Numeric, events[i].Readings)
201203
}
202-
if offset < 0 {
204+
if parms.Offset < 0 {
203205
return events, 0, err // skip total count
204206
}
205207

206208
totalCount, err = dbClient.EventTotalCount()
207209
if err != nil {
208210
return events, totalCount, errors.NewCommonEdgeXWrapper(err)
209211
}
210-
cont, err := utils.CheckCountRange(totalCount, offset, limit)
212+
cont, err := utils.CheckCountRange(totalCount, parms.Offset, parms.Limit)
211213
if !cont {
212214
return []dtos.Event{}, totalCount, err
213215
}
216+
214217
return events, totalCount, nil
215218
}
216219

217220
// EventsByDeviceName query events with offset, limit and name
218-
func (a *CoreDataApp) EventsByDeviceName(offset int, limit int, name string, dic *di.Container) (events []dtos.Event, totalCount uint32, err errors.EdgeX) {
221+
func (a *CoreDataApp) EventsByDeviceName(parms query.Parameters, name string, dic *di.Container) (events []dtos.Event, totalCount uint32, err errors.EdgeX) {
219222
if name == "" {
220223
return events, totalCount, errors.NewCommonEdgeX(errors.KindContractInvalid, "name is empty", nil)
221224
}
222225
dbClient := container.DBClientFrom(dic.Get)
223226

224-
eventModels, err := dbClient.EventsByDeviceName(offset, limit, name)
227+
eventModels, err := dbClient.EventsByDeviceName(parms.Offset, parms.Limit, name)
225228
if err != nil {
226229
return events, totalCount, errors.NewCommonEdgeXWrapper(err)
227230
}
228231
events = make([]dtos.Event, len(eventModels))
229232
for i, e := range eventModels {
230233
events[i] = dtos.FromEventModelToDTO(e)
234+
processNumericReadings(parms.Numeric, events[i].Readings)
231235
}
232-
if offset < 0 {
236+
if parms.Offset < 0 {
233237
return events, 0, err // skip total count
234238
}
235239

236240
totalCount, err = dbClient.EventCountByDeviceName(name)
237241
if err != nil {
238242
return events, totalCount, errors.NewCommonEdgeXWrapper(err)
239243
}
240-
cont, err := utils.CheckCountRange(totalCount, offset, limit)
244+
cont, err := utils.CheckCountRange(totalCount, parms.Offset, parms.Limit)
241245
if !cont {
242246
return []dtos.Event{}, totalCount, err
243247
}
244248
return events, totalCount, nil
245249
}
246250

247251
// EventsByTimeRange query events with offset, limit and time range
248-
func (a *CoreDataApp) EventsByTimeRange(startTime int64, endTime int64, offset int, limit int, dic *di.Container) (events []dtos.Event, totalCount uint32, err errors.EdgeX) {
252+
func (a *CoreDataApp) EventsByTimeRange(parms query.Parameters, dic *di.Container) (events []dtos.Event, totalCount uint32, err errors.EdgeX) {
249253
dbClient := container.DBClientFrom(dic.Get)
250254

251-
eventModels, err := dbClient.EventsByTimeRange(startTime, endTime, offset, limit)
255+
eventModels, err := dbClient.EventsByTimeRange(parms.Start, parms.End, parms.Offset, parms.Limit)
252256
if err != nil {
253257
return events, totalCount, errors.NewCommonEdgeXWrapper(err)
254258
}
255259
events = make([]dtos.Event, len(eventModels))
256260
for i, e := range eventModels {
257261
events[i] = dtos.FromEventModelToDTO(e)
262+
processNumericReadings(parms.Numeric, events[i].Readings)
258263
}
259-
if offset < 0 {
264+
if parms.Offset < 0 {
260265
return events, 0, err // skip total count
261266
}
262267

263-
totalCount, err = dbClient.EventCountByTimeRange(startTime, endTime)
268+
totalCount, err = dbClient.EventCountByTimeRange(parms.Start, parms.End)
264269
if err != nil {
265270
return events, totalCount, errors.NewCommonEdgeXWrapper(err)
266271
}
267-
cont, err := utils.CheckCountRange(totalCount, offset, limit)
272+
cont, err := utils.CheckCountRange(totalCount, parms.Offset, parms.Limit)
268273
if !cont {
269274
return []dtos.Event{}, totalCount, err
270275
}

internal/core/data/application/event_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright (C) 2020-2021 IOTech Ltd
2+
// Copyright (C) 2020-2025 IOTech Ltd
33
//
44
// SPDX-License-Identifier: Apache-2.0
55

@@ -19,6 +19,7 @@ import (
1919
"github.com/edgexfoundry/edgex-go/internal/core/data/container"
2020
dbMock "github.com/edgexfoundry/edgex-go/internal/core/data/infrastructure/interfaces/mocks"
2121
"github.com/edgexfoundry/edgex-go/internal/core/data/mocks"
22+
"github.com/edgexfoundry/edgex-go/internal/core/data/query"
2223
pkgCommon "github.com/edgexfoundry/edgex-go/internal/pkg/common"
2324
"github.com/edgexfoundry/go-mod-bootstrap/v4/di"
2425
"github.com/edgexfoundry/go-mod-core-contracts/v4/common"
@@ -442,7 +443,12 @@ func TestEventsByTimeRange(t *testing.T) {
442443
for _, testCase := range tests {
443444
t.Run(testCase.name, func(t *testing.T) {
444445
app := NewCoreDataApp(dic)
445-
events, totalCount, err := app.EventsByTimeRange(testCase.start, testCase.end, testCase.offset, testCase.limit, dic)
446+
events, totalCount, err := app.EventsByTimeRange(query.Parameters{
447+
Start: testCase.start,
448+
End: testCase.end,
449+
Offset: testCase.offset,
450+
Limit: testCase.limit,
451+
}, dic)
446452
if testCase.errorExpected {
447453
require.Error(t, err)
448454
assert.NotEmpty(t, err.Error(), "Error message is empty")

0 commit comments

Comments
 (0)