This is an automated email from the ASF dual-hosted git repository. qiaojialin pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/iotdb-web-workbench.git
commit ff960d2e6461a99d1d18c2c735c71bb0941cb01b Author: loveher147 <[email protected]> AuthorDate: Thu May 26 14:48:03 2022 +0800 新增监控指标展示功能 - 该版本适配低于0.13版本的iotdb并提供数据库管理功能,但不提供监控管理(低于0.13版本iotdb不支持监控); - 仍然存在部分接口返回后端假数据,等待清华提供接口后替换为真实数据。 --- backend/pom.xml | 4 +- .../iotdb/admin/common/exception/ErrorCode.java | 4 + .../iotdb/admin/controller/FileController.java | 11 + .../iotdb/admin/controller/IotDBController.java | 15 +- .../admin/model/dto/AuthorityPrivilegeDTO.java | 1 + .../apache/iotdb/admin/model/vo/DataCountVO.java | 5 +- .../apache/iotdb/admin/service/IotDBService.java | 20 +- .../iotdb/admin/service/impl/IotDBServiceImpl.java | 1841 +++++++++++++++++++- backend/src/main/resources/sqlite/iotdb.db | Bin 36864 -> 53248 bytes 9 files changed, 1846 insertions(+), 55 deletions(-) diff --git a/backend/pom.xml b/backend/pom.xml index 45d3bea..e3fb378 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -145,7 +145,7 @@ <dependency> <groupId>org.apache.iotdb</groupId> <artifactId>iotdb-session</artifactId> - <version>0.12.1</version> + <version>0.12.5</version> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> @@ -157,7 +157,7 @@ <dependency> <groupId>org.apache.iotdb</groupId> <artifactId>iotdb-jdbc</artifactId> - <version>0.12.1</version> + <version>0.12.5</version> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> diff --git a/backend/src/main/java/org/apache/iotdb/admin/common/exception/ErrorCode.java b/backend/src/main/java/org/apache/iotdb/admin/common/exception/ErrorCode.java index 2084338..7e04593 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/common/exception/ErrorCode.java +++ b/backend/src/main/java/org/apache/iotdb/admin/common/exception/ErrorCode.java @@ -158,6 +158,10 @@ public class ErrorCode { public static final String SET_GROUP_FAIL = "IOTDB-0022"; public static final String SET_GROUP_FAIL_MSG = "Failed to create storage group"; + public static final String SET_GROUP_FAIL_EXISTS = "IOTDB-0095"; + public static final String SET_GROUP_FAIL__EXISTS_MSG = + "Failed to create storage group, the storage group already exists"; + public static final String DELETE_GROUP_FAIL = "IOTDB-0023"; public static final String DELETE_GROUP_FAIL_MSG = "Failed to delete storage group"; diff --git a/backend/src/main/java/org/apache/iotdb/admin/controller/FileController.java b/backend/src/main/java/org/apache/iotdb/admin/controller/FileController.java index ea0106b..33aea37 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/controller/FileController.java +++ b/backend/src/main/java/org/apache/iotdb/admin/controller/FileController.java @@ -115,6 +115,17 @@ public class FileController { return getResponseEntity(resource); } + @ApiOperation("Download the query log file") + @GetMapping("/downloadQueryLogFile") + public ResponseEntity<Resource> downloadQueryLogFile( + @RequestParam String SQLStatement, @RequestParam Long timeStamp) throws BaseException { + Resource resource = new ClassPathResource("file/[Fake]QueryLog.txt"); + if (!resource.exists()) { + throw new BaseException(ErrorCode.FILE_NOT_FOUND, ErrorCode.FILE_NOT_FOUND_MSG); + } + return getResponseEntity(resource); + } + private ResponseEntity<Resource> getResponseEntity(Resource resource) { String contentType = "application/octet-stream"; diff --git a/backend/src/main/java/org/apache/iotdb/admin/controller/IotDBController.java b/backend/src/main/java/org/apache/iotdb/admin/controller/IotDBController.java index 612816e..5b4d0d0 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/controller/IotDBController.java +++ b/backend/src/main/java/org/apache/iotdb/admin/controller/IotDBController.java @@ -85,10 +85,13 @@ public class IotDBController { @GetMapping("/dataModel") @ApiOperation("Get IoTDB data model") public BaseVO<DataModelVO> getDataModel( - @PathVariable("serverId") Integer serverId, HttpServletRequest request) throws BaseException { + @PathVariable("serverId") Integer serverId, + @RequestParam(value = "path", required = false, defaultValue = "root") String path, + HttpServletRequest request) + throws BaseException { check(request, serverId); Connection connection = connectionService.getById(serverId); - DataModelVO dataModelVO = iotDBService.getDataModel(connection); + DataModelVO dataModelVO = iotDBService.getDataModel(connection, path); return BaseVO.success("Get IoTDB data model successfully", dataModelVO); } @@ -164,7 +167,6 @@ public class IotDBController { checkTtl(ttl, ttlUnit); Integer groupId = groupDTO.getGroupId(); groupDTO.setGroupName(groupName); - List<String> groupNames = iotDBService.getAllStorageGroups(connection); if (groupId == null) { if (!groupNames.contains(groupDTO.getGroupName())) { @@ -1121,9 +1123,7 @@ public class IotDBController { private void checkParameter(String groupName) throws BaseException { String checkName = StringUtils.removeStart(groupName, "root").toLowerCase(); - if (!groupName.matches("^root\\.[^ ]+$") - || checkName.contains(".root.") - || checkName.matches("^[^ ]*\\.root$")) { + if (groupName.contains(".root.") || groupName.contains(".root")) { throw new BaseException(ErrorCode.NO_SUP_CONTAIN_ROOT, ErrorCode.NO_SUP_CONTAIN_ROOT_MSG); } if (checkName.contains(".as.") @@ -1229,6 +1229,9 @@ public class IotDBController { } private void checkTtl(Long ttl, String unit) throws BaseException { + if (ttl == null || unit == null) { + return; + } if (Long.MAX_VALUE / switchTime(unit) < ttl) { throw new BaseException(ErrorCode.TTL_OVER, ErrorCode.TTL_OVER_MSG); } diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/dto/AuthorityPrivilegeDTO.java b/backend/src/main/java/org/apache/iotdb/admin/model/dto/AuthorityPrivilegeDTO.java index 4a7ea78..ed3b8e1 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/model/dto/AuthorityPrivilegeDTO.java +++ b/backend/src/main/java/org/apache/iotdb/admin/model/dto/AuthorityPrivilegeDTO.java @@ -26,6 +26,7 @@ import java.util.List; @Data public class AuthorityPrivilegeDTO implements Serializable { + private List<String> privileges; private List<String> cancelPrivileges; diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataCountVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataCountVO.java index cdef28c..fc2c2e7 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataCountVO.java +++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataCountVO.java @@ -25,8 +25,9 @@ import java.io.Serializable; @Data public class DataCountVO implements Serializable { - private Integer groupCount; + private Integer storageGroupCount; private Integer deviceCount; - private Integer measurementCount; + private Integer monitorCount; private Integer dataCount; + private String version; } diff --git a/backend/src/main/java/org/apache/iotdb/admin/service/IotDBService.java b/backend/src/main/java/org/apache/iotdb/admin/service/IotDBService.java index 70cd585..0b050d7 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/service/IotDBService.java +++ b/backend/src/main/java/org/apache/iotdb/admin/service/IotDBService.java @@ -30,7 +30,7 @@ import java.util.Set; public interface IotDBService { DataCountVO getDataCount(Connection connection) throws BaseException; - DataModelVO getDataModel(Connection connection) throws BaseException; + DataModelVO getDataModel(Connection connection, String path) throws BaseException; List<String> getAllStorageGroups(Connection connection) throws BaseException; @@ -162,4 +162,22 @@ public interface IotDBService { void updatePwd(Connection connection, IotDBUser iotDBUser) throws BaseException; void stopQuery(Integer serverId, Long timestamp) throws BaseException; + + QueryInfoDTO getQueryInfoListByQueryClassificationId( + Connection connection, + Integer queryClassificationId, + Integer pageSize, + Integer pageNum, + String filterString, + Long startTime, + Long endTime, + Integer executionResult) + throws BaseException; + + MetricsDataForDiagramVO getMetricDataByMetricId(Connection connection, Integer metricId) + throws BaseException; + + List<QueryMetricsVO> getTopQueryMetricsData(); + + List<QueryMetricsVO> getSlowQueryMetricsData(); } diff --git a/backend/src/main/java/org/apache/iotdb/admin/service/impl/IotDBServiceImpl.java b/backend/src/main/java/org/apache/iotdb/admin/service/impl/IotDBServiceImpl.java index 803c4f5..e904462 100644 --- a/backend/src/main/java/org/apache/iotdb/admin/service/impl/IotDBServiceImpl.java +++ b/backend/src/main/java/org/apache/iotdb/admin/service/impl/IotDBServiceImpl.java @@ -23,6 +23,7 @@ import org.apache.iotdb.admin.common.exception.BaseException; import org.apache.iotdb.admin.common.exception.ErrorCode; import org.apache.iotdb.admin.model.dto.*; import org.apache.iotdb.admin.model.entity.Connection; +import org.apache.iotdb.admin.model.metricsDo.QueryDataDo; import org.apache.iotdb.admin.model.vo.*; import org.apache.iotdb.admin.service.IotDBService; import org.apache.iotdb.rpc.IoTDBConnectionException; @@ -38,9 +39,11 @@ import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.lang.reflect.Field; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.Date; @@ -96,22 +99,43 @@ public class IotDBServiceImpl implements IotDBService { SessionPool sessionPool = null; try { sessionPool = getSessionPool(connection); + String iotdbVersion = executeQueryOneValue(sessionPool, "show version"); + logger.info("执行成功,获得iotdb版本号:" + iotdbVersion); + int versionFlag = 0; + if (iotdbVersion.contains("0.12.")) { + versionFlag = 12; + } else if (iotdbVersion.contains("0.13.") || iotdbVersion.contains("0.14.")) { + versionFlag = 13; + } String groupCountStr = executeQueryOneValue(sessionPool, "count storage group"); int groupCount = Integer.parseInt(groupCountStr); String deviceCountStr = executeQueryOneValue(sessionPool, "count devices"); int deviceCount = Integer.parseInt(deviceCountStr); String measurementCountStr = executeQueryOneValue(sessionPool, "count timeseries"); int measurementCount = Integer.parseInt(measurementCountStr); - List<String> dataCountList = executeQueryOneLine(sessionPool, "select count(*) from root"); + List<String> dataCountList = new ArrayList<>(); + if (versionFlag == 13) { + dataCountList = executeQueryOneLine(sessionPool, "select count(*) from root.**"); + } else if (versionFlag == 12) { + try { + dataCountList = executeQueryOneLine(sessionPool, "select count(*) from root.*"); + // dataCountList = executeQueryOneLine(sessionPool, "select count(*) from + // root.*"); + } catch (BaseException e) { + logger.error("发生错误!!!"); + e.printStackTrace(); + } + } int dataCount = 0; for (String dataCountStr : dataCountList) { dataCount += Integer.parseInt(dataCountStr); } DataCountVO dataCountVO = new DataCountVO(); - dataCountVO.setGroupCount(groupCount); + dataCountVO.setStorageGroupCount(groupCount); dataCountVO.setDeviceCount(deviceCount); - dataCountVO.setMeasurementCount(measurementCount); + dataCountVO.setMonitorCount(measurementCount); dataCountVO.setDataCount(dataCount); + dataCountVO.setVersion(iotdbVersion); return dataCountVO; } catch (NumberFormatException e) { throw new BaseException(ErrorCode.GET_DATA_COUNT_FAIL, ErrorCode.GET_DATA_COUNT_FAIL_MSG); @@ -121,20 +145,39 @@ public class IotDBServiceImpl implements IotDBService { } @Override - public DataModelVO getDataModel(Connection connection) throws BaseException { + public DataModelVO getDataModel(Connection connection, String path) throws BaseException { SessionPool sessionPool = null; try { sessionPool = getSessionPool(connection); - DataModelVO root = new DataModelVO("root"); - assembleDataModel(root, "root", sessionPool); - root.setGroupCount(getGroupCount(sessionPool)); - root.setPath("root"); + DataModelVO root = new DataModelVO(path); + setNodeInfo(root, sessionPool, path); + List<DataModelVO> childrenDataModel = getChildrenDataModel(root, path, sessionPool); + root.setChildren(childrenDataModel); + root.setGroupCount(path.equals("root") ? getGroupCount(sessionPool) : null); + root.setPath(path); return root; } finally { closeSessionPool(sessionPool); } } + private List<DataModelVO> getChildrenDataModel( + DataModelVO root, String path, SessionPool sessionPool) throws BaseException { + Set<String> childrenNode = getChildrenNode(path, sessionPool); + if (childrenNode == null) { + return null; + } + List<DataModelVO> childrenlist = new ArrayList<>(); + + // TODO: 大量IO + for (String child : childrenNode) { + DataModelVO childNode = new DataModelVO(child); + setNodeInfo(childNode, sessionPool, path + "." + child); + childrenlist.add(childNode); + } + return childrenlist; + } + private void assembleDataModel(DataModelVO node, String prefixPath, SessionPool sessionPool) throws BaseException { Set<String> childrenNode = getChildrenNode(prefixPath, sessionPool); @@ -152,22 +195,51 @@ public class IotDBServiceImpl implements IotDBService { private Set<String> getChildrenNode(String prefixPath, SessionPool sessionPool) throws BaseException { String sql = "show storage group " + prefixPath; + sql = sql.replace(',', '.'); List<String> children = executeQueryOneColumn(sessionPool, sql); - if (children.size() == 0 || (children.size() == 1 && children.get(0).equals(prefixPath))) { + String dealedPrefixPath = prefixPath.replace(',', '.'); + if (children.size() == 0 + || (children.size() == 1 && children.get(0).equals(dealedPrefixPath))) { sql = "show timeseries " + prefixPath; + sql = sql.replace(',', '.'); children = executeQueryOneColumn(sessionPool, sql); - if (children.size() == 0 || (children.size() == 1 && children.get(0).equals(prefixPath))) { + if (children.size() == 0 + || (children.size() == 1 && children.get(0).equals(dealedPrefixPath))) { return null; } } Set<String> childrenNode = new HashSet<>(); for (String child : children) { + child = dealChildNode(child); child = StringUtils.removeStart(child, prefixPath + ".").split("\\.")[0]; childrenNode.add(child); } return childrenNode; } + private String dealChildNode(String child) { + int left = 0, right = 0; + int length = child.length(); + while (right < length) { + char tempChar = child.charAt(right); + if (tempChar != '"' && left == right) { + left++; + right++; + } else if ((tempChar == '"' && left == right) || (tempChar != '"' && left != right)) { + right++; + } else if (tempChar == '"' && left != right) { + String preSubStr = child.substring(0, left); + String midSubStr = child.substring(left, right + 1); + String tailSubStr = child.substring(right + 1, length); + String newMidSubStr = midSubStr.replace('.', ','); + child = preSubStr + newMidSubStr + tailSubStr; + right++; + left = right; + } + } + return child; + } + private Integer getGroupCount(SessionPool sessionPool) throws BaseException { String sql = "count storage group"; String value = executeQueryOneValue(sessionPool, sql); @@ -176,7 +248,19 @@ public class IotDBServiceImpl implements IotDBService { } private Integer getDeviceCount(SessionPool sessionPool, String groupName) throws BaseException { - String sql = "count devices " + groupName; + String iotdbVersion = executeQueryOneValue(sessionPool, "show version"); + int versionFlag = 0; + if (iotdbVersion.contains("0.12.")) { + versionFlag = 12; + } else if (iotdbVersion.contains("0.13.") || iotdbVersion.contains("0.14.")) { + versionFlag = 13; + } + String sql = null; + if (versionFlag == 13) { + sql = "count devices " + groupName + ".**"; + } else if (versionFlag == 12) { + sql = "count devices " + groupName; + } String value = executeQueryOneValue(sessionPool, sql); Integer count = Integer.valueOf(value); return count; @@ -184,7 +268,19 @@ public class IotDBServiceImpl implements IotDBService { private Integer getMeasurementsCount(SessionPool sessionPool, String deviceName) throws BaseException { - String sql = "count timeseries " + deviceName; + String iotdbVersion = executeQueryOneValue(sessionPool, "show version"); + int versionFlag = 0; + if (iotdbVersion.contains("0.12.")) { + versionFlag = 12; + } else if (iotdbVersion.contains("0.13.") || iotdbVersion.contains("0.14.")) { + versionFlag = 13; + } + String sql = null; + if (versionFlag == 13) { + sql = "count timeseries " + deviceName + ".**"; + } else if (versionFlag == 12) { + sql = "count timeseries " + deviceName; + } String value = executeQueryOneValue(sessionPool, sql); Integer count = Integer.valueOf(value); return count; @@ -231,6 +327,7 @@ public class IotDBServiceImpl implements IotDBService { private void setNodeInfo(DataModelVO dataModelVO, SessionPool sessionPool, String path) throws BaseException { + path = path.replace(',', '.'); dataModelVO.setPath(path); if (isGroup(sessionPool, path)) { dataModelVO.setDeviceCount(getDeviceCount(sessionPool, path)); @@ -258,14 +355,24 @@ public class IotDBServiceImpl implements IotDBService { + timeseries.substring(index + 1) + ") from " + timeseries.substring(0, index); - String value = executeQueryOneValue(sessionPool, sql); + String value = "0"; + try { + value = executeQueryOneValue(sessionPool, sql); + } catch (BaseException e) { + e.printStackTrace(); + } return value; } private Integer getOneDataCount(SessionPool sessionPool, String timeseries) throws BaseException { int index = timeseries.lastIndexOf("."); String sql = "select count(*) from " + timeseries.substring(0, index); - String countStr = executeQueryOneLine(sessionPool, sql, "count(" + timeseries + ")"); + String countStr = "0"; + try { + countStr = executeQueryOneLine(sessionPool, sql, "count(" + timeseries + ")"); + } catch (BaseException e) { + e.printStackTrace(); + } return Integer.parseInt(countStr); } @@ -349,7 +456,14 @@ public class IotDBServiceImpl implements IotDBService { public void saveStorageGroup(Connection connection, String groupName) throws BaseException { SessionPool sessionPool = getSessionPool(connection); try { - sessionPool.setStorageGroup(groupName); + String iotdbVersion = executeQueryOneValue(sessionPool, "show version"); + int versionFlag = 0; + if (iotdbVersion.contains("0.12.")) { + sessionPool.executeNonQueryStatement("set storage group " + groupName); + } else if (iotdbVersion.contains("0.13.") || iotdbVersion.contains("0.14.")) { + sessionPool.executeNonQueryStatement("create storage group " + groupName); + } + // sessionPool.setStorageGroup(groupName); } catch (StatementExecutionException e) { if (e.getStatusCode() == 602) { throw new BaseException(ErrorCode.NO_PRI_SET_GROUP, ErrorCode.NO_PRI_SET_GROUP_MSG); @@ -362,7 +476,8 @@ public class IotDBServiceImpl implements IotDBService { logger.error(e.getMessage()); } catch (IoTDBConnectionException e) { logger.error(e.getMessage()); - throw new BaseException(ErrorCode.SET_GROUP_FAIL, ErrorCode.SET_GROUP_FAIL_MSG); + throw new BaseException( + ErrorCode.SET_GROUP_FAIL_EXISTS, ErrorCode.SET_GROUP_FAIL__EXISTS_MSG); } finally { closeSessionPool(sessionPool); } @@ -907,15 +1022,29 @@ public class IotDBServiceImpl implements IotDBService { String name, String privilegesStr) throws BaseException { - String sql = - operationType - + " " - + userOrRole - + " " - + name - + " privileges '" - + privilegesStr - + "' on root"; + String show_version = executeQueryOneValue(sessionPool, "show version"); + String sql = null; + if (show_version.contains("0.13") || show_version.contains("0.14")) { + sql = + operationType + + " " + + userOrRole + + " " + + name + + " privileges " + + privilegesStr + + " on root"; + } else if (show_version.contains("0.12")) { + sql = + operationType + + " " + + userOrRole + + " " + + name + + " privileges '" + + privilegesStr + + "' on root"; + } try { sessionPool.executeNonQueryStatement(sql); } catch (StatementExecutionException e) { @@ -1444,7 +1573,9 @@ public class IotDBServiceImpl implements IotDBService { private void upsertMeasurementAlias(SessionPool sessionPool, String timeseries, String alias) throws BaseException { - if (alias == null || "null".equals(alias) || StringUtils.isBlank(alias)) { + // 需要改为" "值。 + if (alias == null || "null".equals(alias)) { + // if (alias == null || "null".equals(alias) || StringUtils.isBlank(alias)) { return; } if (alias.matches("^as$") || alias.matches("^\\d+$") || alias.matches("^like$")) { @@ -2305,6 +2436,1610 @@ public class IotDBServiceImpl implements IotDBService { throw new BaseException(ErrorCode.NO_QUERY, ErrorCode.NO_QUERY_MSG); } + @Override + public QueryInfoDTO getQueryInfoListByQueryClassificationId( + Connection connection, + Integer queryClassificationId, + Integer pageSize, + Integer pageNum, + String filterString, + Long startTime, + Long endTime, + Integer executionResult) + throws BaseException { + SessionPool sessionPool = getSessionPool(connection); + // TODO 【清华】需要获得查询语句详细信息的接口 + QueryInfoDTO queryInfoDTO = new QueryInfoDTO(); + // FakeData + // *********************************************************** + List<QueryDataVO> queryDataVOS = new ArrayList<>(); + switch (queryClassificationId % 2) { + case 0: + for (int i = 0; i < 200; i++) { + QueryData1VO queryDataVO = new QueryData1VO(); + long currentTimeMillis = System.currentTimeMillis(); + queryDataVO.setId(i); + queryDataVO.setStatement( + "select * from root._metric.'127.0.0.1:8086'.'process_cpu_time'.'name=process'"); + queryDataVO.setRunningTime(currentTimeMillis); + queryDataVO.setIsSlowQuery(i % 2 == 0 ? false : true); + queryDataVO.setTotalTime((int) (currentTimeMillis % 100)); + queryDataVO.setAnalysisTime((int) (currentTimeMillis % 50)); + queryDataVO.setPrecompiledTime((int) (currentTimeMillis % 30)); + queryDataVO.setOptimizedTime((int) (currentTimeMillis % 20)); + queryDataVO.setExecutionTime((int) (currentTimeMillis % 10)); + queryDataVO.setExecutionResult(i % 2 == 0 ? 1 : 2); + queryDataVOS.add(queryDataVO); + } + break; + case 1: + for (int i = 0; i < 200; i++) { + QueryDataVO queryDataVO = new QueryDataVO(); + long currentTimeMillis = System.currentTimeMillis(); + queryDataVO.setId(i); + queryDataVO.setStatement( + "select * from root._metric.'127.0.0.1:8086'.'process_cpu_time'.'name=process'"); + queryDataVO.setRunningTime(currentTimeMillis); + queryDataVO.setIsSlowQuery(i % 2 == 0 ? false : true); + queryDataVO.setTotalTime((int) (currentTimeMillis % 100)); + queryDataVO.setAnalysisTime((int) (currentTimeMillis % 50)); + queryDataVO.setExecutionTime((int) (currentTimeMillis % 10)); + queryDataVO.setExecutionResult(i % 2 == 0 ? 1 : 2); + queryDataVOS.add(queryDataVO); + } + break; + } + // *********************************************************** + int queryDataVOSSize = queryDataVOS.size(); + int count = 0; + Long latestTimeStamp = 0L; + List<QueryDataVO> filteredQueryDataVOS = new ArrayList<>(); + if (queryDataVOSSize > 0) { + if ((filterString != null && filterString.length() != 0) + || (startTime != -1) + || (endTime != -1) + || (executionResult != null)) { + QueryDataDo queryDataDo = + filterQueryData( + queryDataVOS, pageSize, pageNum, filterString, startTime, endTime, executionResult); + + count = queryDataDo.getCount(); + latestTimeStamp = queryDataDo.getLatestTimeStamp(); + filteredQueryDataVOS = queryDataDo.getQueryDataVOs(); + } else { + for (QueryDataVO queryDataVO : queryDataVOS) { + count++; + latestTimeStamp = Math.max(latestTimeStamp, queryDataVO.getRunningTime()); + if (count >= pageSize * (pageNum - 1) + 1 && count <= pageSize * pageNum) { + filteredQueryDataVOS.add(queryDataVO); + } + } + } + } + String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS"; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + List<QueryDataStrVO> filteredQueryDataStrVOS = new ArrayList<>(); + if (queryClassificationId % 2 == 0) { + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + QueryDataStrVO1 queryDataStrVO = new QueryDataStrVO1(); + BeanUtils.copyProperties(queryDataVO, queryDataStrVO); + queryDataStrVO.setRunningTime(simpleDateFormat.format(queryDataVO.getRunningTime())); + filteredQueryDataStrVOS.add(queryDataStrVO); + } + } else { + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + QueryDataStrVO queryDataStrVO = new QueryDataStrVO(); + BeanUtils.copyProperties(queryDataVO, queryDataStrVO); + queryDataStrVO.setRunningTime(simpleDateFormat.format(queryDataVO.getRunningTime())); + filteredQueryDataStrVOS.add(queryDataStrVO); + } + } + + queryInfoDTO.setTotalCount(count); + queryInfoDTO.setLatestRunningTime(latestTimeStamp); + queryInfoDTO.setFilteredQueryDataStrVOSList(filteredQueryDataStrVOS); + queryInfoDTO.setTotalPage(count % pageSize == 0 ? count / pageSize : count / pageSize + 1); + return queryInfoDTO; + } + + @Override + public MetricsDataForDiagramVO getMetricDataByMetricId(Connection connection, Integer metricId) + throws BaseException { + SessionPool sessionPool = getSessionPool(connection); + SessionDataSetWrapper sessionDataSetWrapper = null; + String url = connection.getHost(); + Integer port = 0; + // TODO: 【清华】端口8086实际上是动态的从connection表中获取,但iotdb-0.13.0存在bug,导致写入的指标位置不对,等待修复,先暂时写死 + String show_version = executeQueryOneValue(sessionPool, "show version"); + if (show_version.contains("0.13") || show_version.contains("0.14")) { + port = 8086; + } else if (show_version.contains("0.12")) { + port = 6667; + url = "0.0.0.0"; + } + // TODO: 指标先写死,后面根据指标Id判断用哪个timeSeries拼串为SQL查得值。 + MetricsChartDataVO metricsChartDataVO = null; + MetricsDataForDiagramVO metricsDataForDiagramVO = new MetricsDataForDiagramVO(); + switch (metricId) { + case 0: + metricsChartDataVO = getJVMGCDiagramData(sessionPool, sessionDataSetWrapper, url, port); + break; + case 1: + metricsChartDataVO = getJVMLoadDiagramData(sessionPool, sessionDataSetWrapper, url, port); + break; + case 2: + metricsChartDataVO = getYGCTimeAndReason(sessionPool, sessionDataSetWrapper, url, port); + break; + case 3: + metricsChartDataVO = getFGCTimeAndReason(sessionPool, sessionDataSetWrapper, url, port); + break; + case 4: + metricsChartDataVO = getVariableThreadCount(sessionPool, sessionDataSetWrapper, url, port); + break; + case 5: + metricsChartDataVO = + getVariableTimeThreadCount(sessionPool, sessionDataSetWrapper, url, port); + break; + case 6: + metricsChartDataVO = getMemUsedSize(sessionPool, sessionDataSetWrapper, url, port); + break; + case 7: + metricsChartDataVO = getBufferSize(sessionPool, sessionDataSetWrapper, url, port); + break; + case 8: + metricsChartDataVO = getCPUTime(sessionPool, sessionDataSetWrapper, url, port); + break; + case 9: + metricsChartDataVO = getDiskIO(sessionPool, sessionDataSetWrapper, url, port); + break; + case 10: + metricsChartDataVO = getFileCount(sessionPool, sessionDataSetWrapper, url, port); + break; + case 11: + metricsChartDataVO = getFileSize(sessionPool, sessionDataSetWrapper, url, port); + break; + case 12: + metricsChartDataVO = getWriteCount(sessionPool, sessionDataSetWrapper, url, port); + break; + case 13: + metricsChartDataVO = getQueryCount(sessionPool, sessionDataSetWrapper, url, port); + break; + case 14: + metricsChartDataVO = getInterfaceCount(sessionPool, sessionDataSetWrapper, url, port); + break; + case 15: + metricsChartDataVO = getInterfaceTime(sessionPool, sessionDataSetWrapper, url, port); + break; + } + metricsDataForDiagramVO.setChartData(metricsChartDataVO); + metricsDataForDiagramVO.setMetricId(metricId); + return metricsDataForDiagramVO; + } + + private MetricsChartDataVO getInterfaceTime( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + // TODO:假数据 + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("Interface1"); + metricnameList.add("Interface2"); + metricnameList.add("Interface3"); + List<String> unitList = new ArrayList<>(); + unitList.add("ms"); + List<String> interface1 = new ArrayList<>(); + List<String> interface2 = new ArrayList<>(); + List<String> interface3 = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.memory.used\".\"id=mapped\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + // try { + // sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + // int batchSize = sessionDataSetWrapper.getBatchSize(); + // if (batchSize > 0) { + // int count = 0; + // while (sessionDataSetWrapper.hasNext()) { + // count++; + // RowRecord rowRecord = sessionDataSetWrapper.next(); + // long timestamp = rowRecord.getTimestamp(); + // List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + // String pattern1 = "HH:mm"; + // SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + // timeList.add(simpleDateFormat1.format(timestamp)); + // buffer.add( + // getNetFileSizeDescription( + // (getLongFromString( + // (Float.parseFloat(fields1.get(0).toString()) + // + Float.parseFloat(fields1.get(1).toString())) + // + "")))); + // } + // Collections.reverse(buffer); + // Collections.reverse(max); + // dataList.put(metricnameList.get(0), buffer); + // dataList.put(metricnameList.get(1), max); + // Collections.reverse(timeList); + // metricsChartDataVO.setTimeList(timeList); + // metricsChartDataVO.setMetricnameList(metricnameList); + // metricsChartDataVO.setDataList(dataList); + // } + // } catch (IoTDBConnectionException e) { + // e.printStackTrace(); + // } catch (StatementExecutionException e) { + // e.printStackTrace(); + // } + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + long timestamp = System.currentTimeMillis(); + for (int i = 0; i < 16; i++) { + timeList.add(simpleDateFormat1.format(timestamp)); + timestamp -= 60000; + interface1.add("300"); + interface2.add("200"); + interface3.add("500"); + } + Collections.reverse(timeList); + Collections.reverse(interface1); + Collections.reverse(interface2); + Collections.reverse(interface3); + dataList.put(metricnameList.get(0), interface1); + dataList.put(metricnameList.get(1), interface2); + dataList.put(metricnameList.get(2), interface3); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + return metricsChartDataVO; + } + + private MetricsChartDataVO getInterfaceCount( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("Close Operation"); + metricnameList.add("Execute Query Statement"); + metricnameList.add("Execute Statement"); + metricnameList.add("Get Properties"); + metricnameList.add("Insert Record"); + metricnameList.add("Close Session"); + metricnameList.add("Open Session"); + metricnameList.add("Request Statement Id"); + metricnameList.add("Fetch Results"); + List<String> unitList = new ArrayList<>(); + unitList.add("ms"); + List<String> close_Operation = new ArrayList<>(); + List<String> execute_Query_Statement = new ArrayList<>(); + List<String> execute_Statement = new ArrayList<>(); + List<String> get_Properties = new ArrayList<>(); + List<String> insert_Record = new ArrayList<>(); + List<String> close_Session = new ArrayList<>(); + List<String> open_Session = new ArrayList<>(); + List<String> request_Statement_Id = new ArrayList<>(); + List<String> fetch_Results = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=closeOperation\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=executeQueryStatement\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=executeStatement\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=getProperties\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=insertRecord\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=closeSession\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=openSession\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=requestStatementId\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"entry_total\".\"name=fetchResults\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + close_Operation.add(fields1.get(0).toString()); + execute_Query_Statement.add(fields1.get(1).toString()); + execute_Statement.add(fields1.get(2).toString()); + get_Properties.add(fields1.get(3).toString()); + insert_Record.add(fields1.get(4).toString()); + close_Session.add(fields1.get(5).toString()); + open_Session.add(fields1.get(6).toString()); + request_Statement_Id.add(fields1.get(7).toString()); + fetch_Results.add(fields1.get(8).toString()); + } + Collections.reverse(close_Operation); + Collections.reverse(execute_Query_Statement); + Collections.reverse(execute_Statement); + Collections.reverse(get_Properties); + Collections.reverse(insert_Record); + Collections.reverse(close_Session); + Collections.reverse(open_Session); + Collections.reverse(request_Statement_Id); + Collections.reverse(fetch_Results); + dataList.put(metricnameList.get(0), close_Operation); + dataList.put(metricnameList.get(1), execute_Query_Statement); + dataList.put(metricnameList.get(2), execute_Statement); + dataList.put(metricnameList.get(3), get_Properties); + dataList.put(metricnameList.get(4), insert_Record); + dataList.put(metricnameList.get(5), close_Session); + dataList.put(metricnameList.get(6), open_Session); + dataList.put(metricnameList.get(7), request_Statement_Id); + dataList.put(metricnameList.get(8), fetch_Results); + Collections.reverse(timeList); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getQueryCount( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + // TODO:假数据 + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("success"); + metricnameList.add("fail"); + metricnameList.add("total"); + List<String> unitList = new ArrayList<>(); + unitList.add("ms"); + List<String> success = new ArrayList<>(); + List<String> fail = new ArrayList<>(); + List<String> total = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.memory.used\".\"id=mapped\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + // try { + // sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + // int batchSize = sessionDataSetWrapper.getBatchSize(); + // if (batchSize > 0) { + // int count = 0; + // while (sessionDataSetWrapper.hasNext()) { + // count++; + // RowRecord rowRecord = sessionDataSetWrapper.next(); + // long timestamp = rowRecord.getTimestamp(); + // List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + // String pattern1 = "HH:mm"; + // SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + // timeList.add(simpleDateFormat1.format(timestamp)); + // buffer.add( + // getNetFileSizeDescription( + // (getLongFromString( + // (Float.parseFloat(fields1.get(0).toString()) + // + Float.parseFloat(fields1.get(1).toString())) + // + "")))); + // } + // Collections.reverse(buffer); + // Collections.reverse(max); + // dataList.put(metricnameList.get(0), buffer); + // dataList.put(metricnameList.get(1), max); + // Collections.reverse(timeList); + // metricsChartDataVO.setTimeList(timeList); + // metricsChartDataVO.setMetricnameList(metricnameList); + // metricsChartDataVO.setDataList(dataList); + // } + // } catch (IoTDBConnectionException e) { + // e.printStackTrace(); + // } catch (StatementExecutionException e) { + // e.printStackTrace(); + // } + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + long timestamp = System.currentTimeMillis(); + for (int i = 0; i < 16; i++) { + timeList.add(simpleDateFormat1.format(timestamp)); + timestamp -= 60000; + success.add("100"); + fail.add("200"); + total.add("300"); + } + Collections.reverse(timeList); + Collections.reverse(success); + Collections.reverse(fail); + Collections.reverse(total); + dataList.put(metricnameList.get(0), success); + dataList.put(metricnameList.get(1), fail); + dataList.put(metricnameList.get(2), total); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + return metricsChartDataVO; + } + + private MetricsChartDataVO getWriteCount( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + // TODO:假数据 + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("success"); + metricnameList.add("fail"); + metricnameList.add("total"); + List<String> unitList = new ArrayList<>(); + unitList.add("ms"); + List<String> success = new ArrayList<>(); + List<String> fail = new ArrayList<>(); + List<String> total = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.memory.used\".\"id=mapped\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + // try { + // sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + // int batchSize = sessionDataSetWrapper.getBatchSize(); + // if (batchSize > 0) { + // int count = 0; + // while (sessionDataSetWrapper.hasNext()) { + // count++; + // RowRecord rowRecord = sessionDataSetWrapper.next(); + // long timestamp = rowRecord.getTimestamp(); + // List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + // String pattern1 = "HH:mm"; + // SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + // timeList.add(simpleDateFormat1.format(timestamp)); + // buffer.add( + // getNetFileSizeDescription( + // (getLongFromString( + // (Float.parseFloat(fields1.get(0).toString()) + // + Float.parseFloat(fields1.get(1).toString())) + // + "")))); + // } + // Collections.reverse(buffer); + // Collections.reverse(max); + // dataList.put(metricnameList.get(0), buffer); + // dataList.put(metricnameList.get(1), max); + // Collections.reverse(timeList); + // metricsChartDataVO.setTimeList(timeList); + // metricsChartDataVO.setMetricnameList(metricnameList); + // metricsChartDataVO.setDataList(dataList); + // } + // } catch (IoTDBConnectionException e) { + // e.printStackTrace(); + // } catch (StatementExecutionException e) { + // e.printStackTrace(); + // } + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + long timestamp = System.currentTimeMillis(); + for (int i = 0; i < 16; i++) { + timeList.add(simpleDateFormat1.format(timestamp)); + timestamp -= 60000; + success.add("10"); + fail.add("20"); + total.add("30"); + } + Collections.reverse(timeList); + Collections.reverse(success); + Collections.reverse(fail); + Collections.reverse(total); + dataList.put(metricnameList.get(0), success); + dataList.put(metricnameList.get(1), fail); + dataList.put(metricnameList.get(2), total); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + return metricsChartDataVO; + } + + private MetricsChartDataVO getFileSize( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("wal"); + metricnameList.add("tsfile_seq"); + metricnameList.add("tsfile_unseq"); + metricnameList.add("total"); + List<String> unitList = new ArrayList<>(); + unitList.add("MB"); + List<String> wal = new ArrayList<>(); + List<String> tsfile_seq = new ArrayList<>(); + List<String> tsfile_unseq = new ArrayList<>(); + List<String> total = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"file_size\".\"name=wal\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"file_size\".\"name=seq\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"file_size\".\"name=unseq\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + wal.add(getNetFileSizeDescription((long) Float.parseFloat(fields1.get(0).toString()))); + tsfile_seq.add( + getNetFileSizeDescription((long) Float.parseFloat(fields1.get(1).toString()))); + tsfile_unseq.add( + getNetFileSizeDescription((long) Float.parseFloat(fields1.get(2).toString()))); + total.add( + getNetFileSizeDescription( + (long) + (Float.parseFloat(fields1.get(0).toString()) + + Float.parseFloat(fields1.get(1).toString()) + + Float.parseFloat(fields1.get(2).toString())))); + } + Collections.reverse(timeList); + Collections.reverse(wal); + Collections.reverse(tsfile_seq); + Collections.reverse(tsfile_unseq); + Collections.reverse(total); + dataList.put(metricnameList.get(0), wal); + dataList.put(metricnameList.get(1), tsfile_seq); + dataList.put(metricnameList.get(2), tsfile_unseq); + dataList.put(metricnameList.get(3), total); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getFileCount( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("wal"); + metricnameList.add("tsfile_seq"); + metricnameList.add("tsfile_unseq"); + metricnameList.add("total"); + List<String> unitList = new ArrayList<>(); + unitList.add("个"); + List<String> wal = new ArrayList<>(); + List<String> tsfile_seq = new ArrayList<>(); + List<String> tsfile_unseq = new ArrayList<>(); + List<String> total = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"file_count\".\"name=wal\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"file_count\".\"name=seq\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"file_count\".\"name=unseq\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + String s1 = fields1.get(0).toString(); + wal.add(s1.substring(0, s1.indexOf('.'))); + String s2 = fields1.get(1).toString(); + tsfile_seq.add(s2.substring(0, s2.indexOf('.'))); + String s3 = fields1.get(2).toString(); + tsfile_unseq.add(s3.substring(0, s3.indexOf('.'))); + total.add( + (Integer.parseInt(s1.substring(0, s1.indexOf('.'))) + + Integer.parseInt(s2.substring(0, s2.indexOf('.')))) + + Integer.parseInt(s3.substring(0, s3.indexOf('.'))) + + "个"); + } + Collections.reverse(timeList); + Collections.reverse(wal); + Collections.reverse(tsfile_seq); + Collections.reverse(tsfile_unseq); + Collections.reverse(total); + dataList.put(metricnameList.get(0), wal); + dataList.put(metricnameList.get(1), tsfile_seq); + dataList.put(metricnameList.get(2), tsfile_unseq); + dataList.put(metricnameList.get(3), total); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getDiskIO( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + // TODO : 假数据 等待接口 + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("io"); + List<String> unitList = new ArrayList<>(); + unitList.add("次/s"); + List<String> io = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.memory.used\".\"id=mapped\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + // try { + // sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + // int batchSize = sessionDataSetWrapper.getBatchSize(); + // if (batchSize > 0) { + // int count = 0; + // while (sessionDataSetWrapper.hasNext()) { + // count++; + // RowRecord rowRecord = sessionDataSetWrapper.next(); + // long timestamp = rowRecord.getTimestamp(); + // List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + // String pattern1 = "HH:mm"; + // SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + // timeList.add(simpleDateFormat1.format(timestamp)); + // buffer.add( + // getNetFileSizeDescription( + // (getLongFromString( + // (Float.parseFloat(fields1.get(0).toString()) + // + Float.parseFloat(fields1.get(1).toString())) + // + "")))); + // } + // Collections.reverse(buffer); + // Collections.reverse(max); + // dataList.put(metricnameList.get(0), buffer); + // dataList.put(metricnameList.get(1), max); + // Collections.reverse(timeList); + // metricsChartDataVO.setTimeList(timeList); + // metricsChartDataVO.setMetricnameList(metricnameList); + // metricsChartDataVO.setDataList(dataList); + // } + // } catch (IoTDBConnectionException e) { + // e.printStackTrace(); + // } catch (StatementExecutionException e) { + // e.printStackTrace(); + // } + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + long timestamp = System.currentTimeMillis(); + for (int i = 0; i < 16; i++) { + timeList.add(simpleDateFormat1.format(timestamp)); + timestamp -= 60000; + io.add("20"); + } + Collections.reverse(timeList); + Collections.reverse(io); + dataList.put(metricnameList.get(0), io); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + return metricsChartDataVO; + } + + private MetricsChartDataVO getBufferSize( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("buffer"); + metricnameList.add("max"); + List<String> unitList = new ArrayList<>(); + unitList.add("MB"); + List<String> buffer = new ArrayList<>(); + List<String> max = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.memory.used\".\"id=mapped\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.memory.used\".\"id=direct\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.total.capacity\".\"id=mapped\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.buffer.total.capacity\".\"id=direct\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + buffer.add( + getNetFileSizeDescription( + (getLongFromString( + (Float.parseFloat(fields1.get(0).toString()) + + Float.parseFloat(fields1.get(1).toString())) + + "")))); + max.add( + getNetFileSizeDescription( + (getLongFromString( + (Float.parseFloat(fields1.get(2).toString()) + + Float.parseFloat(fields1.get(3).toString())) + + "")))); + } + Collections.reverse(buffer); + Collections.reverse(max); + dataList.put(metricnameList.get(0), buffer); + dataList.put(metricnameList.get(1), max); + Collections.reverse(timeList); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getMemUsedSize( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("storage"); + metricnameList.add("max"); + List<String> unitList = new ArrayList<>(); + unitList.add("MB"); + List<String> storage = new ArrayList<>(); + List<String> max = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.max\".\"area=nonheap\".\"id=Compressed Class Space\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.max\".\"area=nonheap\".\"id=Code Cache\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.max\".\"area=nonheap\".\"id=Metaspace\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.max\".\"area=heap\".\"id=PS Old Gen\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.max\".\"area=heap\".\"id=PS Eden Space\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.max\".\"area=heap\".\"id=PS Survivor Space\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.used\".\"area=nonheap\".\"id=Compressed Class Space\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.used\".\"area=nonheap\".\"id=Code Cache\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.used\".\"area=nonheap\".\"id=Metaspace\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.used\".\"area=heap\".\"id=PS Old Gen\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.used\".\"area=heap\".\"id=PS Eden Space\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.memory.used\".\"area=heap\".\"id=PS Survivor Space\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + storage.add( + getNetFileSizeDescription( + (getLongFromString( + (Float.parseFloat(fields1.get(6).toString()) + + Float.parseFloat(fields1.get(7).toString()) + + Float.parseFloat(fields1.get(8).toString()) + + Float.parseFloat(fields1.get(9).toString()) + + Float.parseFloat(fields1.get(10).toString()) + + Float.parseFloat(fields1.get(11).toString())) + + "")))); + max.add( + getNetFileSizeDescription( + (getLongFromString( + (Float.parseFloat(fields1.get(0).toString()) + + Float.parseFloat(fields1.get(1).toString()) + + Float.parseFloat(fields1.get(2).toString()) + + Float.parseFloat(fields1.get(3).toString()) + + Float.parseFloat(fields1.get(4).toString()) + + Float.parseFloat(fields1.get(5).toString())) + + "")))); + } + Collections.reverse(storage); + Collections.reverse(max); + dataList.put(metricnameList.get(0), storage); + dataList.put(metricnameList.get(1), max); + Collections.reverse(timeList); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getVariableTimeThreadCount( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("new"); + metricnameList.add("canrunning"); + metricnameList.add("running"); + metricnameList.add("block"); + metricnameList.add("die"); + metricnameList.add("dormancy"); + List<String> unitList = new ArrayList<>(); + unitList.add("个"); + List<String> newState = new ArrayList<>(); + List<String> canrunning = new ArrayList<>(); + List<String> running = new ArrayList<>(); + List<String> block = new ArrayList<>(); + List<String> die = new ArrayList<>(); + List<String> dormancy = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.states\".\"state=new\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.states\".\"state=waiting\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.states\".\"state=runnable\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.states\".\"state=blocked\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.states\".\"state=timed-waiting\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.states\".\"state=terminated\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + String s1 = fields1.get(0).toString(); + newState.add(s1.substring(0, s1.indexOf('.'))); + String s2 = fields1.get(1).toString(); + canrunning.add(s2.substring(0, s2.indexOf('.'))); + String s3 = fields1.get(2).toString(); + running.add(s3.substring(0, s3.indexOf('.'))); + String s4 = fields1.get(3).toString(); + block.add(s4.substring(0, s4.indexOf('.'))); + String s5 = fields1.get(4).toString(); + die.add(s5.substring(0, s5.indexOf('.'))); + String s6 = fields1.get(5).toString(); + dormancy.add(s6.substring(0, s6.indexOf('.'))); + } + Collections.reverse(timeList); + Collections.reverse(newState); + Collections.reverse(canrunning); + Collections.reverse(running); + Collections.reverse(block); + Collections.reverse(die); + Collections.reverse(dormancy); + dataList.put(metricnameList.get(0), newState); + dataList.put(metricnameList.get(1), canrunning); + dataList.put(metricnameList.get(2), running); + dataList.put(metricnameList.get(3), block); + dataList.put(metricnameList.get(4), die); + dataList.put(metricnameList.get(5), dormancy); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getVariableThreadCount( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("front"); + metricnameList.add("end"); + metricnameList.add("total"); + List<String> unitList = new ArrayList<>(); + unitList.add("个"); + List<String> front = new ArrayList<>(); + List<String> end = new ArrayList<>(); + List<String> total = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.daemon\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.live\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + String s1 = fields1.get(0).toString(); + end.add(s1.substring(0, s1.indexOf('.'))); + String s2 = fields1.get(1).toString(); + total.add(s2.substring(0, s2.indexOf('.'))); + front.add( + (Integer.parseInt(s2.substring(0, s2.indexOf('.'))) + - Integer.parseInt(s1.substring(0, s1.indexOf('.')))) + + ""); + } + Collections.reverse(timeList); + Collections.reverse(front); + Collections.reverse(end); + Collections.reverse(total); + dataList.put(metricnameList.get(0), front); + dataList.put(metricnameList.get(1), end); + dataList.put(metricnameList.get(2), total); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getCPUTime( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + // TODO:【接口缺失,等待确认增加】 + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("模块1"); + metricnameList.add("模块2"); + metricnameList.add("模块3"); + metricnameList.add("模块4"); + metricnameList.add("模块5"); + List<String> unitList = new ArrayList<>(); + unitList.add("%"); + List<String> module1 = new ArrayList<>(); + List<String> module2 = new ArrayList<>(); + List<String> module3 = new ArrayList<>(); + List<String> module4 = new ArrayList<>(); + List<String> module5 = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.daemon\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.threads.live\" " + + "order by time desc limit 1"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + // try { + // sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + // int batchSize = sessionDataSetWrapper.getBatchSize(); + // if (batchSize > 0) { + // int count = 0; + // while (sessionDataSetWrapper.hasNext()) { + // count++; + // RowRecord rowRecord = sessionDataSetWrapper.next(); + // long timestamp = rowRecord.getTimestamp(); + // List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + // String pattern1 = "HH:mm"; + // SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + // timeList.add(simpleDateFormat1.format(timestamp)); + // String s1 = fields1.get(0).toString(); + // end.add(s1.substring(0, s1.indexOf('.'))); + // String s2 = fields1.get(1).toString(); + // total.add(s2.substring(0, s2.indexOf('.'))); + // front.add((Integer.parseInt(s2.substring(0, + // s2.indexOf('.')))-Integer.parseInt(s1.substring(0, s1.indexOf('.')))) + ""); + // } + // dataList.put(metricnameList.get(0), front); + // dataList.put(metricnameList.get(1), end); + // dataList.put(metricnameList.get(2), total); + // metricsChartDataVO.setTimeList(timeList); + // metricsChartDataVO.setMetricnameList(metricnameList); + // metricsChartDataVO.setDataList(dataList); + // } + // } catch (IoTDBConnectionException e) { + // e.printStackTrace(); + // } catch (StatementExecutionException e) { + // e.printStackTrace(); + // } + module1.add("15" + "%"); + module2.add("25" + "%"); + module3.add("20" + "%"); + module4.add("30" + "%"); + module5.add("10" + "%"); + + dataList.put(metricnameList.get(0), module1); + dataList.put(metricnameList.get(1), module2); + dataList.put(metricnameList.get(2), module3); + dataList.put(metricnameList.get(3), module3); + dataList.put(metricnameList.get(4), module3); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + return metricsChartDataVO; + } + + private MetricsChartDataVO getYGCTimeAndReason( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("Metadata GC Threshold"); + metricnameList.add("Allocation Failure"); + List<String> unitList = new ArrayList<>(); + unitList.add("ms"); + List<String> metadata_GC_Threshold_Reason = new ArrayList<>(); + List<String> Allocation_Failure_Reason = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Allocation Failure\" " + + "order by time desc limit 1"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + metadata_GC_Threshold_Reason.add(Float.parseFloat(fields1.get(0).toString()) + ""); + Allocation_Failure_Reason.add(Float.parseFloat(fields1.get(1).toString()) + ""); + } + dataList.put(metricnameList.get(0), metadata_GC_Threshold_Reason); + dataList.put(metricnameList.get(1), Allocation_Failure_Reason); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getFGCTimeAndReason( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("Metadata GC Threshold"); + List<String> unitList = new ArrayList<>(); + unitList.add("ms"); + List<String> metadata_GC_Threshold_Reason = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\" " + + "order by time desc limit 1"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + metadata_GC_Threshold_Reason.add(Float.parseFloat(fields1.get(0).toString()) + ""); + } + dataList.put(metricnameList.get(0), metadata_GC_Threshold_Reason); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private MetricsChartDataVO getJVMLoadDiagramData( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("load"); + metricnameList.add("unload"); + List<String> unitList = new ArrayList<>(); + unitList.add("个"); + List<String> load = new ArrayList<>(); + List<String> unload = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.classes.loaded\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.classes.unloaded\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + String s1 = fields1.get(0).toString(); + load.add(s1.substring(0, s1.indexOf('.'))); + String s2 = fields1.get(1).toString(); + unload.add(s2.substring(0, s2.indexOf('.'))); + } + Collections.reverse(load); + Collections.reverse(unload); + dataList.put(metricnameList.get(0), load); + dataList.put(metricnameList.get(1), unload); + Collections.reverse(timeList); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + @Override + public List<QueryMetricsVO> getTopQueryMetricsData() { + // TODO [清华]提供获取Top SQL语句信息的接口 + // FakeData + List<QueryMetricsVO> queryMetricsVOS = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + QueryMetricsVO queryMetricsVO = new QueryMetricsVO(); + String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS"; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + String timeStamp = simpleDateFormat.format(System.currentTimeMillis()); + queryMetricsVO.setSQLStatement("SELECT * FROM root.* where time > " + timeStamp); + queryMetricsVO.setRunningTime(timeStamp); + queryMetricsVO.setExecutionTime(200 - 10 * i); + queryMetricsVOS.add(queryMetricsVO); + } + return queryMetricsVOS; + } + + @Override + public List<QueryMetricsVO> getSlowQueryMetricsData() { + // TODO [清华]提供获取Slow SQL语句信息的接口 + // FakeData + List<QueryMetricsVO> queryMetricsVOS = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + QueryMetricsVO queryMetricsVO = new QueryMetricsVO(); + String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS"; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + String timeStamp = simpleDateFormat.format(System.currentTimeMillis()); + queryMetricsVO.setSQLStatement("SELECT * FROM root.* where time > " + timeStamp); + queryMetricsVO.setRunningTime(timeStamp); + queryMetricsVO.setExecutionTime(1000 - 10 * i); + queryMetricsVOS.add(queryMetricsVO); + } + return queryMetricsVOS; + } + + private MetricsChartDataVO getJVMGCDiagramData( + SessionPool sessionPool, + SessionDataSetWrapper sessionDataSetWrapper, + String url, + Integer port) { + List<String> timeList = new ArrayList<>(); + List<String> metricnameList = new ArrayList<>(); + metricnameList.add("fgc次数"); + metricnameList.add("ygc次数"); + metricnameList.add("fgc耗时"); + metricnameList.add("ygc耗时"); + List<String> unitList = new ArrayList<>(); + unitList.add("次"); + unitList.add("ms"); + List<String> majorGCCount = new ArrayList<>(); + List<String> minorGCCount = new ArrayList<>(); + List<String> majorGCTime = new ArrayList<>(); + List<String> minorGCTime = new ArrayList<>(); + HashMap<String, List<String>> dataList = new HashMap<>(); + if (port == 6668) { + port = 8086; + } + String sql = + "select * from " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_count\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_count\".\"action=end of minor GC\".\"cause=Allocation Failure\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_count\".\"action=end of major GC\".\"cause=Metadata GC Threshold\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Allocation Failure\", " + + "root._metric.\"127.0.0.1:" + + port + + "\".\"jvm.gc.pause_total\".\"action=end of major GC\".\"cause=Metadata GC Threshold\" " + + "order by time desc limit 16"; + MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO(); + try { + sessionDataSetWrapper = sessionPool.executeQueryStatement(sql); + int batchSize = sessionDataSetWrapper.getBatchSize(); + if (batchSize > 0) { + int count = 0; + while (sessionDataSetWrapper.hasNext()) { + count++; + RowRecord rowRecord = sessionDataSetWrapper.next(); + long timestamp = rowRecord.getTimestamp(); + List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields(); + String pattern1 = "HH:mm"; + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1); + timeList.add(simpleDateFormat1.format(timestamp)); + String s1 = fields1.get(2).toString(); + s1 = s1.substring(0, s1.indexOf('.')); + String s2 = fields1.get(0).toString(); + s2 = s2.substring(0, s2.indexOf('.')); + String s3 = fields1.get(1).toString(); + s3 = s3.substring(0, s3.indexOf('.')); + majorGCCount.add(s1 + "次"); + minorGCCount.add((Integer.parseInt(s2) + Integer.parseInt(s3)) + "次"); + majorGCTime.add(Float.parseFloat(fields1.get(5).toString()) + "ms"); + minorGCTime.add( + (Float.parseFloat(fields1.get(3).toString()) + + Float.parseFloat(fields1.get(4).toString())) + + "ms"); + } + Collections.reverse(majorGCCount); + Collections.reverse(minorGCCount); + Collections.reverse(majorGCTime); + Collections.reverse(minorGCTime); + dataList.put(metricnameList.get(0), majorGCCount); + dataList.put(metricnameList.get(1), minorGCCount); + dataList.put(metricnameList.get(2), majorGCTime); + dataList.put(metricnameList.get(3), minorGCTime); + Collections.reverse(timeList); + metricsChartDataVO.setTimeList(timeList); + metricsChartDataVO.setMetricnameList(metricnameList); + metricsChartDataVO.setDataList(dataList); + metricsChartDataVO.setUnitList(unitList); + } + } catch (IoTDBConnectionException e) { + e.printStackTrace(); + } catch (StatementExecutionException e) { + e.printStackTrace(); + } + return metricsChartDataVO; + } + + private QueryDataDo filterQueryData( + List<QueryDataVO> queryDataVOS, + Integer pageSize, + Integer pageNum, + String filterString, + Long startTime, + Long endTime, + Integer executionResult) { + List<QueryDataVO> filteredQueryDataVOS = new ArrayList<>(); + filteredQueryDataVOS.addAll(queryDataVOS); + if (filterString != null) { + List<QueryDataVO> tempList = new ArrayList<>(); + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + if (queryDataVO.getStatement().contains(filterString)) { + tempList.add(queryDataVO); + } + } + filteredQueryDataVOS.clear(); + filteredQueryDataVOS.addAll(tempList); + } + if (startTime != -1) { + List<QueryDataVO> tempList = new ArrayList<>(); + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + if (queryDataVO.getRunningTime() >= startTime) { + tempList.add(queryDataVO); + } + } + filteredQueryDataVOS.clear(); + filteredQueryDataVOS.addAll(tempList); + } + if (endTime != -1) { + List<QueryDataVO> tempList = new ArrayList<>(); + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + if (queryDataVO.getRunningTime() <= endTime) { + tempList.add(queryDataVO); + } + } + filteredQueryDataVOS.clear(); + filteredQueryDataVOS.addAll(tempList); + } + if (executionResult != null) { + List<QueryDataVO> tempList = new ArrayList<>(); + if (executionResult == 0) { + tempList.addAll(filteredQueryDataVOS); + } else { + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + if (queryDataVO.getExecutionResult().equals(executionResult)) { + tempList.add(queryDataVO); + } + } + } + filteredQueryDataVOS.clear(); + filteredQueryDataVOS.addAll(tempList); + } + + System.out.println(filteredQueryDataVOS.size()); + int count = 0; + Long latestTimeStamp = 0L; + List<QueryDataVO> pageFilteredQueryDataVOS = new ArrayList<>(); + for (QueryDataVO queryDataVO : filteredQueryDataVOS) { + count++; + if (count >= pageSize * (pageNum - 1) + 1 && count <= pageSize * pageNum) { + pageFilteredQueryDataVOS.add(queryDataVO); + } + latestTimeStamp = Math.max(latestTimeStamp, queryDataVO.getRunningTime()); + } + + QueryDataDo queryDataDo = new QueryDataDo(); + queryDataDo.setCount(count); + queryDataDo.setLatestTimeStamp(latestTimeStamp); + queryDataDo.setQueryDataVOs(pageFilteredQueryDataVOS); + return queryDataDo; + } + private void grantOrRevoke( String grantOrRevoke, String userOrRole, @@ -2342,20 +4077,17 @@ public class IotDBServiceImpl implements IotDBService { List<String> paths, SessionPool sessionPool) throws BaseException { + String sql = null; + String show_version = executeQueryOneValue(sessionPool, "show version"); + if (show_version.contains("0.13") || show_version.contains("0.14")) { + sql = grantOrRevoke + " " + userOrRole + " " + name + " privileges " + privilege + " on "; + } else if (show_version.contains("0.12")) { + sql = grantOrRevoke + " " + userOrRole + " " + name + " privileges '" + privilege + "' on "; + } if (notNullAndNotZero(paths)) { for (String groupPath : paths) { - String sql = - grantOrRevoke - + " " - + userOrRole - + " " - + name - + " privileges '" - + privilege - + "' on " - + groupPath; try { - sessionPool.executeNonQueryStatement(sql); + sessionPool.executeNonQueryStatement(sql + groupPath); } catch (StatementExecutionException e) { logger.error(e.getMessage()); if (e.getStatusCode() == 602) { @@ -2504,7 +4236,7 @@ public class IotDBServiceImpl implements IotDBService { RowRecord rowRecord = sessionDataSetWrapper.next(); if (timeFlag) { long timestamp = rowRecord.getTimestamp(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); Date date = new Date(timestamp); String timeStr = simpleDateFormat.format(date); strList.add(timeStr); @@ -2746,9 +4478,9 @@ public class IotDBServiceImpl implements IotDBService { case "PLAIN": list.add(TSEncoding.PLAIN); break; - case "PLAIN_DICTIONARY": - list.add(TSEncoding.PLAIN_DICTIONARY); - break; + // case "PLAIN_DICTIONARY": + // list.add(TSEncoding.DICTIONARY); + // break; case "RLE": list.add(TSEncoding.RLE); break; @@ -2783,9 +4515,9 @@ public class IotDBServiceImpl implements IotDBService { case "PLAIN": tsEncoding = TSEncoding.PLAIN; break; - case "PLAIN_DICTIONARY": - tsEncoding = TSEncoding.PLAIN_DICTIONARY; - break; + // case "PLAIN_DICTIONARY": + // tsEncoding = TSEncoding.DICTIONARY; + // break; case "RLE": tsEncoding = TSEncoding.RLE; break; @@ -2966,4 +4698,25 @@ public class IotDBServiceImpl implements IotDBService { sessionDataSetWrapper.close(); } } + + private static String getNetFileSizeDescription(long size) { + StringBuffer bytes = new StringBuffer(); + DecimalFormat format = new DecimalFormat("###.0"); + double i = (size / (1024.0 * 1024.0)); + bytes.append(format.format(i)); + if (bytes.toString().equals(".0")) { + return "0.0"; + } + return bytes.toString(); + } + + private static long getLongFromString(String timeStr) { + long count = Long.parseLong(timeStr.substring(timeStr.indexOf("E") + 1)); + double time = Double.parseDouble(timeStr.substring(0, timeStr.indexOf("E"))); + while (count > 0) { + time *= 10; + count--; + } + return (long) time; + } } diff --git a/backend/src/main/resources/sqlite/iotdb.db b/backend/src/main/resources/sqlite/iotdb.db index 9700849..26e0b25 100644 Binary files a/backend/src/main/resources/sqlite/iotdb.db and b/backend/src/main/resources/sqlite/iotdb.db differ
