Skip to content

Commit edd6f8e

Browse files
authored
Merge pull request #190 from Dokyeongyun/ft-220314-propService
Ft 220314 prop service
2 parents 2e14d88 + edf9031 commit edd6f8e

File tree

9 files changed

+182
-327
lines changed

9 files changed

+182
-327
lines changed

src/main/java/root/core/repository/constracts/PropertyRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public interface PropertyRepository {
2222
void saveServerConnectionInfo(String filePath, Map<String, JschConnectionInfo> config);
2323

2424
void saveCommonConfig(Map<String, Object> values);
25+
26+
void saveCommonConfig(String key, String value);
2527

2628
void loadCombinedConfiguration();
2729

src/main/java/root/core/repository/implement/PropertyRepositoryImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,13 @@ public void saveCommonConfig(Map<String, Object> values) {
257257
}
258258
save("./config/common.properties", config);
259259
}
260+
261+
@Override
262+
public void saveCommonConfig(String key, String value) {
263+
PropertiesConfiguration config = getConfiguration("commonConfig");
264+
config.setProperty(key, value);
265+
save("./config/common.properties", config);
266+
}
260267

261268
private static PropertiesConfiguration load(String filePath) {
262269
Parameters param = new Parameters();

src/main/java/root/core/service/contracts/PropertyService.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import root.core.domain.JdbcConnectionInfo;
77
import root.core.domain.JschConnectionInfo;
88
import root.core.domain.MonitoringYN;
9+
import root.core.domain.enums.MonitoringType;
910
import root.core.domain.enums.RoundingDigits;
1011
import root.core.domain.enums.UsageUIType;
1112
import root.utils.UnitUtils.FileSize;
@@ -99,4 +100,44 @@ public interface PropertyService {
99100
* @return
100101
*/
101102
UsageUIType getDefaultUsageUIType();
103+
104+
/**
105+
* 공통 설정정보를 저장한다.
106+
*
107+
* @param key 설정정보 키
108+
* @param value 설정정보 값
109+
*/
110+
void saveCommonConfig(String key, String value);
111+
112+
/**
113+
* 최근 사용한 접속정보 설정정보를 저장한다.
114+
*
115+
* @param filePath
116+
*/
117+
void saveLastUseConnectionInfoSetting(String filePath);
118+
119+
/**
120+
* 접속정보 설정을 추가한다.
121+
*
122+
* @param filePath
123+
* @return
124+
*/
125+
String addConnectionInfoSetting(String filePath);
126+
127+
/**
128+
* 모니터링여부 Preset 설정을 추가한다.
129+
*
130+
* @param connInfoSetting
131+
* @param presetName
132+
*/
133+
void addMonitoringPreset(String connInfoSetting, String presetName);
134+
135+
/**
136+
* 모니터링여부 Preset 설정을 저장한다.
137+
*
138+
* @param presetName
139+
* @param settingedMonitoringYN
140+
*/
141+
void saveMonitoringPresetSetting(String presetName,
142+
Map<MonitoringType, Map<String, Boolean>> settingedMonitoringYN);
102143
}

src/main/java/root/core/service/implement/FilePropertyService.java

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public List<String> getConnectionInfoList() {
5555
*/
5656
@Override
5757
public String getLastUseConnectionInfoFilePath() {
58-
return propRepo.getLastUseConnInfoFilePath();
58+
String filePath = propRepo.getLastUseConnInfoFilePath();
59+
return propRepo.isFileExist(filePath) ? filePath : null;
5960
}
6061

6162
/**
@@ -202,4 +203,70 @@ public RoundingDigits getDefaultRoundingDigits() {
202203
public UsageUIType getDefaultUsageUIType() {
203204
return UsageUIType.find(propRepo.getCommonResource("usage-ui-type"));
204205
}
206+
207+
/**
208+
* 공통 설정정보를 저장한다.
209+
*/
210+
@Override
211+
public void saveCommonConfig(String key, String value) {
212+
propRepo.saveCommonConfig(key, value);
213+
}
214+
215+
/**
216+
* 최근 사용한 접속정보 설정정보를 저장한다.
217+
*/
218+
@Override
219+
public void saveLastUseConnectionInfoSetting(String filePath) {
220+
PropertiesConfiguration rememberConfig = propRepo.getConfiguration("rememberConfig");
221+
rememberConfig.setProperty("filepath.config.lastuse", filePath.replace("\\", "/"));
222+
propRepo.save(rememberConfig.getString("filepath.config.remember"), rememberConfig);
223+
}
224+
225+
/**
226+
* 접속정보 설정을 추가한다.
227+
*/
228+
@Override
229+
public String addConnectionInfoSetting(String fileName) {
230+
String filePath = "./config/connectioninfo/" + fileName + ".properties";
231+
propRepo.createNewPropertiesFile(filePath, "ConnectionInfo");
232+
addMonitoringPreset(filePath, "default");
233+
return filePath;
234+
}
235+
236+
/**
237+
* 모니터링여부 Preset 설정을 추가한다.
238+
*/
239+
@Override
240+
public void addMonitoringPreset(String connInfoSetting, String presetName) {
241+
String connInfoFileName = connInfoSetting.substring(0, connInfoSetting.indexOf(".properties"));
242+
String filePath = "./config/monitoring/" + connInfoFileName + "/" + presetName + ".properties";
243+
244+
propRepo.createNewPropertiesFile(filePath, "Monitoring");
245+
246+
PropertiesConfiguration config = propRepo.getConfiguration("connInfoConfig");
247+
config.addProperty("monitoring.setting.preset." + presetName + ".filepath", filePath);
248+
propRepo.save(connInfoSetting, config);
249+
}
250+
251+
/**
252+
* 모니터링여부 Preset 설정을 저장한다.
253+
*/
254+
@Override
255+
public void saveMonitoringPresetSetting(String presetName,
256+
Map<MonitoringType, Map<String, Boolean>> settingedMonitoringYN) {
257+
PropertiesConfiguration config = new PropertiesConfiguration();
258+
String monitoringFilePath = propRepo.getMonitoringPresetMap().get(presetName);
259+
260+
if (!monitoringFilePath.isEmpty()) {
261+
for (MonitoringType type : settingedMonitoringYN.keySet()) {
262+
Map<String, Boolean> aliasMap = settingedMonitoringYN.get(type);
263+
for (String alias : aliasMap.keySet()) {
264+
String key = StringUtils.join(type.getName().replace(" ", "_"), ".", alias);
265+
config.setProperty(key, aliasMap.get(alias) ? "Y" : "N");
266+
}
267+
}
268+
propRepo.save(monitoringFilePath, config);
269+
propRepo.loadMonitoringInfoConfig(monitoringFilePath);
270+
}
271+
}
205272
}

src/main/java/root/javafx/Controller/HistoryMenuController.java

Lines changed: 24 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import java.util.Map;
88
import java.util.ResourceBundle;
99

10-
import org.apache.commons.configuration2.PropertiesConfiguration;
11-
1210
import com.jfoenix.controls.JFXComboBox;
1311
import com.jfoenix.controls.JFXListView;
1412

@@ -22,8 +20,6 @@
2220
import root.common.server.implement.JschServer;
2321
import root.core.domain.ASMDiskUsage;
2422
import root.core.domain.AlertLog;
25-
import root.core.domain.AlertLogCommand;
26-
import root.core.domain.AlertLogCommandPeriod;
2723
import root.core.domain.ArchiveUsage;
2824
import root.core.domain.JdbcConnectionInfo;
2925
import root.core.domain.JschConnectionInfo;
@@ -32,8 +28,6 @@
3228
import root.core.domain.OSDiskUsage;
3329
import root.core.domain.TableSpaceUsage;
3430
import root.core.repository.constracts.DBCheckRepository;
35-
import root.core.repository.constracts.PropertyRepository;
36-
import root.core.repository.constracts.ReportRepository;
3731
import root.core.repository.constracts.ServerCheckRepository;
3832
import root.core.repository.implement.DBCheckRepositoryImpl;
3933
import root.core.repository.implement.PropertyRepositoryImpl;
@@ -52,31 +46,33 @@
5246
public class HistoryMenuController implements Initializable {
5347

5448
/* Dependency Injection */
55-
PropertyRepository propRepo = PropertyRepositoryImpl.getInstance();
56-
ReportRepository reportRepository = ReportFileRepo.getInstance();
57-
PropertyService propService = new FilePropertyService(propRepo);
49+
PropertyService propService = new FilePropertyService(PropertyRepositoryImpl.getInstance());
5850

5951
/* View Binding */
6052
@FXML
6153
JFXComboBox<String> runConnInfoFileComboBox;
62-
@FXML
63-
JFXComboBox<String> runMonitoringPresetComboBox;
54+
6455
@FXML
6556
JFXComboBox<String> alertLogServerComboBox;
6657

6758
@FXML
6859
DatePicker alertLogStartDayDP;
60+
6961
@FXML
7062
DatePicker alertLogEndDayDP;
7163

7264
@FXML
7365
AnchorPane archiveUsageTabAP;
66+
7467
@FXML
7568
AnchorPane tableSpaceUsageTabAP;
69+
7670
@FXML
7771
AnchorPane asmDiskUsageTabAP;
72+
7873
@FXML
7974
AnchorPane osDiskUsageTabAP;
75+
8076
@FXML
8177
AnchorPane alertLogUsageTabAP;
8278

@@ -90,14 +86,6 @@ public class HistoryMenuController implements Initializable {
9086
MonitoringAPController<OSDiskUsage> osDiskUsageMAP;
9187
Map<String, AlertLog> alertLogMonitoringResultMap;
9288

93-
/* Common Data */
94-
String lastUseConnInfoFilePath = null;
95-
String lastUseMonitoringPresetName = null;
96-
String[] dbNames = null;
97-
String[] serverNames = null;
98-
String[] connInfoFiles = null;
99-
List<String> presetList = null;
100-
10189
public HistoryMenuController() {
10290
archiveUsageMAP = new MonitoringAPController<>(ArchiveUsage.class);
10391
tableSpaceUsageMAP = new MonitoringAPController<>(TableSpaceUsage.class);
@@ -111,26 +99,18 @@ public HistoryMenuController() {
11199
*/
112100
@Override
113101
public void initialize(URL location, ResourceBundle resources) {
114-
/*
115-
* 1. 접속정보 프로퍼티 파일 ComboBox를 설정한다.
116-
* 2. 접속정보 프로퍼티 파일 유무를 확인한다.
117-
* 2-1. 있으면 [3]으로 이동
118-
* 2-2. 한개도 없으면 설정 메뉴로 이동하여 접속정보를 설정하도록 한다. [END]
119-
* 3. 최근 사용한 접속정보 프로퍼티 파일이 있는지 확인한다.
120-
* 3-1. 있으면 해당 파일을 Load한다.
121-
* 3-2. 없으면 첫 번째 파일을 Load한다.
122-
*/
102+
123103
// 접속정보 설정 프로퍼티 파일
124-
connInfoFiles = propRepo.getConnectionInfoFileNames();
125-
if (connInfoFiles != null && connInfoFiles.length != 0) {
104+
List<String> connInfoFiles = propService.getConnectionInfoList();
105+
if (connInfoFiles != null && connInfoFiles.size() != 0) {
126106
// Connection Info ComboBox
127107
runConnInfoFileComboBox.getItems().addAll(connInfoFiles);
128108
runConnInfoFileComboBox.getSelectionModel().selectFirst();
109+
129110
// remember.properties 파일에서, 최근 사용된 설정파일 경로가 있다면 해당 설정파일을 불러온다.
130-
lastUseConnInfoFilePath = propRepo.getLastUseConnInfoFilePath();
131-
if (propRepo.isFileExist(lastUseConnInfoFilePath)) {
111+
String lastUseConnInfoFilePath = propService.getLastUseConnectionInfoFilePath();
112+
if (lastUseConnInfoFilePath != null) {
132113
runConnInfoFileComboBox.getSelectionModel().select(lastUseConnInfoFilePath);
133-
loadConnectionInfoProperties(lastUseConnInfoFilePath);
134114
}
135115
} else {
136116
AlertUtils.showAlert(AlertType.INFORMATION, "접속정보 설정", "설정된 DB/Server 접속정보가 없습니다.\n[설정]메뉴로 이동합니다.");
@@ -140,23 +120,19 @@ public void initialize(URL location, ResourceBundle resources) {
140120
// ComboBox 변경 이벤트
141121
runConnInfoFileComboBox.getSelectionModel().selectedItemProperty()
142122
.addListener((options, oldValue, newValue) -> {
143-
loadConnectionInfoProperties(newValue);
123+
// TODO 각 Tab별 콤보박스 아이템 변경
144124
});
145125

146126
String dbComboBoxLabel = "DB 선택";
147-
String[] dbComboBoxItems = dbNames;
127+
List<String> dbComboBoxItems = propService.getMonitoringDBNameList();
148128
String serverComboBoxLabel = "Server 선택";
149-
String[] serverComboBoxItems = serverNames;
129+
List<String> serverComboBoxItems = propService.getMonitoringServerNameList();
150130

151-
// Archive Usage TableView Setting
152131
initAndAddMonitoringAnchorPane(archiveUsageMAP, archiveUsageTabAP, dbComboBoxLabel, dbComboBoxItems);
153132
initAndAddMonitoringAnchorPane(tableSpaceUsageMAP, tableSpaceUsageTabAP, dbComboBoxLabel, dbComboBoxItems);
154133
initAndAddMonitoringAnchorPane(asmDiskUsageMAP, asmDiskUsageTabAP, dbComboBoxLabel, dbComboBoxItems);
155134
initAndAddMonitoringAnchorPane(osDiskUsageMAP, osDiskUsageTabAP, serverComboBoxLabel, serverComboBoxItems);
156135

157-
// TODO TableColumn 속성을 설정하는 메서드를 따로 구분해보자. 객체를 생성해서 전달하는 방법도 고려하기
158-
// ex) TableColumnHeaderText, Width, Align
159-
160136
// AlertLog 화면의 UI 요소를 초기화한다.
161137
initAlertLogMonitoringElements();
162138
}
@@ -172,7 +148,7 @@ public void initialize(URL location, ResourceBundle resources) {
172148
* @param tableColumns
173149
*/
174150
private <T extends MonitoringResult> void initAndAddMonitoringAnchorPane(MonitoringAPController<T> monitoringAP,
175-
AnchorPane parentAP, String labelText, String[] comboBoxItems) {
151+
AnchorPane parentAP, String labelText, List<String> comboBoxItems) {
176152

177153
monitoringAP.setAliasComboBoxLabelText(labelText); // ComboBox 좌측 Lebel Text 설정
178154
monitoringAP.setAliasComboBoxItems(comboBoxItems); // ComboBox Items 설정
@@ -195,7 +171,7 @@ private void initAlertLogMonitoringElements() {
195171
alertLogServerComboBox.getSelectionModel().selectedItemProperty().addListener((options, oldValue, newValue) -> {
196172
changeAlertLogListViewData(newValue);
197173
});
198-
alertLogServerComboBox.getItems().addAll(serverNames);
174+
alertLogServerComboBox.getItems().addAll(propService.getMonitoringServerNameList());
199175
alertLogServerComboBox.getSelectionModel().selectFirst();
200176

201177
// AlertLog 조회기간 기본값 설정
@@ -222,49 +198,25 @@ private void initAlertLogMonitoringElements() {
222198
alertLogLV.setCellFactory(categoryList -> new AlertLogListViewCell());
223199
}
224200

225-
/**
226-
* [실행] - 접속정보 설정파일을 읽고, 모니터링설정 Preset을 읽는다.
227-
*
228-
* @param connInfoConfigFilePath
229-
*/
230-
private void loadConnectionInfoProperties(String connInfoConfigFilePath) {
231-
// 접속정보 프로퍼티 파일 Load
232-
propRepo.loadConnectionInfoConfig(connInfoConfigFilePath);
233-
// 모니터링여부 설정 Preset
234-
presetList = propRepo.getMonitoringPresetNameList();
235-
lastUseMonitoringPresetName = propRepo.getLastUseMonitoringPresetName();
236-
// DB/Server Names
237-
dbNames = propRepo.getMonitoringDBNames();
238-
serverNames = propRepo.getMonitoringServerNames();
239-
// Monitoring Preset ComboBox
240-
runMonitoringPresetComboBox.getItems().clear();
241-
runMonitoringPresetComboBox.getItems().addAll(presetList);
242-
runMonitoringPresetComboBox.getSelectionModel().selectFirst();
243-
if (lastUseMonitoringPresetName != null) {
244-
runMonitoringPresetComboBox.getSelectionModel().select(lastUseMonitoringPresetName);
245-
}
246-
}
247-
248201
/**
249202
* [실행] - 모니터링을 시작한다.
250203
*
251204
* @param e
252205
*/
206+
@SuppressWarnings("unused")
253207
public void runMonitoring(ActionEvent e) {
254208
if (!validateInput()) {
255209
return;
256210
}
257-
258211

259212
// DB Usage Check
260213
List<JdbcConnectionInfo> jdbcConnectionList = propService
261214
.getJdbcConnInfoList(propService.getMonitoringDBNameList());
262215
for (JdbcConnectionInfo jdbc : jdbcConnectionList) {
263-
System.out.println("■ [ " + jdbc.getJdbcDBName() + " Monitoring Start ]\n");
264216
JdbcDatabase db = new JdbcDatabase(jdbc);
265217
db.init();
266218
DBCheckRepository repo = new DBCheckRepositoryImpl(db);
267-
DBCheckUsecase usecase = new DBCheckUsecaseImpl(repo, reportRepository);
219+
DBCheckUsecase usecase = new DBCheckUsecaseImpl(repo, ReportFileRepo.getInstance());
268220
archiveUsageMAP.addTableData(jdbc.getJdbcDBName(), usecase.getCurrentArchiveUsage());
269221
tableSpaceUsageMAP.addTableData(jdbc.getJdbcDBName(), usecase.getCurrentTableSpaceUsage());
270222
asmDiskUsageMAP.addTableData(jdbc.getJdbcDBName(), usecase.getCurrentASMDiskUsage());
@@ -276,27 +228,16 @@ public void runMonitoring(ActionEvent e) {
276228
List<JschConnectionInfo> jschConnectionList = propService
277229
.getJschConnInfoList(propService.getMonitoringServerNameList());
278230
for (JschConnectionInfo jsch : jschConnectionList) {
279-
System.out.println("■ [ " + jsch.getServerName() + " Monitoring Start ]\n");
280231
JschServer server = new JschServer(jsch);
281232
server.init();
282233
ServerCheckRepository repo = new ServerCheckRepositoryImpl(server);
283234
ServerCheckUsecase usecase = new ServerCheckUsecaseImpl(repo, ReportFileRepo.getInstance());
284235

285-
PropertiesConfiguration config = propRepo.getConfiguration("connInfoConfig");
286-
String alertLogFilePath = config
287-
.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.filepath");
288-
String alertLogReadLine = config
289-
.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.readline");
290-
String alertLogDateFormat = config
291-
.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.dateformat");
292-
String alertLogDateFormatRegex = config
293-
.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.dateformatregex");
294-
AlertLogCommand alc = new AlertLogCommand("tail", alertLogReadLine, alertLogFilePath, alertLogDateFormat,
295-
alertLogDateFormatRegex);
296-
AlertLogCommandPeriod alcp = new AlertLogCommandPeriod(alc, alertLogStartDay, alertLogEndDay);
297-
298236
osDiskUsageMAP.addTableData(server.getServerName(), usecase.getCurrentOSDiskUsage());
299-
alertLogMonitoringResultMap.put(server.getServerName(), usecase.getAlertLogDuringPeriod(alcp));
237+
238+
// TODO AlertLog 조회
239+
// alertLogMonitoringResultMap.put(server.getServerName(),
240+
// usecase.getAlertLogDuringPeriod(alcp));
300241
}
301242

302243
archiveUsageMAP.syncTableData(archiveUsageMAP.getSelectedAliasComboBoxItem(), 0);

0 commit comments

Comments
 (0)