package com.ruoyi.dbm.db2.service.impl;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.frameworkset.elasticsearch.entity.MapSearchHit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bboss.es.domain.ESQueryConfig;
import com.ruoyi.bboss.es.domain.ESQueryResult;
import com.ruoyi.bboss.es.search.service.IESAnalysisPrimaryAggCountService;
import com.ruoyi.bboss.es.utils.ESColumnOrderUtils;
import com.ruoyi.common.bean.GlobalVars;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.ExcelTable;
import com.ruoyi.common.core.domain.WordTable;
import com.ruoyi.common.core.domain.WordTitleType;
import com.ruoyi.common.deal.utils.HiNumberUtils;
import com.ruoyi.common.deal.utils.HiStringUtils;
import com.ruoyi.common.deal.utils.HiTimeUtils;
import com.ruoyi.common.utils.poi.WordTableUtil;
import com.ruoyi.dbm.db2.dao.DbCapacityReportDao;
import com.ruoyi.dbm.db2.domain.DbInfo;
import com.ruoyi.dbm.db2.service.IDbCapacityReportService;
import com.ruoyi.dbm.db2.service.IDbInfoService;
import com.ruoyi.dbm.utils.DSLCommonUtils;
import com.ruoyi.xxl.job.domain.ExecutorType;
import com.ruoyi.xxl.job.domain.TaskLog;
import com.ruoyi.xxl.job.domain.TaskType;
import com.ruoyi.xxl.job.service.ITaskLogService;
/**
* DB2容量月报表
* @comment 1.报表数据展示
* @comment 2.Word数据导出
* @comment 3.Excel数据导出
* @author liuy 2020-04-26
*/
@Service
public class DbCapacityReportServiceImpl implements IDbCapacityReportService {
@Autowired
private IDbInfoService dbInfoService;
@Autowired
private ITaskLogService taskLogService;
@Autowired
private IESAnalysisPrimaryAggCountService esAnalysisPrimaryAggCountService;
@Autowired
private DbCapacityReportDao dbCapacityReportDao;
//一、数据查询
/**
* 1.查询超过80%以上的数据库表空间
* @need 列出80%以上的数据库表空间
* @param tbspThreshold
* @comment 时间限制1天,一天采集次,每个表空间获取最后一条数据
* @aggs aggs+top_hits
* @index tbsp-capacity(TS_UTILIZATION_PERCENT)
* @return List<Map<String, Object>>
*/
@Override
@SuppressWarnings("unchecked")
public List<Map<String, Object>> getTbspCapacityOverThreshold(Integer tbspThreshold) {
Float thresholdFloat = (float) HiNumberUtils.toInt(tbspThreshold, 85);
List<MapSearchHit> elasticList = dbCapacityReportDao.getTbspCapacityAggsTopHitsData();//查询ES数据
if (elasticList ==null || elasticList.size()==0) {return new ArrayList<Map<String, Object>>();}
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for(MapSearchHit elasticMap : elasticList){
if(elasticMap == null || elasticMap.getSource() ==null){continue;}
Map<String,Object> sourceMap = elasticMap.getSource();
String instNameTmp = HiStringUtils.toStr(sourceMap.get("instance"));
String dbNameTmp = HiStringUtils.toStr(sourceMap.get("dbName"));
String timestampTmp = HiStringUtils.toStr(sourceMap.get("@timestamp"));
Map<String,Object> dataMap = (Map<String, Object>) sourceMap.get("data");
String tsNameTmp = HiStringUtils.toStr(dataMap.get("TS_NAME"));
Float tsUtilizationPercentTmp = HiNumberUtils.toFloat(dataMap.get("TS_UTILIZATION_PERCENT"));
Long tsUsableSizeKBTmp = HiNumberUtils.toLong(dataMap.get("TS_USABLE_SIZE_KB"));
if (tsUtilizationPercentTmp ==null || tsUtilizationPercentTmp <thresholdFloat) {continue;} //校验使用率阈值,<阈值,直接过滤
Map<String, Object> map = new HashMap<String, Object>();
map.put("instName", instNameTmp);
map.put("dbName", dbNameTmp);
map.put("tsName", tsNameTmp);
map.put("tsUtilizationPercent", tsUtilizationPercentTmp);
map.put("tsUsableSizeKB", tsUsableSizeKBTmp);
map.put("timestamp", timestampTmp);
list.add(map);
}
return list;
}
/**
* 2.1数据库情况概述-新增功能
* @param dbDescLog(日志内容)
* @return ReturnT
*/
@Override
public AjaxResult insertDbDescLog(String userName, String dbDescLog) {
if (StringUtils.isEmpty(dbDescLog)) {return AjaxResult.error("请输入:数据库情况概述!");}
Boolean isSuccess = taskLogService.insertTaskLog(TaskType.DB_DESC_LOG, ExecutorType.TEXTEDIT, GlobalVars.DB_DESC_LOG, dbDescLog, userName);
return isSuccess ? AjaxResult.success("添加成功") : AjaxResult.error("添加失败!");
}
/**
* 2.2数据库情况概述-描述信息
* @return TaskLog
*/
@Override
public TaskLog getTextContext() {
List<DbInfo> dbInfoList = dbInfoService.selectDbInfoIsCaptureAll();
int dbCnt = (dbInfoList !=null && !dbInfoList.isEmpty())? dbInfoList.size() : 0;
List<Map<String, Object>> tbspCapacityList = getTbspCapacityOverThreshold(80);
String textContext = " 目前小型机生产系统上DB2数据库有"+dbCnt+"个。数据库总体运行情况良好,性能稳定。";
textContext += "经过对数据库表空间的扩展,绝大部分数据库的容量情况良好,表空间使用率在80%以上"+tbspCapacityList.size()+"个。由于HDS磁盘已经用完,DBA正在进行数据库数据的清理以及数据的压缩。";
TaskLog taskLog = new TaskLog();
taskLog.setTriggerMsg(textContext);
return taskLog;
}
/**
* 3.排名前10的数据库列表
* @need 指定日期,统计月末报表的,数据库大小(TB)
* @param yearMonthDay(10位日期:2019-12-31)
* @aggs date_histogram
* @index db-size(DBSIZE)
* @return List<Map<String, Object>>,单位:TB
*/
@Override
@SuppressWarnings("unchecked")
public List<Map<String, Object>> getDbSizeMonthEndDayTop10(String yearMonthDay) {
if (StringUtils.isEmpty(yearMonthDay) || yearMonthDay.length() <10) {return new ArrayList<Map<String, Object>>();}
List<MapSearchHit> elasticList = dbCapacityReportDao.getDbSizeMonthEndAggsTopHitsData(yearMonthDay);
if (elasticList ==null || elasticList.size()==0) {return new ArrayList<Map<String, Object>>();}
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for(MapSearchHit elasticMap : elasticList){
if(elasticMap == null){continue;}
Map<String,Object> sourceMap = elasticMap.getSource();
String instNameTmp = HiStringUtils.toStr(sourceMap.get("instance"));
String dbNameTmp = HiStringUtils.toStr(sourceMap.get("dbName"));
String timestampTmp = HiStringUtils.toStr(sourceMap.get("@timestamp"));
Map<String,Object> dataMap = (Map<String, Object>) sourceMap.get("data");
Double dbSizeTmp = HiNumberUtils.toDouble(dataMap.get("DBSIZE"));
String exeTimeTmp = HiStringUtils.toStr(dataMap.get("EXE_TIME"));
Map<String, Object> map = new HashMap<String, Object>();
map.put("instName", instNameTmp);
map.put("dbName", dbNameTmp);
map.put("dbSize", dbSizeTmp); //单位为KB
map.put("exeTime", exeTimeTmp);
map.put("timestamp", timestampTmp);
list.add(map);
}
DSLCommonUtils.getDoubleColumnOrderBy(list, "dbSize", "desc"); //倒序
list = (list.size()>10) ? list.subList(0, 10) : list; //TOP10
return list;
}
//Word数据下载(单位:TB)
//实例名,数据库名,采集时间,数据库大小
private List<List<String>> getDbSizeMonthEndDayTop10WordExport(String yearMonthDay) {
List<List<String>> dataList= new ArrayList<List<String>>();
List<Map<String, Object>> dbSizeTop10List = getDbSizeMonthEndDayTop10(yearMonthDay);
if (dbSizeTop10List !=null && !dbSizeTop10List.isEmpty()) {
for (Map<String, Object> dbSizeTop10Map : dbSizeTop10List) {
String instance = HiStringUtils.toStr(dbSizeTop10Map.get("instName"));
String dbName = HiStringUtils.toStr(dbSizeTop10Map.get("dbName"));
Double dbSiz
没有合适的资源?快使用搜索试试~ 我知道了~
RuoYi前后端不分离项目整合LDAP
共2000个文件
svn-base:2180个
html:1176个
class:1050个
6 下载量 35 浏览量
2023-07-06
11:26:38
上传
评论 1
收藏 74.51MB ZIP 举报
温馨提示
基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合
资源推荐
资源详情
资源评论
收起资源包目录
RuoYi前后端不分离项目整合LDAP (2000个子文件)
bootstrap.css 178KB
bootstrap.css 178KB
summernote-bs3.css 149KB
summernote-bs3.css 149KB
style.css 136KB
style.css 136KB
bootstrap.min14ed.css 118KB
bootstrap.min14ed.css 118KB
bootstrap.min.css 118KB
bootstrap.min.css 118KB
style.min862f.css 97KB
style.min862f.css 97KB
style.min862f.css 97KB
style.min862f.css 97KB
animate.css 67KB
animate.css 67KB
app.css 58KB
app.css 58KB
ionicons.css 55KB
ionicons.css 55KB
animate.min.css 46KB
animate.min.css 46KB
font-awesome.css 33KB
font-awesome.css 33KB
vis.css 32KB
vis.css 32KB
bootstrap-datepicker3.min.css 31KB
bootstrap-datepicker3.min.css 31KB
font-awesome.min.css 30KB
font-awesome.min.css 30KB
font-awesome.min93e3.css 26KB
font-awesome.min93e3.css 26KB
fullcalendar.css 25KB
fullcalendar.css 25KB
swiper.min.css 19KB
swiper.min.css 19KB
ry-ui.css 19KB
ry-ui.css 19KB
summernote.css 18KB
summernote.css 18KB
select2.css 18KB
select2.css 18KB
select2.css 18KB
select2.css 18KB
select2-bootstrap.css 16KB
select2-bootstrap.css 16KB
select2-bootstrap.css 16KB
select2-bootstrap.css 16KB
select2-bootstrap.css 16KB
select2-bootstrap.css 16KB
hidbm.css 15KB
hidbm.css 15KB
skins.css 15KB
skins.css 15KB
select2.min.css 15KB
select2.min.css 15KB
select2.min.css 15KB
select2.min.css 15KB
select2.css 15KB
select2.css 15KB
layer.css 15KB
layer.css 15KB
layer.css 15KB
layer.css 15KB
vis-network.min.css 14KB
vis-network.min.css 14KB
vis-network.min.css 14KB
vis-network.min.css 14KB
chosen.css 12KB
chosen.css 12KB
bootstrap-datetimepicker.css 12KB
bootstrap-datetimepicker.css 12KB
bootstrap-select.css 12KB
bootstrap-select.css 12KB
bootstrap-select.css 12KB
bootstrap-select.css 12KB
fullcalendar.min.css 12KB
fullcalendar.min.css 12KB
bootstrap-datetimepicker.min.css 11KB
bootstrap-datetimepicker.min.css 11KB
bootstrap-select.min.css 10KB
bootstrap-select.min.css 10KB
bootstrap-select.min.css 10KB
bootstrap-select.min.css 10KB
dropzone.min.css 9KB
dropzone.min.css 9KB
fileinput.min.css 8KB
fileinput.min.css 8KB
codemirror.css 8KB
codemirror.css 8KB
laydate.css 8KB
laydate.css 8KB
laydate.css 8KB
laydate.css 8KB
zTreeStyle.css 8KB
zTreeStyle.css 8KB
daterangepicker.css 7KB
daterangepicker.css 7KB
daterangepicker.css 7KB
daterangepicker.css 7KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
飞翔的佩奇
- 粉丝: 3558
- 资源: 799
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功