Browse Source

Merge pull request #15054 from dashevchenko/timeseriesHistoryApiFix

Fixed getTimeseries API (/{entityType}/{entityId}/values/timeseries)
pull/15056/head
Viacheslav Klimov 5 months ago
committed by GitHub
parent
commit
c9041fbbfa
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
  2. 23
      application/src/test/java/org/thingsboard/server/controller/TelemetryControllerTest.java

2
application/src/main/java/org/thingsboard/server/controller/TelemetryController.java

@ -284,7 +284,7 @@ public class TelemetryController extends BaseController {
+ MARKDOWN_CODE_BLOCK_END
+ "\n\n" + INVALID_ENTITY_ID_OR_ENTITY_TYPE_DESCRIPTION + TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@GetMapping(value = "/{entityType}/{entityId}/values/timeseries", params = {"keys", "startTs", "endTs"})
@GetMapping(value = "/{entityType}/{entityId}/values/timeseries", params = {"startTs", "endTs"})
public DeferredResult<ResponseEntity> getTimeseries(
@Parameter(description = ENTITY_TYPE_PARAM_DESCRIPTION, required = true, schema = @Schema(defaultValue = "DEVICE")) @PathVariable("entityType") String entityType,
@Parameter(description = ENTITY_ID_PARAM_DESCRIPTION, required = true) @PathVariable("entityId") String entityIdStr,

23
application/src/test/java/org/thingsboard/server/controller/TelemetryControllerTest.java

@ -102,24 +102,29 @@ public class TelemetryControllerTest extends AbstractControllerTest {
Assert.assertEquals(11L, thirdIntervalResult.get("value").asLong());
Assert.assertEquals(thirdIntervalTs, thirdIntervalResult.get("ts").asLong());
result = doGetAsync("/api/plugins/telemetry/DEVICE/" + device.getId() +
ObjectNode resultByMonth = doGetAsync("/api/plugins/telemetry/DEVICE/" + device.getId() +
"/values/timeseries?keys=t&startTs={startTs}&endTs={endTs}&agg={agg}&intervalType={intervalType}&timeZone={timeZone}",
ObjectNode.class, startTs, endTs, "SUM", "MONTH", "Europe/Kyiv");
Assert.assertNotNull(result);
Assert.assertNotNull(result.get("t"));
Assert.assertEquals(1, result.get("t").size());
Assert.assertNotNull(resultByMonth);
Assert.assertNotNull(resultByMonth.get("t"));
Assert.assertEquals(1, resultByMonth.get("t").size());
var monthResult = result.get("t").get(0);
var monthResult = resultByMonth.get("t").get(0);
Assert.assertEquals(22L, monthResult.get("value").asLong());
Assert.assertEquals(middleOfTheInterval, monthResult.get("ts").asLong());
// get all latest (without keys parameter)
ObjectNode allLatest = doGetAsync("/api/plugins/telemetry/DEVICE/" + device.getId() +
// check timeseries history with key parameter (instead of keys) has the same result as with keys parameter
ObjectNode resultByKey = doGetAsync("/api/plugins/telemetry/DEVICE/" + device.getId() +
"/values/timeseries?key=t&startTs={startTs}&endTs={endTs}&agg={agg}&intervalType={intervalType}&timeZone={timeZone}",
ObjectNode.class, startTs, endTs, "SUM", "WEEK_ISO", "Europe/Kyiv");
Assert.assertEquals(result, resultByKey);
// check timeseries history without keys and key results into empty object
ObjectNode resultWithoutKeyAndKeys = doGetAsync("/api/plugins/telemetry/DEVICE/" + device.getId() +
"/values/timeseries?startTs={startTs}&endTs={endTs}&agg={agg}&intervalType={intervalType}&timeZone={timeZone}",
ObjectNode.class, startTs, endTs, "SUM", "WEEK_ISO", "Europe/Kyiv");
Assert.assertNotNull(allLatest);
Assert.assertNotNull(allLatest.get("t"));
Assert.assertTrue(resultWithoutKeyAndKeys.isEmpty());
}
@Test

Loading…
Cancel
Save