blob: 4137090c72e35b8b619ab11b70dea09a5b698624 [file] [log] [blame]
/*
* 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.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;
@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;
}
}