/** * {@inheritDoc} * * @param reportContainer */ @Override protected Object getReportPlotData( ReportSearchCondition cond, ReportProcessReturnContainer reportContainer) { // 検索条件を取得する。 String database = cond.getDatabases().get(0); Timestamp startTime = cond.getStartDate(); Timestamp endTime = cond.getEndDate(); // DBからデータを検索する。 List<ItemData> commonsPoolSizeData = null; try { commonsPoolSizeData = GraphItemAccessUtil.findItemData( database, Constants.ITEMNAME_POOL_SIZE, CompressOperator.SIMPLE_AVERAGE, startTime, endTime); } catch (SQLException ex) { LOGGER.log( LogIdConstants.EXCEPTION_IN_READING, ex, ReporterConfigAccessor.getReportName(getReportType())); return null; } return commonsPoolSizeData; }
/** * {@inheritDoc} * * @param cond * @param reportContainer */ @SuppressWarnings("unchecked") @Override protected void outputReport( Object plotData, ReportSearchCondition cond, ReportProcessReturnContainer reportContainer) { List<ItemData> commonsPoolSizeData = (List<ItemData>) plotData; // 項目名が"Max:ConnectionPoolImpl@56ff3d","Num:ConnectionPoolImpl@56ff3d"となっているので、 // ":"の後が等しいものをまとめ、同一のグラフに出力する。 Map<String, List<ServerPoolRecord>> serverPoolRecordMap = new HashMap<String, List<ServerPoolRecord>>(); for (ItemData itemData : commonsPoolSizeData) { String[] itemName = StringUtils.split(itemData.getItemName(), ":"); if (!serverPoolRecordMap.containsKey(itemName[1])) { List<ServerPoolRecord> serverPoolRecords = new ArrayList<ServerPoolRecord>(200); for (ItemRecord itemRecord : itemData.getRecords()) { ServerPoolRecord serverPoolRecord = new ServerPoolRecord(); serverPoolRecord.setMeasurementTime(itemRecord.getMeasurementTime()); serverPoolRecords.add(serverPoolRecord); } serverPoolRecordMap.put(itemName[1], serverPoolRecords); } for (int index = 0; index < itemData.getRecords().size(); index++) { ItemRecord itemRecord = itemData.getRecords().get(index); ServerPoolRecord serverPoolRecord = serverPoolRecordMap.get(itemName[1]).get(index); if ("Max".equals(itemName[0])) { serverPoolRecord.setServerPoolMax(itemRecord.getValue()); } else if ("Num".equals(itemName[0])) { serverPoolRecord.setServerPoolNum(itemRecord.getValue()); } } } // 出力するレポートの種類に応じて、テンプレートのファイルパスを取得する。 String templateFilePath; try { templateFilePath = TemplateFileManager.getInstance().getTemplateFile(ReportType.SERVER_POOL); } catch (IOException exception) { reportContainer.setHappendedError(exception); return; } // レポート出力の引数情報を取得する。 String outputFolderPath = getOutputFolderName() + File.separator + ReporterConfigAccessor.getProperty(super.getReportType().getId() + ".outputFile"); Timestamp startTime = cond.getStartDate(); Timestamp endTime = cond.getEndDate(); // レポート出力を実行する。 RecordReporter<ServerPoolRecord> reporter = new RecordReporter<ServerPoolRecord>(getReportType()); for (Map.Entry<String, List<ServerPoolRecord>> serverPoolRecordEntry : serverPoolRecordMap.entrySet()) { ServerPoolRecord[] records = serverPoolRecordEntry.getValue().toArray(new ServerPoolRecord[] {}); String itemName = serverPoolRecordEntry.getKey(); String[] graphTitles = {"Commons Poolのサイズ(" + itemName + ")"}; reporter.outputReport( templateFilePath, outputFolderPath, itemName, graphTitles, records, startTime, endTime); } }