You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@iotdb.apache.org by "CRZbulabula (via GitHub)" <gi...@apache.org> on 2023/11/02 03:51:28 UTC
Re: [PR] [IOTDB-6186] Grafana does not support group by time and level [iotdb]
CRZbulabula commented on code in PR #11338:
URL: https://github.com/apache/iotdb/pull/11338#discussion_r1379559530
##########
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java:
##########
@@ -359,4 +359,92 @@ public void variableTest() {
fail(e.getMessage());
}
}
+
+ @Test
+ public void expressionWithAggGroupByTimeTest() {
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+ rightInsertTablet(httpClient);
+
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
+ String sql =
+ "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by([1635232143960,1635232153960),1s)\"}";
+ httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
+ response = httpClient.execute(httpPost);
+ HttpEntity responseEntity = response.getEntity();
+ String message = EntityUtils.toString(responseEntity, "utf-8");
+ ObjectMapper mapper = new ObjectMapper();
+ Map map = mapper.readValue(message, Map.class);
+ List<Long> timestampsResult = (List<Long>) map.get("timestamps");
+ List<Long> expressionsResult = (List<Long>) map.get("expressions");
+ List<List<Object>> valuesResult = (List<List<Object>>) map.get("values");
Review Comment:
Don't use magic string, use private static constant instead. Maybe these strings have already been defined in IoTDBConstant.
##########
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java:
##########
@@ -359,4 +359,92 @@ public void variableTest() {
fail(e.getMessage());
}
}
+
+ @Test
+ public void expressionWithAggGroupByTimeTest() {
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+ rightInsertTablet(httpClient);
+
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
+ String sql =
+ "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by([1635232143960,1635232153960),1s)\"}";
+ httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
+ response = httpClient.execute(httpPost);
+ HttpEntity responseEntity = response.getEntity();
+ String message = EntityUtils.toString(responseEntity, "utf-8");
+ ObjectMapper mapper = new ObjectMapper();
+ Map map = mapper.readValue(message, Map.class);
+ List<Long> timestampsResult = (List<Long>) map.get("timestamps");
+ List<Long> expressionsResult = (List<Long>) map.get("expressions");
+ List<List<Object>> valuesResult = (List<List<Object>>) map.get("values");
+ Assert.assertTrue(map.size() > 0);
+ Assert.assertTrue(timestampsResult.size() == 10);
+ Assert.assertTrue(valuesResult.size() == 1);
+ Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0)));
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } finally {
+ try {
+ if (response != null) {
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void expressionWithAggGroupByLevelTest() {
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+ rightInsertTablet(httpClient);
+
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
+ String sql =
+ "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by level = 1\"}";
Review Comment:
Don't use magic string, use private static constant instead.
##########
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java:
##########
@@ -359,4 +359,92 @@ public void variableTest() {
fail(e.getMessage());
}
}
+
+ @Test
+ public void expressionWithAggGroupByTimeTest() {
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+ rightInsertTablet(httpClient);
+
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
+ String sql =
+ "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by([1635232143960,1635232153960),1s)\"}";
Review Comment:
Don't use magic string, use private static constant instead.
##########
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java:
##########
@@ -359,4 +359,92 @@ public void variableTest() {
fail(e.getMessage());
}
}
+
+ @Test
+ public void expressionWithAggGroupByTimeTest() {
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+ rightInsertTablet(httpClient);
+
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
+ String sql =
+ "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by([1635232143960,1635232153960),1s)\"}";
+ httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
+ response = httpClient.execute(httpPost);
+ HttpEntity responseEntity = response.getEntity();
+ String message = EntityUtils.toString(responseEntity, "utf-8");
+ ObjectMapper mapper = new ObjectMapper();
+ Map map = mapper.readValue(message, Map.class);
+ List<Long> timestampsResult = (List<Long>) map.get("timestamps");
+ List<Long> expressionsResult = (List<Long>) map.get("expressions");
+ List<List<Object>> valuesResult = (List<List<Object>>) map.get("values");
+ Assert.assertTrue(map.size() > 0);
+ Assert.assertTrue(timestampsResult.size() == 10);
+ Assert.assertTrue(valuesResult.size() == 1);
+ Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0)));
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } finally {
+ try {
+ if (response != null) {
+ response.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ public void expressionWithAggGroupByLevelTest() {
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
+ rightInsertTablet(httpClient);
+
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
+ String sql =
+ "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by level = 1\"}";
+ httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
+ response = httpClient.execute(httpPost);
+ HttpEntity responseEntity = response.getEntity();
+ String message = EntityUtils.toString(responseEntity, "utf-8");
+ ObjectMapper mapper = new ObjectMapper();
+ Map map = mapper.readValue(message, Map.class);
+ List<Long> timestampsResult = (List<Long>) map.get("timestamps");
+ List<Long> expressionsResult = (List<Long>) map.get("expressions");
+ List<List<Object>> valuesResult = (List<List<Object>>) map.get("values");
Review Comment:
Don't use magic string, use private static constant instead. Maybe these strings have already been defined in IoTDBConstant.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: reviews-unsubscribe@iotdb.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org