in hertzbeat-manager/src/main/java/org/apache/hertzbeat/manager/service/impl/ExcelImExportServiceImpl.java [209:299]
public void writeOs(List<ExportMonitorDTO> monitorList, OutputStream os) {
try {
Workbook workbook = WorkbookFactory.create(true);
String sheetName = "Export Monitor";
Sheet sheet = workbook.createSheet(sheetName);
sheet.setDefaultColumnWidth(20);
sheet.setColumnWidth(6, 40 * 256);
sheet.setColumnWidth(10, 40 * 256);
// set header style
CellStyle headerCellStyle = workbook.createCellStyle();
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerCellStyle.setFont(headerFont);
headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
// set cell style
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// set header
String[] headers = { "Name", "App", "Host", "Intervals", "Status", "Description", "Labels", "Collector", "Param-Field", "Param-Type", "Param-Value" };
Row headerRow = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
cell.setCellStyle(headerCellStyle);
}
// foreach monitor, each monitor object corresponds to a row of data
int rowIndex = 1;
for (ExportMonitorDTO monitor : monitorList) {
// get monitor information
MonitorDTO monitorDTO = monitor.getMonitor();
// get monitor parameters
List<ParamDTO> paramList = monitor.getParams();
// merge monitor information and parameter information into one row
for (int i = 0; i < Math.max(paramList.size(), 1); i++) {
Row row = sheet.createRow(rowIndex++);
if (i == 0) {
// You need to fill in the monitoring information only once
Cell nameCell = row.createCell(0);
nameCell.setCellValue(monitorDTO.getName());
nameCell.setCellStyle(cellStyle);
Cell appCell = row.createCell(1);
appCell.setCellValue(monitorDTO.getApp());
appCell.setCellStyle(cellStyle);
Cell hostCell = row.createCell(2);
hostCell.setCellValue(monitorDTO.getHost());
hostCell.setCellStyle(cellStyle);
Cell intervalsCell = row.createCell(3);
intervalsCell.setCellValue(monitorDTO.getIntervals());
intervalsCell.setCellStyle(cellStyle);
Cell statusCell = row.createCell(4);
statusCell.setCellValue(monitorDTO.getStatus());
statusCell.setCellStyle(cellStyle);
Cell descriptionCell = row.createCell(5);
descriptionCell.setCellValue(monitorDTO.getDescription());
descriptionCell.setCellStyle(cellStyle);
Cell labelsCell = row.createCell(6);
labelsCell.setCellValue(JsonUtil.toJson(monitorDTO.getLabels()));
labelsCell.setCellStyle(cellStyle);
Cell collectorCell = row.createCell(7);
collectorCell.setCellValue(monitorDTO.getCollector());
collectorCell.setCellStyle(cellStyle);
}
// Fill in parameter information
if (i < paramList.size()) {
ParamDTO paramDTO = paramList.get(i);
Cell fieldCell = row.createCell(8);
fieldCell.setCellValue(paramDTO.getField());
fieldCell.setCellStyle(cellStyle);
Cell typeCell = row.createCell(9);
typeCell.setCellValue(paramDTO.getType());
typeCell.setCellStyle(cellStyle);
Cell valueCell = row.createCell(10);
valueCell.setCellValue(paramDTO.getValue());
valueCell.setCellStyle(cellStyle);
}
}
if (CollectionUtils.isNotEmpty(paramList)) {
RegionUtil.setBorderTop(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet);
RegionUtil.setBorderBottom(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet);
RegionUtil.setBorderLeft(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet);
RegionUtil.setBorderRight(BorderStyle.THICK, new CellRangeAddress(rowIndex - paramList.size(), rowIndex - 1, 0, 10), sheet);
}
}
workbook.write(os);
os.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}