You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2022/08/03 12:31:23 UTC
[iotdb-web-workbench] 28/34: 新增监控指标展示功能
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 21d9ebedf396eb936e72fcbbee7ad4d4a12bed3e
Author: loveher147 <lo...@qq.com>
AuthorDate: Mon May 30 10:40:30 2022 +0800
新增监控指标展示功能
- 该版本适配低于0.13版本的iotdb并提供数据库管理功能,但不提供监控管理(低于0.13版本iotdb不支持监控);
- 仍然存在部分接口返回后端假数据,等待清华提供接口后替换为真实数据。
---
.../iotdb/admin/controller/IotDBController.java | 57 +-
.../iotdb/admin/controller/MetricsController.java | 170 ++
.../apache/iotdb/admin/mapper/ViewModeMapper.java | 13 +
.../iotdb/admin/model/dto/DataModelDetailDTO.java | 15 +
.../apache/iotdb/admin/model/dto/QueryInfoDTO.java | 19 +
.../apache/iotdb/admin/model/entity/ViewMode.java | 30 +
.../iotdb/admin/model/metricsDo/QueryDataDo.java | 18 +
.../apache/iotdb/admin/model/vo/DataModelVO.java | 10 +
.../org/apache/iotdb/admin/model/vo/GroupInfo.java | 16 +
.../apache/iotdb/admin/model/vo/GroupInfoVO.java | 6 +-
.../iotdb/admin/model/vo/JVMMetricsListDataVO.java | 14 +
.../model/vo/MetircsQueryClassificationVO.java | 15 +
.../iotdb/admin/model/vo/MetricsChartDataVO.java | 23 +
.../iotdb/admin/model/vo/MetricsConnectionVO.java | 15 +
.../iotdb/admin/model/vo/MetricsDataCountVO.java | 20 +
.../admin/model/vo/MetricsDataForDiagramVO.java | 16 +
.../iotdb/admin/model/vo/MetricsDataForListVO.java | 16 +
.../iotdb/admin/model/vo/MetricsListDataVO.java | 17 +
.../admin/model/vo/QueryClassificationVO.java | 14 +
.../apache/iotdb/admin/model/vo/QueryData1VO.java | 15 +
.../iotdb/admin/model/vo/QueryDataForListVO.java | 16 +
.../iotdb/admin/model/vo/QueryDataStrVO.java | 21 +
.../iotdb/admin/model/vo/QueryDataStrVO1.java | 15 +
.../apache/iotdb/admin/model/vo/QueryDataVO.java | 21 +
.../apache/iotdb/admin/model/vo/QueryInfoVO.java | 19 +
.../iotdb/admin/model/vo/QueryMetricsVO.java | 14 +
.../apache/iotdb/admin/service/IotDBService.java | 3 +
.../iotdb/admin/service/MetricsResultService.java | 23 +
.../apache/iotdb/admin/service/MetricsService.java | 41 +
.../iotdb/admin/service/impl/IotDBServiceImpl.java | 60 +
.../service/impl/MetricsResultServiceImpl.java | 283 ++++
.../admin/service/impl/MetricsServiceImpl.java | 1746 ++++++++++++++++++++
32 files changed, 2764 insertions(+), 17 deletions(-)
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 5b4d0d0..8930913 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
@@ -95,28 +95,57 @@ public class IotDBController {
return BaseVO.success("Get IoTDB data model successfully", dataModelVO);
}
+ @GetMapping("/dataModel/detail")
+ @ApiOperation("Get IoTDB data model in detail")
+ public BaseVO<DataModelVO> getDataModelDetail(
+ @PathVariable("serverId") Integer serverId,
+ @RequestParam(value = "path", required = false, defaultValue = "root") String path,
+ @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize,
+ @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+ HttpServletRequest request)
+ throws BaseException {
+ check(request, serverId);
+ Connection connection = connectionService.getById(serverId);
+ DataModelVO dataModelVO = iotDBService.getDataModelDetail(connection, path, pageSize, pageNum);
+ return BaseVO.success("Get IoTDB data model successfully", dataModelVO);
+ }
+
@GetMapping("/storageGroups/info")
@ApiOperation("Get information of the storage group list")
- public BaseVO<List<GroupInfoVO>> getAllStorageGroupsInfo(
- @PathVariable("serverId") Integer serverId, HttpServletRequest request) throws BaseException {
+ public BaseVO<GroupInfoVO> getAllStorageGroupsInfo(
+ @PathVariable("serverId") Integer serverId,
+ @RequestParam(value = "pageSize", required = false, defaultValue = "15") Integer pageSize,
+ @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+ HttpServletRequest request)
+ throws BaseException {
check(request, serverId);
Connection connection = connectionService.getById(serverId);
List<String> groupNames = iotDBService.getAllStorageGroups(connection);
- List<GroupInfoVO> groupInfoList = new ArrayList<>();
- if (groupNames == null || groupNames.size() == 0) {
- return BaseVO.success("Get successfully", groupInfoList);
+ List<String> subGroupNames = new ArrayList<>();
+ int size = groupNames.size();
+ int pageStart = pageNum == 1 ? 0 : (pageNum - 1) * pageSize;
+ int pageEnd = size < pageNum * pageSize ? size : pageNum * pageSize;
+ if (size > pageStart) {
+ subGroupNames = groupNames.subList(pageStart, pageEnd);
+ }
+ List<GroupInfo> groupInfoList = new ArrayList<>();
+ GroupInfoVO groupInfoVO = new GroupInfoVO();
+ if (subGroupNames == null || subGroupNames.size() == 0) {
+ return BaseVO.success("Get successfully", groupInfoVO);
}
String host = connection.getHost();
- List<Integer> deviceCounts = iotDBService.getDevicesCount(connection, groupNames);
- List<String> descriptions = groupService.getGroupDescription(host, groupNames);
- for (int i = 0; i < groupNames.size(); i++) {
- GroupInfoVO groupInfoVO = new GroupInfoVO();
- groupInfoVO.setGroupName(groupNames.get(i));
- groupInfoVO.setDeviceCount(deviceCounts.get(i));
- groupInfoVO.setDescription(descriptions.get(i));
- groupInfoList.add(groupInfoVO);
+ List<Integer> deviceCounts = iotDBService.getDevicesCount(connection, subGroupNames);
+ List<String> descriptions = groupService.getGroupDescription(host, subGroupNames);
+ for (int i = 0; i < subGroupNames.size(); i++) {
+ GroupInfo groupInfo = new GroupInfo();
+ groupInfo.setGroupName(subGroupNames.get(i));
+ groupInfo.setDeviceCount(deviceCounts.get(i));
+ groupInfo.setDescription(descriptions.get(i));
+ groupInfoList.add(groupInfo);
}
- return BaseVO.success("Get successfully", groupInfoList);
+ groupInfoVO.setGroupInfoList(groupInfoList);
+ groupInfoVO.setGroupCount(size);
+ return BaseVO.success("Get successfully", groupInfoVO);
}
@GetMapping("/storageGroups")
diff --git a/backend/src/main/java/org/apache/iotdb/admin/controller/MetricsController.java b/backend/src/main/java/org/apache/iotdb/admin/controller/MetricsController.java
new file mode 100644
index 0000000..5c5a968
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/controller/MetricsController.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.admin.controller;
+
+import org.apache.iotdb.admin.common.exception.BaseException;
+import org.apache.iotdb.admin.common.utils.AuthenticationUtils;
+import org.apache.iotdb.admin.model.entity.Connection;
+import org.apache.iotdb.admin.model.vo.*;
+import org.apache.iotdb.admin.service.ConnectionService;
+import org.apache.iotdb.admin.service.IotDBService;
+import org.apache.iotdb.admin.service.MetricsService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-22-上午 9:55
+ */
+@RestController
+@Api(value = "metrics related")
+public class MetricsController {
+
+ @Autowired private ConnectionService connectionService;
+ @Autowired private IotDBService iotDBService;
+ @Autowired private MetricsService metricsService;
+
+ private static final Logger logger = LoggerFactory.getLogger(MetricsController.class);
+
+ @GetMapping("/servers/metrics/connection")
+ @ApiOperation("[metrics]Get All Connection")
+ public BaseVO<List<MetricsConnectionVO>> getConnectionList(HttpServletRequest request)
+ throws BaseException {
+ Integer userId = AuthenticationUtils.getUserId(request);
+ AuthenticationUtils.userAuthentication(userId, request);
+ List<ConnVO> allConnections = connectionService.getAllConnections(userId);
+ ArrayList<MetricsConnectionVO> metricsConnectionVOS = new ArrayList<>();
+ for (ConnVO connVO : allConnections) {
+ MetricsConnectionVO temp = new MetricsConnectionVO();
+ temp.setId(connVO.getId());
+ temp.setName(connVO.getAlias());
+ metricsConnectionVOS.add(temp);
+ }
+ return BaseVO.success("Get Successfully", metricsConnectionVOS);
+ }
+
+ @GetMapping("/servers/{serverId}/metrics/datacount")
+ @ApiOperation("[metrics]Get Datacount")
+ public BaseVO<MetricsDataCountVO> getMetricsConnectionDataCount(
+ @PathVariable("serverId") Integer serverId, HttpServletRequest request) throws BaseException {
+ check(request, serverId);
+ MetricsDataCountVO metricsDataCountVO = metricsService.getMetricsDataCount(serverId);
+ return BaseVO.success("Get IoTDB data statistics successfully", metricsDataCountVO);
+ }
+
+ @GetMapping("/servers/{serverId}/metrics/QueryClassification")
+ @ApiOperation("[metrics]Get all query classifications")
+ public BaseVO<MetircsQueryClassificationVO> getAllQueryClassification(
+ @PathVariable("serverId") Integer serverId, HttpServletRequest request) throws BaseException {
+ check(request, serverId);
+ MetircsQueryClassificationVO metircsQueryClassificationVO =
+ metricsService.getMetircsQueryClassification(serverId);
+ return BaseVO.success("Get IoTDB data statistics successfully", metircsQueryClassificationVO);
+ }
+
+ @GetMapping("/servers/{serverId}/metrics/{queryClassificationId}/selectcount")
+ @ApiOperation("[Metrics]Get detail information of query sql")
+ public BaseVO<QueryInfoVO> getQueryInfo(
+ @PathVariable("serverId") Integer serverId,
+ @PathVariable("queryClassificationId") Integer queryClassificationId,
+ @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize,
+ @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+ @RequestParam(value = "filterString", required = false) String filterString,
+ @RequestParam(value = "startTime", required = false, defaultValue = "-1") String startTimeStr,
+ @RequestParam(value = "endTime", required = false, defaultValue = "-1") String endTimeStr,
+ @RequestParam(value = "executionResult", required = false) Integer executionResult,
+ HttpServletRequest request)
+ throws BaseException {
+ check(request, serverId);
+ QueryInfoVO queryInfoVO =
+ metricsService.getQueryInfo(
+ serverId,
+ queryClassificationId,
+ pageSize,
+ pageNum,
+ filterString,
+ startTimeStr,
+ endTimeStr,
+ executionResult);
+ return BaseVO.success("Get IoTDB query statement data statistics successfully", queryInfoVO);
+ }
+
+ @GetMapping("/servers/{serverId}/metrics/diagram")
+ @ApiOperation("Get metrics data for diagram")
+ public BaseVO<MetricsDataForDiagramVO> getMetricsDataForDiagram(
+ @PathVariable("serverId") Integer serverId,
+ @RequestParam Integer metricId,
+ HttpServletRequest request)
+ throws BaseException {
+ check(request, serverId);
+ Connection connection = connectionService.getById(serverId);
+ MetricsDataForDiagramVO metricsDataForDiagramVO =
+ iotDBService.getMetricDataByMetricId(connection, metricId);
+ metricsDataForDiagramVO.setServerId(serverId);
+ return BaseVO.success("Get metrics data for diagram successfully", metricsDataForDiagramVO);
+ }
+
+ @GetMapping("/servers/{serverId}/metrics/list/{metricsType}")
+ @ApiOperation("Get metrics data for list")
+ public BaseVO<MetricsDataForListVO> getMetricsDataForList(
+ @PathVariable("serverId") Integer serverId,
+ @PathVariable("metricsType") Integer metricsType,
+ HttpServletRequest request)
+ throws BaseException {
+ check(request, serverId);
+ MetricsDataForListVO metricsDataForListVO =
+ metricsService.getMetricsDataForList(serverId, metricsType);
+ return BaseVO.success("Get metrics data for list successfully", metricsDataForListVO);
+ }
+
+ @GetMapping("/servers/{serverId}/metrics/list/query/{mode}")
+ @ApiOperation("Get query metrics data for list")
+ public BaseVO<QueryDataForListVO> getQueryMetricsDataForList(
+ @PathVariable("serverId") Integer serverId, @PathVariable("mode") Integer mode)
+ throws BaseException {
+ QueryDataForListVO queryDataForListVO = new QueryDataForListVO();
+ queryDataForListVO.setMode(mode);
+ queryDataForListVO.setServerId(serverId);
+
+ if (mode == 1) {
+ List<QueryMetricsVO> queryMetricsVOs = iotDBService.getTopQueryMetricsData();
+ queryDataForListVO.setQueryMetricsVOs(queryMetricsVOs);
+
+ } else if (mode == 0) {
+ List<QueryMetricsVO> queryMetricsVOs = iotDBService.getSlowQueryMetricsData();
+ queryDataForListVO.setQueryMetricsVOs(queryMetricsVOs);
+ }
+ return BaseVO.success("Get query metrics data for list successfully", queryDataForListVO);
+ }
+
+ private void check(HttpServletRequest request, Integer serverId) throws BaseException {
+ Integer userId = AuthenticationUtils.getUserId(request);
+ connectionService.check(serverId, userId);
+ }
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/mapper/ViewModeMapper.java b/backend/src/main/java/org/apache/iotdb/admin/mapper/ViewModeMapper.java
new file mode 100644
index 0000000..66f9ea3
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/mapper/ViewModeMapper.java
@@ -0,0 +1,13 @@
+package org.apache.iotdb.admin.mapper;
+
+import org.apache.iotdb.admin.model.entity.ViewMode;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Erickin
+ * @create 2022-04-22-上午 10:32
+ */
+@Component
+public interface ViewModeMapper extends BaseMapper<ViewMode> {}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/dto/DataModelDetailDTO.java b/backend/src/main/java/org/apache/iotdb/admin/model/dto/DataModelDetailDTO.java
new file mode 100644
index 0000000..b33cce1
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/dto/DataModelDetailDTO.java
@@ -0,0 +1,15 @@
+package org.apache.iotdb.admin.model.dto;
+
+import lombok.Data;
+import org.apache.iotdb.admin.model.vo.DataModelVO;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class DataModelDetailDTO implements Serializable {
+ private List<DataModelVO> dataModelVOList;
+ private Integer pageNum;
+ private Integer pageSize;
+ private Integer total;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/dto/QueryInfoDTO.java b/backend/src/main/java/org/apache/iotdb/admin/model/dto/QueryInfoDTO.java
new file mode 100644
index 0000000..7f3210b
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/dto/QueryInfoDTO.java
@@ -0,0 +1,19 @@
+package org.apache.iotdb.admin.model.dto;
+
+import org.apache.iotdb.admin.model.vo.QueryDataStrVO;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-下午 5:12
+ */
+@Data
+public class QueryInfoDTO {
+ private Long latestRunningTime;
+ private Integer totalCount;
+ private Integer totalPage;
+ List<QueryDataStrVO> filteredQueryDataStrVOSList;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/entity/ViewMode.java b/backend/src/main/java/org/apache/iotdb/admin/model/entity/ViewMode.java
new file mode 100644
index 0000000..56c9ae6
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/entity/ViewMode.java
@@ -0,0 +1,30 @@
+package org.apache.iotdb.admin.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Null;
+import javax.validation.constraints.Pattern;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-22-上午 10:35
+ */
+@Data
+@TableName("view_mode")
+public class ViewMode implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Null
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @NotBlank
+ @Pattern(regexp = "^[^ ]+$", message = "The account name cannot contain spaces")
+ private String name;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/metricsDo/QueryDataDo.java b/backend/src/main/java/org/apache/iotdb/admin/model/metricsDo/QueryDataDo.java
new file mode 100644
index 0000000..2be1e09
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/metricsDo/QueryDataDo.java
@@ -0,0 +1,18 @@
+package org.apache.iotdb.admin.model.metricsDo;
+
+import org.apache.iotdb.admin.model.vo.QueryDataVO;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-上午 9:28
+ */
+@Data
+public class QueryDataDo {
+ private List<QueryDataVO> QueryDataVOs;
+ private Long latestTimeStamp;
+ private Integer count;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataModelVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataModelVO.java
index 2763728..60f9a60 100644
--- a/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataModelVO.java
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/DataModelVO.java
@@ -47,6 +47,16 @@ public class DataModelVO implements Serializable {
private List<DataModelVO> children;
+ private Integer showNum;
+
+ private Integer pageNum;
+
+ private Integer pageSize;
+
+ private Integer total;
+
+ private Integer totalSonNodeCount;
+
public DataModelVO(String name) {
this.name = name;
this.isGroup = false;
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfo.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfo.java
new file mode 100644
index 0000000..62e3cb2
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfo.java
@@ -0,0 +1,16 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class GroupInfo implements Serializable {
+ private String groupName;
+ private Integer deviceCount;
+ private String description;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfoVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfoVO.java
index 512deb7..87f4823 100644
--- a/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfoVO.java
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/GroupInfoVO.java
@@ -24,12 +24,12 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
+import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GroupInfoVO implements Serializable {
- private String groupName;
- private Integer deviceCount;
- private String description;
+ private Integer groupCount;
+ private List<GroupInfo> groupInfoList;
}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/JVMMetricsListDataVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/JVMMetricsListDataVO.java
new file mode 100644
index 0000000..3661555
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/JVMMetricsListDataVO.java
@@ -0,0 +1,14 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 5:26
+ */
+@Data
+public class JVMMetricsListDataVO extends MetricsListDataVO implements Serializable {
+ private String metricType;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetircsQueryClassificationVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetircsQueryClassificationVO.java
new file mode 100644
index 0000000..851c833
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetircsQueryClassificationVO.java
@@ -0,0 +1,15 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-上午 10:00
+ */
+@Data
+public class MetircsQueryClassificationVO {
+ private Integer serverId;
+ private List<QueryClassificationVO> classificationList;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsChartDataVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsChartDataVO.java
new file mode 100644
index 0000000..9bfa81f
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsChartDataVO.java
@@ -0,0 +1,23 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-上午 10:15
+ */
+@Data
+public class MetricsChartDataVO implements Serializable {
+ private List<String> timeList;
+ private List<String> metricnameList;
+ private List<String> unitList;
+ private HashMap<String, List<String>> dataList;
+}
+
+// List<String> timeList;
+// List<String> metricnameList;
+// HashMap<String, List<Integer> dataList;
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsConnectionVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsConnectionVO.java
new file mode 100644
index 0000000..8045fdb
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsConnectionVO.java
@@ -0,0 +1,15 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-上午 9:12
+ */
+@Data
+public class MetricsConnectionVO implements Serializable {
+ Integer id;
+ String name;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataCountVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataCountVO.java
new file mode 100644
index 0000000..82f6337
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataCountVO.java
@@ -0,0 +1,20 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-上午 9:38
+ */
+@Data
+public class MetricsDataCountVO {
+ private Integer serverId;
+ private Boolean status;
+ private String url;
+ private Integer port;
+ private Integer storageGroupCount;
+ private Integer deviceCount;
+ private Integer monitorCount;
+ private Integer dataCount;
+ private String version;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataForDiagramVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataForDiagramVO.java
new file mode 100644
index 0000000..08135e3
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataForDiagramVO.java
@@ -0,0 +1,16 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-上午 10:12
+ */
+@Data
+public class MetricsDataForDiagramVO implements Serializable {
+ private Integer serverId;
+ private Integer metricId;
+ private MetricsChartDataVO chartData;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataForListVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataForListVO.java
new file mode 100644
index 0000000..269cde1
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsDataForListVO.java
@@ -0,0 +1,16 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 8:12
+ */
+@Data
+public class MetricsDataForListVO {
+ private Integer serverId;
+ private Integer metricsType;
+ private List<MetricsListDataVO> listInfo;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsListDataVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsListDataVO.java
new file mode 100644
index 0000000..7bde7ca
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/MetricsListDataVO.java
@@ -0,0 +1,17 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 5:24
+ */
+@Data
+public class MetricsListDataVO implements Serializable {
+ private String name;
+ private String latestScratchTime;
+ private String latestResult;
+ private Integer detailAvailable;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryClassificationVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryClassificationVO.java
new file mode 100644
index 0000000..17993c0
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryClassificationVO.java
@@ -0,0 +1,14 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-上午 10:02
+ */
+@Data
+public class QueryClassificationVO {
+ private Integer id;
+ private String name;
+ private Integer flag;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryData1VO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryData1VO.java
new file mode 100644
index 0000000..b14e3c4
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryData1VO.java
@@ -0,0 +1,15 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-下午 3:56
+ */
+@Data
+public class QueryData1VO extends QueryDataVO implements Serializable {
+ private Integer precompiledTime;
+ private Integer optimizedTime;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataForListVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataForListVO.java
new file mode 100644
index 0000000..b200a0d
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataForListVO.java
@@ -0,0 +1,16 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 9:22
+ */
+@Data
+public class QueryDataForListVO {
+ private Integer serverId;
+ private Integer mode;
+ private List<QueryMetricsVO> queryMetricsVOs;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataStrVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataStrVO.java
new file mode 100644
index 0000000..5aecf44
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataStrVO.java
@@ -0,0 +1,21 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-28-下午 10:02
+ */
+@Data
+public class QueryDataStrVO implements Serializable {
+ private Integer id;
+ private String statement;
+ private String runningTime;
+ private Boolean isSlowQuery;
+ private Integer totalTime;
+ private Integer analysisTime;
+ private Integer executionTime;
+ private Integer executionResult;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataStrVO1.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataStrVO1.java
new file mode 100644
index 0000000..a14537a
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataStrVO1.java
@@ -0,0 +1,15 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-29-下午 2:10
+ */
+@Data
+public class QueryDataStrVO1 extends QueryDataStrVO implements Serializable {
+ private Integer precompiledTime;
+ private Integer optimizedTime;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataVO.java
new file mode 100644
index 0000000..081be81
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryDataVO.java
@@ -0,0 +1,21 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-下午 8:36
+ */
+@Data
+public class QueryDataVO implements Serializable {
+ private Integer id;
+ private String statement;
+ private Long runningTime;
+ private Boolean isSlowQuery;
+ private Integer totalTime;
+ private Integer analysisTime;
+ private Integer executionTime;
+ private Integer executionResult;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryInfoVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryInfoVO.java
new file mode 100644
index 0000000..e2b3529
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryInfoVO.java
@@ -0,0 +1,19 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-25-下午 5:13
+ */
+@Data
+public class QueryInfoVO {
+ private Integer queryClassificationId;
+ private String latestRunningTime;
+ private Integer totalCount;
+ private Integer totalPage;
+ private Integer serverId;
+ private List<QueryDataStrVO> filteredQueryDataStrVOSList;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryMetricsVO.java b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryMetricsVO.java
new file mode 100644
index 0000000..cdf3e12
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/model/vo/QueryMetricsVO.java
@@ -0,0 +1,14 @@
+package org.apache.iotdb.admin.model.vo;
+
+import lombok.Data;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 9:20
+ */
+@Data
+public class QueryMetricsVO {
+ private String SQLStatement;
+ private String runningTime;
+ private Integer executionTime;
+}
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 0b050d7..2a97117 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
@@ -62,6 +62,9 @@ public interface IotDBService {
void setIotDBRole(Connection connection, IotDBRole iotDBRole) throws BaseException;
+ DataModelVO getDataModelDetail(
+ Connection connection, String path, Integer pageSize, Integer pageNum) throws BaseException;
+
UserRolesVO getRolesOfUser(Connection connection, String userName) throws BaseException;
void userGrant(Connection connection, String userName, UserGrantDTO userGrantDTO)
diff --git a/backend/src/main/java/org/apache/iotdb/admin/service/MetricsResultService.java b/backend/src/main/java/org/apache/iotdb/admin/service/MetricsResultService.java
new file mode 100644
index 0000000..1180f23
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/service/MetricsResultService.java
@@ -0,0 +1,23 @@
+package org.apache.iotdb.admin.service;
+
+import org.apache.iotdb.admin.common.exception.BaseException;
+import org.apache.iotdb.admin.model.entity.Connection;
+import org.apache.iotdb.admin.model.vo.MetricsListDataVO;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 4:07
+ */
+public interface MetricsResultService {
+ List<MetricsListDataVO> getJVMMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getCPUMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getMemMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getDiskMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getWriteMetricsDataList(Connection connection) throws BaseException;
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/service/MetricsService.java b/backend/src/main/java/org/apache/iotdb/admin/service/MetricsService.java
new file mode 100644
index 0000000..50f8663
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/service/MetricsService.java
@@ -0,0 +1,41 @@
+package org.apache.iotdb.admin.service;
+
+import org.apache.iotdb.admin.common.exception.BaseException;
+import org.apache.iotdb.admin.model.entity.Connection;
+import org.apache.iotdb.admin.model.vo.*;
+
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 4:07
+ */
+public interface MetricsService {
+ List<MetricsListDataVO> getJVMMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getCPUMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getMemMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getDiskMetricsDataList(Connection connection) throws BaseException;
+
+ List<MetricsListDataVO> getWriteMetricsDataList(Connection connection) throws BaseException;
+
+ MetircsQueryClassificationVO getMetircsQueryClassification(Integer serverId);
+
+ QueryInfoVO getQueryInfo(
+ Integer serverId,
+ Integer queryClassificationId,
+ Integer pageSize,
+ Integer pageNum,
+ String filterString,
+ String startTimeStr,
+ String endTimeStr,
+ Integer executionResult)
+ throws BaseException;
+
+ MetricsDataCountVO getMetricsDataCount(Integer serverId) throws BaseException;
+
+ MetricsDataForListVO getMetricsDataForList(Integer serverId, Integer metricsType)
+ throws BaseException;
+}
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 e904462..4318825 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
@@ -765,6 +765,66 @@ public class IotDBServiceImpl implements IotDBService {
}
}
+ @Override
+ public DataModelVO getDataModelDetail(
+ Connection connection, String path, Integer pageSize, Integer pageNum) throws BaseException {
+ SessionPool sessionPool = null;
+ try {
+ sessionPool = getSessionPool(connection);
+ DataModelVO root = new DataModelVO(path);
+ setNodeInfo(root, sessionPool, path);
+ List<DataModelVO> childrenDataModel = null;
+ DataModelDetailDTO childrenDataModelDetail =
+ getChildrenDataModelDetail(root, path, sessionPool, pageSize, pageNum);
+ childrenDataModel =
+ childrenDataModelDetail == null ? null : childrenDataModelDetail.getDataModelVOList();
+ if (childrenDataModelDetail != null) {
+ root.setPageNum(childrenDataModelDetail.getPageNum());
+ root.setPageSize(childrenDataModelDetail.getPageSize());
+ root.setTotal(childrenDataModelDetail.getTotal());
+ }
+ root.setChildren(childrenDataModel);
+ root.setTotalSonNodeCount(
+ getChildrenNode(path, sessionPool) == null
+ ? 0
+ : getChildrenNode(path, sessionPool).size());
+ root.setGroupCount(path.equals("root") ? getGroupCount(sessionPool) : null);
+ root.setPath(path);
+ return root;
+ } finally {
+ closeSessionPool(sessionPool);
+ }
+ }
+
+ private DataModelDetailDTO getChildrenDataModelDetail(
+ DataModelVO root, String path, SessionPool sessionPool, Integer pageSize, Integer pageNum)
+ throws BaseException {
+ Set<String> childrenNode = getChildrenNode(path, sessionPool);
+ if (childrenNode == null) {
+ return null;
+ }
+ List<DataModelVO> childrenlist = new ArrayList<>();
+ List<String> childrenNodeList = new ArrayList<>(childrenNode);
+ List<String> childrenNodeSubList = new ArrayList<>();
+ int size = childrenNode.size();
+ int pageStart = pageNum == 1 ? 0 : (pageNum - 1) * pageSize;
+ int pageEnd = size < pageNum * pageSize ? size : pageNum * pageSize;
+ if (size > pageStart) {
+ childrenNodeSubList = childrenNodeList.subList(pageStart, pageEnd);
+ }
+ for (String child : childrenNodeSubList) {
+ DataModelVO childNode = new DataModelVO(child);
+ setNodeInfo(childNode, sessionPool, path + "." + child);
+ childrenlist.add(childNode);
+ }
+ DataModelDetailDTO dataModelDetailDTO = new DataModelDetailDTO();
+ dataModelDetailDTO.setDataModelVOList(childrenlist);
+ dataModelDetailDTO.setPageNum(pageNum);
+ dataModelDetailDTO.setPageSize(pageSize);
+ dataModelDetailDTO.setTotal(size);
+ return dataModelDetailDTO;
+ }
+
@Override
public UserRolesVO getRolesOfUser(Connection connection, String userName) throws BaseException {
SessionPool sessionPool = getSessionPool(connection);
diff --git a/backend/src/main/java/org/apache/iotdb/admin/service/impl/MetricsResultServiceImpl.java b/backend/src/main/java/org/apache/iotdb/admin/service/impl/MetricsResultServiceImpl.java
new file mode 100644
index 0000000..de26ba5
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/service/impl/MetricsResultServiceImpl.java
@@ -0,0 +1,283 @@
+package org.apache.iotdb.admin.service.impl;
+
+import org.apache.iotdb.admin.common.exception.BaseException;
+import org.apache.iotdb.admin.model.entity.Connection;
+import org.apache.iotdb.admin.model.vo.JVMMetricsListDataVO;
+import org.apache.iotdb.admin.model.vo.MetricsListDataVO;
+import org.apache.iotdb.admin.service.MetricsResultService;
+
+import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 4:41
+ */
+@Service
+public class MetricsResultServiceImpl implements MetricsResultService {
+
+ public JVMMetricsListDataVO getCurrentThreadsCount(long currentTimeMillis) throws BaseException {
+ String name = "JVM当前线程数";
+ String metricType = "线程";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 1;
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:8086\".\"jvm.threads.daemon\","
+ + " root._metric.\"127.0.0.1:8086\".\"jvm.threads.live\" "
+ + "order by time desc limit 1";
+ try {
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ String latestResult = "[Just Test] 前台:20个,后台:39个,线程总数:59个";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getYGCHappendCountAndCostTime(long currentTimeMillis)
+ throws BaseException {
+ // TODO 暂时写死
+ String name = "YGC发生次数及总耗时";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 2;
+ String latestResult = "[Just Test] 20次 200s";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getUsedBufferSize(long currentTimeMillis) throws BaseException {
+ String name = "已经使用的缓冲区大小";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 3;
+ String latestResult = "[Just Test] 20G";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMTotalUnloadClass(long currentTimeMillis) throws BaseException {
+ String name = "JVM累计卸载的class数量";
+ String metricType = "Classes";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 4;
+ String latestResult = "[Just Test] 30次";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public MetricsListDataVO getCPUUsed(long currentTimeMillis) throws BaseException {
+ String name = "CPU使用率";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 1;
+ String latestResult = "[Just Test] 50%";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getCPUCores(long currentTimeMillis) throws BaseException {
+ String name = "CPU核数";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 0;
+ String latestResult = "[Just Test] 4核";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getIotDBProcessMemUsed(long currentTimeMillis) throws BaseException {
+ String name = "IoTDB进程内存占用比例";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 1;
+ String latestResult = "[Just Test] 70%";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getTotalMem(long currentTimeMillis) throws BaseException {
+ String name = "物理内存大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 0;
+ String latestResult = "[Just Test] 4G";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getDiskAvaliable(long currentTimeMillis) throws BaseException {
+ String name = "磁盘剩余";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 1;
+ String latestResult = "[Just Test] 2G";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getDiskTotalSize(long currentTimeMillis) throws BaseException {
+ String name = "磁盘总大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 0;
+ String latestResult = "[Just Test] 4G";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO writeSucceedProportion(long currentTimeMillis) throws BaseException {
+ String name = "写入成功率";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 0;
+ String latestResult = "[Just Test] 80%";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO writeLatency(long currentTimeMillis) throws BaseException {
+ String name = "写入延迟(最近一分钟)";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ String latestScratchTime = simpleDateFormat.format(currentTimeMillis);
+ Integer detailAvailable = 1;
+ String latestResult = "[Just Test] 90%";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getJVMMetricsDataList(Connection connection) throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ long currentTimeMillis = System.currentTimeMillis();
+ JVMMetricsListDataVO currentThreadsCount = getCurrentThreadsCount(currentTimeMillis);
+ JVMMetricsListDataVO ygcHappendCountAndCostTime =
+ getYGCHappendCountAndCostTime(currentTimeMillis);
+ JVMMetricsListDataVO usedBufferSize = getUsedBufferSize(currentTimeMillis);
+ JVMMetricsListDataVO jvmTotalUnloadClass = getJVMTotalUnloadClass(currentTimeMillis);
+ // TODO 把所有指标都加进来
+ list.add(currentThreadsCount);
+ list.add(ygcHappendCountAndCostTime);
+ list.add(usedBufferSize);
+ list.add(jvmTotalUnloadClass);
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getCPUMetricsDataList(Connection connection) throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ long currentTimeMillis = System.currentTimeMillis();
+ MetricsListDataVO cpuUsed = getCPUUsed(currentTimeMillis);
+ MetricsListDataVO cpuCores = getCPUCores(currentTimeMillis);
+ list.add(cpuUsed);
+ list.add(cpuCores);
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getMemMetricsDataList(Connection connection) throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ long currentTimeMillis = System.currentTimeMillis();
+ MetricsListDataVO iotDBProcessMemUsed = getIotDBProcessMemUsed(currentTimeMillis);
+ MetricsListDataVO totalMem = getTotalMem(currentTimeMillis);
+ list.add(iotDBProcessMemUsed);
+ list.add(totalMem);
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getDiskMetricsDataList(Connection connection)
+ throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ long currentTimeMillis = System.currentTimeMillis();
+ MetricsListDataVO metricsListDataVO = getDiskAvaliable(currentTimeMillis);
+ MetricsListDataVO diskTotalSize = getDiskTotalSize(currentTimeMillis);
+ list.add(metricsListDataVO);
+ list.add(diskTotalSize);
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getWriteMetricsDataList(Connection connection)
+ throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ long currentTimeMillis = System.currentTimeMillis();
+ MetricsListDataVO writeSucceedProportion = writeSucceedProportion(currentTimeMillis);
+ MetricsListDataVO writeLatency = writeLatency(currentTimeMillis);
+ list.add(writeSucceedProportion);
+ list.add(writeLatency);
+ return list;
+ }
+}
diff --git a/backend/src/main/java/org/apache/iotdb/admin/service/impl/MetricsServiceImpl.java b/backend/src/main/java/org/apache/iotdb/admin/service/impl/MetricsServiceImpl.java
new file mode 100644
index 0000000..5dd025d
--- /dev/null
+++ b/backend/src/main/java/org/apache/iotdb/admin/service/impl/MetricsServiceImpl.java
@@ -0,0 +1,1746 @@
+package org.apache.iotdb.admin.service.impl;
+
+import org.apache.iotdb.admin.common.exception.BaseException;
+import org.apache.iotdb.admin.common.exception.ErrorCode;
+import org.apache.iotdb.admin.model.dto.QueryInfoDTO;
+import org.apache.iotdb.admin.model.entity.Connection;
+import org.apache.iotdb.admin.model.vo.*;
+import org.apache.iotdb.admin.service.ConnectionService;
+import org.apache.iotdb.admin.service.IotDBService;
+import org.apache.iotdb.admin.service.MetricsService;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.session.pool.SessionDataSetWrapper;
+import org.apache.iotdb.session.pool.SessionPool;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.*;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Erickin
+ * @create 2022-04-26-下午 4:41
+ */
+@Service
+public class MetricsServiceImpl implements MetricsService {
+
+ @Autowired ConnectionService connectionService;
+ @Autowired IotDBService iotDBService;
+
+ private static final Logger logger = LoggerFactory.getLogger(IotDBServiceImpl.class);
+
+ public JVMMetricsListDataVO getCurrentThreadsCount(Connection connection) throws BaseException {
+ String name = "JVM当前线程数";
+ String metricType = "线程";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 1;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ 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";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(2);
+ String s2 = values.get(1);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ s2 = s2.substring(0, s2.indexOf('.'));
+ int totalThreadCount = Integer.parseInt(s1);
+ int demoThreadCount = Integer.parseInt(s2);
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult =
+ "前台:"
+ + (totalThreadCount - demoThreadCount)
+ + "个,后台:"
+ + demoThreadCount
+ + "个,线程总数:"
+ + totalThreadCount
+ + "个";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getCurrentDaemonThreadsCount(Connection connection)
+ throws BaseException {
+ String name = "当前daemon线程数";
+ String metricType = "线程";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.threads.daemon\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ int daemonThreadCount = Integer.parseInt(s1);
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = daemonThreadCount + "个";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getPeakThreadsCount(Connection connection) throws BaseException {
+ String name = "峰值线程数";
+ String metricType = "线程";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.threads.peak\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ int daemonThreadCount = Integer.parseInt(s1);
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = daemonThreadCount + "个";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getVariableThreadsCount(Connection connection) throws BaseException {
+ String name = "处于各种状态的线程数";
+ String metricType = "线程";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ 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 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ String s2 = values.get(2);
+ String s3 = values.get(3);
+ String s4 = values.get(4);
+ String s5 = values.get(5);
+ String s6 = values.get(6);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ s2 = s2.substring(0, s2.indexOf('.'));
+ s3 = s3.substring(0, s3.indexOf('.'));
+ s4 = s4.substring(0, s4.indexOf('.'));
+ s5 = s5.substring(0, s5.indexOf('.'));
+ s6 = s6.substring(0, s6.indexOf('.'));
+ int newThreadCount = Integer.parseInt(s1);
+ int waitingThreadCount = Integer.parseInt(s2);
+ int runnableThreadCount = Integer.parseInt(s3);
+ int blockedThreadCount = Integer.parseInt(s4);
+ int timedWaitingThreadCount = Integer.parseInt(s5);
+ int terminatedThreadCount = Integer.parseInt(s6);
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult =
+ "新建("
+ + newThreadCount
+ + ")、"
+ + "可运行("
+ + waitingThreadCount
+ + ")、"
+ + "运行("
+ + runnableThreadCount
+ + ")、"
+ + "阻塞("
+ + blockedThreadCount
+ + ")、"
+ + "休眠("
+ + timedWaitingThreadCount
+ + ")、"
+ + "死亡("
+ + terminatedThreadCount
+ + ")";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getYGCHappendCountAndCostTime(Connection connection)
+ throws BaseException {
+ String name = "YGC发生次数及总耗时";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ SessionPool sessionPool = getSessionPool(connection);
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String countSQL =
+ "select * from "
+ + "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 minor GC\".\"cause=Metadata GC Threshold\" "
+ + "order by time desc limit 1";
+ String timeSQL =
+ "select * from "
+ + "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 minor GC\".\"cause=Metadata GC Threshold\" "
+ + "order by time desc limit 1";
+ List<String> countValues = executeQueryOneLine(sessionPool, countSQL);
+ List<String> timeValues = executeQueryOneLine(sessionPool, timeSQL);
+ long lastestTimeStamp = Long.parseLong(countValues.get(0));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ Integer detailAvailable = 2;
+ String s1 = countValues.get(1);
+ String s2 = countValues.get(2);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ s2 = s2.substring(0, s2.indexOf('.'));
+ int count = Integer.parseInt(s1) + Integer.parseInt(s2);
+ double time =
+ (Double.parseDouble(timeValues.get(1)) + Double.parseDouble(timeValues.get(2))) / 1000;
+ String latestResult = count + "次 " + time + "s";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getYGCMaxCostTimeAndReason(Connection connection)
+ throws BaseException {
+ String name = "YGC最大耗时及原因";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ SessionPool sessionPool = getSessionPool(connection);
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String timeSQL =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.pause_max\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.pause_max\".\"action=end of minor GC\".\"cause=Allocation Failure\" "
+ + "order by time desc limit 1";
+ List<String> timeValues = executeQueryOneLine(sessionPool, timeSQL);
+ long lastestTimeStamp = Long.parseLong(timeValues.get(0));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ Integer detailAvailable = 2;
+ String latestResult =
+ Double.parseDouble(timeValues.get(1)) / 1000
+ + "s(Metadata GC Threshold)、"
+ + Double.parseDouble(timeValues.get(2)) / 1000
+ + "s(Allocation Failure)";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getFGCHappendCountAndCostTime(Connection connection)
+ throws BaseException {
+ String name = "FGC发生次数及总耗时";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ SessionPool sessionPool = getSessionPool(connection);
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String countSQL =
+ "select * from "
+ +
+ // "root._metric.\"127.0.0.1:8086\".\"jvm.gc.pause_count\".\"action=end of
+ // major 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:8086\".\"jvm.gc.pause_count\".\"action=end of
+ // major GC\".\"cause=Ergonomics\" " +
+ "order by time desc limit 1";
+ String timeSQL =
+ "select * from "
+ +
+ // "root._metric.\"127.0.0.1:8086\".\"jvm.gc.pause_total\".\"action=end of
+ // major GC\".\"cause=Allocation Failure\", " +
+ "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.pause_total\".\"action=end of major GC\".\"cause=Metadata GC Threshold\" "
+ +
+ // "root._metric.\"127.0.0.1:8086\".\"jvm.gc.pause_total\".\"action=end of
+ // major GC\".\"cause=Ergonomics\" " +
+ "order by time desc limit 1";
+ List<String> countValues = executeQueryOneLine(sessionPool, countSQL);
+ List<String> timeValues = executeQueryOneLine(sessionPool, timeSQL);
+ long lastestTimeStamp = Long.parseLong(countValues.get(0));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ Integer detailAvailable = 2;
+ // TODO: IOTDB BUG 等待修复
+ String s1 = countValues.get(1).equals("null") ? "0.0" : countValues.get(1);
+ // String s2 = countValues.get(2).equals("null") ? "0.0" : countValues.get(2);
+ // String s3 = countValues.get(3).equals("null") ? "0.0" : countValues.get(3);
+
+ s1 = s1.substring(0, s1.indexOf('.'));
+ // s2 = s2.substring(0, s2.indexOf('.'));
+ // s3 = s3.substring(0, s3.indexOf('.'));
+ // int count = Integer.parseInt(s1) + Integer.parseInt(s2) + Integer.parseInt(s3);
+ int count = Integer.parseInt(s1);
+ // TODO: IOTDB BUG 等待修复
+ double d1 = timeValues.get(1).equals("null") ? 0.0 : Double.parseDouble(timeValues.get(1));
+ // double d2 = timeValues.get(2).equals("null")? 0.0 : Double.parseDouble(timeValues.get(2));
+ // double d3 = timeValues.get(3).equals("null")? 0.0 : Double.parseDouble(timeValues.get(3));
+ // double time = d1 + d2 + d3;
+ double time = (d1) / 1000;
+ String latestResult = count + "次 " + time + "s";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getFGCMaxCostTimeAndReason(Connection connection)
+ throws BaseException {
+ String name = "FGC最大耗时及原因";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ SessionPool sessionPool = getSessionPool(connection);
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String timeSQL =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.pause_max\".\"action=end of major GC\".\"cause=Metadata GC Threshold\" "
+ +
+ // "root._metric.\"127.0.0.1:8086\".\"jvm.gc.pause_max\".\"action=end of
+ // major GC\".\"cause=Allocation Failure\", " +
+ // "root._metric.\"127.0.0.1:8086\".\"jvm.gc.pause_max\".\"action=end of
+ // major GC\".\"cause=Ergonomics\" " +
+ "order by time desc limit 1";
+ List<String> timeValues = executeQueryOneLine(sessionPool, timeSQL);
+ long lastestTimeStamp = Long.parseLong(timeValues.get(0));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ Integer detailAvailable = 2;
+ // TODO: IOTDB BUG 等待修复
+ String s1 = timeValues.get(1).equals("null") ? "0.0" : timeValues.get(1);
+ // String s2 = timeValues.get(2).equals("null")? "0.0" : timeValues.get(2);
+ // String s3 = timeValues.get(3).equals("null")? "0.0" : timeValues.get(3);
+ // String latestResult = timeValues.get(1)+"s(Metadata GC
+ // Threshold)、"+timeValues.get(2)+"s(Allocation Failure)、"+timeValues.get(3)+"s(Ergonomics)";
+ String latestResult = Double.parseDouble(timeValues.get(1)) / 1000 + "s(Metadata GC Threshold)";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getGCCPUoverhead(Connection connection) throws BaseException {
+ String name = "GC消耗CPU的比例";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.overhead\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ double percent = Double.parseDouble(values.get(1));
+ BigDecimal b = new BigDecimal(percent);
+ double percent1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = percent1 + "%";
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getGCPromoted(Connection connection) throws BaseException {
+ String name = "从GC之前到GC之后老年代内存池大小正增长的累计";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.memory.promoted\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = getNetFileSizeDescription((long) (Double.parseDouble(values.get(1))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getMajorMemoryMaxValueEver(Connection connection)
+ throws BaseException {
+ String name = "老年代内存的历史最大值";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.max.data.size\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = getNetFileSizeDescription((long) (Double.parseDouble(values.get(1))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getMajorMemorySizeAfterGC(Connection connection)
+ throws BaseException {
+ String name = "GC之后老年代内存的大小";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.live.data.size\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = getNetFileSizeDescription((long) (Double.parseDouble(values.get(1))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getMinorMemorySizeAddedBetweentwoGC(Connection connection)
+ throws BaseException {
+ String name = "在一个GC之后到下一个GC之前年轻代增加的内存";
+ String metricType = "垃圾回收";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.gc.memory.allocated\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = getNetFileSizeDescription((long) (Double.parseDouble(values.get(1))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getBufferUsed(Connection connection) throws BaseException {
+ String name = "已经使用的缓冲区大小";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ 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\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count =
+ getNetFileSizeDescription(
+ (long) (Double.parseDouble(values.get(1)) + Double.parseDouble(values.get(2))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getMaxBuffer(Connection connection) throws BaseException {
+ String name = "最大缓冲区大小";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "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 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count =
+ getNetFileSizeDescription(
+ (long) (Double.parseDouble(values.get(1)) + Double.parseDouble(values.get(2))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getBufferCount(Connection connection) throws BaseException {
+ String name = "当前缓冲区数量";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.buffer.count\".\"id=mapped\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.buffer.count\".\"id=direct\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ String s2 = values.get(2);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ s2 = s2.substring(0, s2.indexOf('.'));
+ String latestResult = (Integer.parseInt(s1) + Integer.parseInt(s2)) + "个";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMCommittedMemorySize(Connection connection)
+ throws BaseException {
+ String name = "当前向JVM申请的内存大小";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.memory.committed\".\"area=nonheap\".\"id=Compressed Class Space\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.memory.committed\".\"area=nonheap\".\"id=Code Cache\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.memory.committed\".\"area=nonheap\".\"id=Metaspace\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.memory.committed\".\"area=heap\".\"id=PS Old Gen\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.memory.committed\".\"area=heap\".\"id=PS Eden Space\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.memory.committed\".\"area=heap\".\"id=PS Survivor Space\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count =
+ getNetFileSizeDescription(
+ (long)
+ (Double.parseDouble(values.get(1))
+ + Double.parseDouble(values.get(2))
+ + Double.parseDouble(values.get(3))
+ + Double.parseDouble(values.get(4))
+ + Double.parseDouble(values.get(5))
+ + Double.parseDouble(values.get(6))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMMemoryMaxSize(Connection connection) throws BaseException {
+ String name = "JVM最大内存";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ 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\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count =
+ getNetFileSizeDescription(
+ (long)
+ (Double.parseDouble(values.get(1))
+ + Double.parseDouble(values.get(2))
+ + Double.parseDouble(values.get(3))
+ + Double.parseDouble(values.get(4))
+ + Double.parseDouble(values.get(5))
+ + Double.parseDouble(values.get(6))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMMemoryUsedSize(Connection connection) throws BaseException {
+ String name = "JVM已使用内存大小";
+ String metricType = "内存";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "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 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count =
+ getNetFileSizeDescription(
+ (long)
+ (Double.parseDouble(values.get(1))
+ + Double.parseDouble(values.get(2))
+ + Double.parseDouble(values.get(3))
+ + Double.parseDouble(values.get(4))
+ + Double.parseDouble(values.get(5))
+ + Double.parseDouble(values.get(6))));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = count;
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMUnloadedClassesTotal(Connection connection)
+ throws BaseException {
+ String name = "JVM累计卸载的Class数量";
+ String metricType = "Classes";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.classes.unloaded\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ String latestResult = Integer.parseInt(s1) + "个";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMloadedClassesTotal(Connection connection) throws BaseException {
+ String name = "JVM累计加载的Class数量";
+ String metricType = "Classes";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.classes.loaded\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ String latestResult = Integer.parseInt(s1) + "个";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public JVMMetricsListDataVO getJVMCompilationTime(Connection connection) throws BaseException {
+ String name = "JVM耗费在编译上的时间";
+ String metricType = "Classes";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"jvm.compilation.time\".\"compiler=HotSpot 64-Bit Tiered Compilers\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = values.get(1) + "s";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ JVMMetricsListDataVO jvmMetricsListDataVO = new JVMMetricsListDataVO();
+ jvmMetricsListDataVO.setMetricType(metricType);
+ jvmMetricsListDataVO.setDetailAvailable(detailAvailable);
+ jvmMetricsListDataVO.setLatestResult(latestResult);
+ jvmMetricsListDataVO.setLatestScratchTime(latestScratchTime);
+ jvmMetricsListDataVO.setName(name);
+ return jvmMetricsListDataVO;
+ }
+
+ public MetricsListDataVO getCPUUsed(Connection connection) throws BaseException {
+ String name = "CPU使用率";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_cpu_load\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = values.get(1) + "%";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getCPUCores(Connection connection) throws BaseException {
+ String name = "CPU核数";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_cpu_cores\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String s1 = values.get(1);
+ s1 = s1.substring(0, s1.indexOf('.'));
+ String latestResult = s1 + "核";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getCPUTime(Connection connection) throws BaseException {
+ String name = "CPU Time";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"process_cpu_time\".\"name=process\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String timeStr = values.get(1);
+ 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--;
+ }
+ String latestResult = (float) (time / 1000000000) + "s";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getTotalMem(Connection connection) throws BaseException {
+ String name = "物理内存大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ String str = connection.getHost();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_total_physical_memory_size\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = getNetFileSizeDescription((long) Double.parseDouble(values.get(1)));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getProcessRatio(Connection connection) throws BaseException {
+ String name = "IoTDB进程内存占用比例";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"process_mem_ratio\".\"name=process\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ String latestResult = values.get(1) + "%";
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getDiskTotalSize(Connection connection) throws BaseException {
+ String name = "磁盘总大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_disk_total_space\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = getNetFileSizeDescription((long) Double.parseDouble(values.get(1)));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getDiskLoadSize(Connection connection) throws BaseException {
+ // TODO: 假数据,等待iotdb增加该指标
+ String name = "磁盘挂载";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_disk_total_space\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ // String latestResult = getNetFileSizeDescription((long)Double.parseDouble(values.get(1)));
+ String latestResult = "【假数据:指标暂缺】2G";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getDiskAvailableSize(Connection connection) throws BaseException {
+ String name = "磁盘剩余";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_disk_free_space\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String latestResult = getNetFileSizeDescription((long) Double.parseDouble(values.get(1)));
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getDiskIO(Connection connection) throws BaseException {
+ String name = "磁盘IO吞吐";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"sys_disk_free_space\".\"name=system\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ // String latestResult = getNetFileSizeDescription((long)Double.parseDouble(values.get(1)));
+ String latestResult = "【假数据:指标暂缺】136K/s";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getWalFileCountAndSize(Connection connection) throws BaseException {
+ String name = "wal日志文件数量及大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ 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_size\".\"name=wal\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "数量:" + count + ";" + "大小:" + size;
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getSeqTSFileCountAndSize(Connection connection) throws BaseException {
+ String name = "顺序TsFile文件数量及大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_count\".\"name=seq\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_size\".\"name=seq\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "数量:" + count + ";" + "大小:" + size;
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getUnSeqTSFileCountAndSize(Connection connection) throws BaseException {
+ String name = "乱序TsFile文件数量及大小";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_count\".\"name=unseq\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_size\".\"name=unseq\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "数量:" + count + ";" + "大小:" + size;
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getWriteDelay(Connection connection) throws BaseException {
+ String name = "写入延迟(最近一分钟)";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_count\".\"name=unseq\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_size\".\"name=unseq\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "【假数据:指标暂缺】" + "90" + "%";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getWriteSucceedCount(Connection connection) throws BaseException {
+ String name = "查询成功次数(最近1分钟)";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_count\".\"name=unseq\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_size\".\"name=unseq\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "【假数据:指标暂缺】" + "100" + "次";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getWriteFailedCount(Connection connection) throws BaseException {
+ String name = "查询失败次数(最近1分钟)";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_count\".\"name=unseq\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_size\".\"name=unseq\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "【假数据:指标暂缺】" + "20" + "次";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ public MetricsListDataVO getWriteSucceedRatio(Connection connection) throws BaseException {
+ String name = "查询成功率";
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Integer detailAvailable = 0;
+ int port = connection.getPort();
+ // TODO bug 修复后删除
+ if (port == 6668) {
+ port = 8086;
+ }
+ String sql =
+ "select * from "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_count\".\"name=unseq\", "
+ + "root._metric.\"127.0.0.1:"
+ + port
+ + "\".\"file_size\".\"name=unseq\" "
+ + "order by time desc limit 1";
+ SessionPool sessionPool = getSessionPool(connection);
+ List<String> values = executeQueryOneLine(sessionPool, sql);
+ long lastestTimeStamp = Long.parseLong(values.get(0));
+ String count = values.get(1);
+ count = count.substring(0, count.indexOf('.'));
+ String size = getNetFileSizeDescription((long) Double.parseDouble(values.get(2)));
+ String latestResult = "【假数据:指标暂缺】" + "80" + "%";
+ String latestScratchTime = simpleDateFormat.format(lastestTimeStamp);
+ MetricsListDataVO metricsListDataVO = new MetricsListDataVO();
+ metricsListDataVO.setDetailAvailable(detailAvailable);
+ metricsListDataVO.setLatestResult(latestResult);
+ metricsListDataVO.setLatestScratchTime(latestScratchTime);
+ metricsListDataVO.setName(name);
+ return metricsListDataVO;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getJVMMetricsDataList(Connection connection) throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ list.add(getCurrentThreadsCount(connection));
+ list.add(getCurrentDaemonThreadsCount(connection));
+ list.add(getPeakThreadsCount(connection));
+ list.add(getVariableThreadsCount(connection));
+ list.add(getYGCHappendCountAndCostTime(connection));
+ list.add(getYGCMaxCostTimeAndReason(connection));
+ list.add(getFGCHappendCountAndCostTime(connection));
+ list.add(getFGCMaxCostTimeAndReason(connection));
+ list.add(getGCCPUoverhead(connection));
+ list.add(getGCPromoted(connection));
+ list.add(getMajorMemoryMaxValueEver(connection));
+ list.add(getMajorMemorySizeAfterGC(connection));
+ list.add(getMinorMemorySizeAddedBetweentwoGC(connection));
+ list.add(getBufferUsed(connection));
+ list.add(getMaxBuffer(connection));
+ list.add(getBufferCount(connection));
+ list.add(getJVMCommittedMemorySize(connection));
+ list.add(getJVMMemoryMaxSize(connection));
+ list.add(getJVMMemoryUsedSize(connection));
+ list.add(getJVMUnloadedClassesTotal(connection));
+ list.add(getJVMloadedClassesTotal(connection));
+ list.add(getJVMCompilationTime(connection));
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getCPUMetricsDataList(Connection connection) throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ list.add(getCPUCores(connection));
+ list.add(getCPUUsed(connection));
+ list.add(getCPUTime(connection));
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getMemMetricsDataList(Connection connection) throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ list.add(getTotalMem(connection));
+ list.add(getProcessRatio(connection));
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getDiskMetricsDataList(Connection connection)
+ throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ list.add(getDiskTotalSize(connection));
+ list.add(getDiskLoadSize(connection));
+ list.add(getDiskAvailableSize(connection));
+ list.add(getDiskIO(connection));
+ list.add(getWalFileCountAndSize(connection));
+ list.add(getSeqTSFileCountAndSize(connection));
+ list.add(getUnSeqTSFileCountAndSize(connection));
+ return list;
+ }
+
+ @Override
+ public List<MetricsListDataVO> getWriteMetricsDataList(Connection connection)
+ throws BaseException {
+ List<MetricsListDataVO> list = new ArrayList<>();
+ list.add(getWriteDelay(connection));
+ list.add(getWriteSucceedCount(connection));
+ list.add(getWriteFailedCount(connection));
+ list.add(getWriteFailedCount(connection));
+ list.add(getWriteSucceedRatio(connection));
+ return list;
+ }
+
+ @Override
+ public MetircsQueryClassificationVO getMetircsQueryClassification(Integer serverId) {
+ // TODO:等待清华提供查询分类的接口
+ List<QueryClassificationVO> fakeData = new ArrayList<>();
+ for (int i = 0; i < 6; i++) {
+ QueryClassificationVO queryClassificationVO = new QueryClassificationVO();
+ queryClassificationVO.setId(i + 1);
+ queryClassificationVO.setName("查询分类" + (i + 1));
+ queryClassificationVO.setFlag(i % 2 == 0 ? 1 : 0);
+ fakeData.add(queryClassificationVO);
+ }
+ MetircsQueryClassificationVO metircsQueryClassificationVO = new MetircsQueryClassificationVO();
+ metircsQueryClassificationVO.setServerId(serverId);
+ metircsQueryClassificationVO.setClassificationList(fakeData);
+ return metircsQueryClassificationVO;
+ }
+
+ @Override
+ public QueryInfoVO getQueryInfo(
+ Integer serverId,
+ Integer queryClassificationId,
+ Integer pageSize,
+ Integer pageNum,
+ String filterString,
+ String startTimeStr,
+ String endTimeStr,
+ Integer executionResult)
+ throws BaseException {
+ long startTime = Long.parseLong(startTimeStr);
+ long endTime = Long.parseLong(endTimeStr);
+ Connection connection = connectionService.getById(serverId);
+ QueryInfoDTO queryInfoDTO =
+ iotDBService.getQueryInfoListByQueryClassificationId(
+ connection,
+ queryClassificationId,
+ pageSize,
+ pageNum,
+ filterString,
+ startTime,
+ endTime,
+ executionResult);
+ QueryInfoVO queryInfoVO = new QueryInfoVO();
+ queryInfoVO.setQueryClassificationId(queryClassificationId);
+ String pattern = "yyyy-MM-dd' 'HH:mm:ss.SSS";
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+ Long latestRunningTime = queryInfoDTO.getLatestRunningTime();
+ queryInfoVO.setLatestRunningTime(
+ latestRunningTime == 0 ? null : simpleDateFormat.format(latestRunningTime));
+ BeanUtils.copyProperties(queryInfoDTO, queryInfoVO);
+ queryInfoVO.setServerId(serverId);
+ return queryInfoVO;
+ }
+
+ @Override
+ public MetricsDataCountVO getMetricsDataCount(Integer serverId) throws BaseException {
+ Connection connection = connectionService.getById(serverId);
+ DataCountVO dataCountVO = new DataCountVO();
+ MetricsDataCountVO metricsDataCountVO = new MetricsDataCountVO();
+ DataCountVO dataCount = new DataCountVO();
+ try {
+ dataCount = iotDBService.getDataCount(connection);
+ metricsDataCountVO.setStatus(true);
+ } catch (BaseException e) {
+ metricsDataCountVO.setStatus(false);
+ }
+ metricsDataCountVO.setServerId(serverId);
+ metricsDataCountVO.setUrl(connection.getHost());
+ metricsDataCountVO.setPort(connection.getPort());
+ BeanUtils.copyProperties(dataCount, metricsDataCountVO);
+ metricsDataCountVO.setDataCount(dataCount.getDataCount());
+ return metricsDataCountVO;
+ }
+
+ @Override
+ public MetricsDataForListVO getMetricsDataForList(Integer serverId, Integer metricsType)
+ throws BaseException {
+ Connection connection = connectionService.getById(serverId);
+ List<MetricsListDataVO> metricsDataList = null;
+ // TODO:具体区分和判断等待清华提供方案和策略
+ switch (metricsType) {
+ case 0:
+ metricsDataList = getJVMMetricsDataList(connection);
+ break;
+ case 1:
+ metricsDataList = getCPUMetricsDataList(connection);
+ break;
+ case 2:
+ metricsDataList = getMemMetricsDataList(connection);
+ break;
+ case 3:
+ metricsDataList = getDiskMetricsDataList(connection);
+ break;
+ case 4:
+ metricsDataList = getWriteMetricsDataList(connection);
+ break;
+ }
+ MetricsDataForListVO metricsDataForListVO = new MetricsDataForListVO();
+ metricsDataForListVO.setServerId(serverId);
+ metricsDataForListVO.setMetricsType(metricsType);
+ metricsDataForListVO.setListInfo(metricsDataList);
+ return metricsDataForListVO;
+ }
+
+ public static SessionPool getSessionPool(Connection connection) throws BaseException {
+ String host = connection.getHost();
+ Integer port = connection.getPort();
+ String username = connection.getUsername();
+ String password = connection.getPassword();
+ SessionPool sessionPool = null;
+ try {
+ sessionPool = new SessionPool(host, port, username, password, 3);
+ } catch (Exception e) {
+ throw new BaseException(ErrorCode.GET_SESSION_FAIL, ErrorCode.GET_SESSION_FAIL_MSG);
+ }
+ return sessionPool;
+ }
+
+ private List<String> executeQueryOneLine(SessionPool sessionPool, String sql)
+ throws BaseException {
+ SessionDataSetWrapper sessionDataSetWrapper = null;
+ try {
+ List<String> valueList = new ArrayList<>();
+ sessionDataSetWrapper = sessionPool.executeQueryStatement(sql);
+ if (sessionDataSetWrapper.hasNext()) {
+ RowRecord rowRecord = sessionDataSetWrapper.next();
+ valueList.add(rowRecord.getTimestamp() + "");
+ List<org.apache.iotdb.tsfile.read.common.Field> fields = rowRecord.getFields();
+ for (org.apache.iotdb.tsfile.read.common.Field field : fields) {
+ valueList.add(field.toString());
+ }
+ }
+ return valueList;
+ } catch (IoTDBConnectionException e) {
+ logger.error(e.getMessage());
+ throw new BaseException(ErrorCode.GET_SESSION_FAIL, ErrorCode.GET_SESSION_FAIL_MSG);
+ } catch (StatementExecutionException e) {
+ logger.error(e.getMessage());
+ throw new BaseException(ErrorCode.SQL_EP, ErrorCode.SQL_EP_MSG);
+ } finally {
+ closeResultSet(sessionDataSetWrapper);
+ }
+ }
+
+ private void closeSessionPool(SessionPool sessionPool) {
+ if (sessionPool != null) {
+ sessionPool.close();
+ }
+ }
+
+ private void closeResultSet(SessionDataSetWrapper sessionDataSetWrapper) {
+ if (sessionDataSetWrapper != null) {
+ sessionDataSetWrapper.close();
+ }
+ }
+
+ private static String getNetFileSizeDescription(long size) {
+ StringBuffer bytes = new StringBuffer();
+ DecimalFormat format = new DecimalFormat("###.0");
+ if (size >= 1024 * 1024 * 1024) {
+ double i = (size / (1024.0 * 1024.0 * 1024.0));
+ bytes.append(format.format(i)).append("GB");
+ } else if (size >= 1024 * 1024) {
+ double i = (size / (1024.0 * 1024.0));
+ bytes.append(format.format(i)).append("MB");
+ } else if (size >= 1024) {
+ double i = (size / (1024.0));
+ bytes.append(format.format(i)).append("KB");
+ } else if (size < 1024) {
+ if (size <= 0) {
+ bytes.append("0B");
+ } else {
+ bytes.append((int) size).append("B");
+ }
+ }
+ return bytes.toString();
+ }
+}