Skip to content

Commit 09275db

Browse files
authored
Merge pull request #198 from Dokyeongyun/develop
2022.03.10. ~ 2022.03.27. 개발내용 Merge
2 parents 0cb4559 + 7b4d5fa commit 09275db

23 files changed

+1260
-888
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: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import java.util.List;
44
import java.util.Map;
55

6+
import root.core.domain.AlertLogCommand;
67
import root.core.domain.JdbcConnectionInfo;
78
import root.core.domain.JschConnectionInfo;
89
import root.core.domain.MonitoringYN;
10+
import root.core.domain.enums.MonitoringType;
911
import root.core.domain.enums.RoundingDigits;
1012
import root.core.domain.enums.UsageUIType;
1113
import root.utils.UnitUtils.FileSize;
@@ -77,6 +79,20 @@ public interface PropertyService {
7779

7880
List<JdbcConnectionInfo> getJdbcConnInfoList(List<String> dbNames);
7981

82+
/**
83+
* 서버의 접속정보를 가져온다.
84+
*
85+
* @param serverName 서버 접속정보 별칭
86+
* @return
87+
*/
88+
JschConnectionInfo getJschConnInfo(String serverName);
89+
90+
/**
91+
* 서버들의 접속정보를 가져온다.
92+
*
93+
* @param serverNames
94+
* @return
95+
*/
8096
List<JschConnectionInfo> getJschConnInfoList(List<String> serverNames);
8197

8298
/**
@@ -99,4 +115,53 @@ public interface PropertyService {
99115
* @return
100116
*/
101117
UsageUIType getDefaultUsageUIType();
118+
119+
/**
120+
* 공통 설정정보를 저장한다.
121+
*
122+
* @param key 설정정보 키
123+
* @param value 설정정보 값
124+
*/
125+
void saveCommonConfig(String key, String value);
126+
127+
/**
128+
* 최근 사용한 접속정보 설정정보를 저장한다.
129+
*
130+
* @param filePath
131+
*/
132+
void saveLastUseConnectionInfoSetting(String filePath);
133+
134+
/**
135+
* 접속정보 설정을 추가한다.
136+
*
137+
* @param filePath
138+
* @return
139+
*/
140+
String addConnectionInfoSetting(String filePath);
141+
142+
/**
143+
* 모니터링여부 Preset 설정을 추가한다.
144+
*
145+
* @param connInfoSetting
146+
* @param presetName
147+
*/
148+
void addMonitoringPreset(String connInfoSetting, String presetName);
149+
150+
/**
151+
* 모니터링여부 Preset 설정을 저장한다.
152+
*
153+
* @param presetName
154+
* @param settingedMonitoringYN
155+
*/
156+
void saveMonitoringPresetSetting(String presetName,
157+
Map<MonitoringType, Map<String, Boolean>> settingedMonitoringYN);
158+
159+
/**
160+
* 설정된 AlertLog 모니터링 커맨드 정보를 가져온다.
161+
*
162+
* @param connInfoSetting
163+
* @param serverName
164+
* @return
165+
*/
166+
AlertLogCommand getAlertLogCommand(String connInfoSetting, String serverName);
102167
}

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

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.commons.configuration2.PropertiesConfiguration;
1313
import org.apache.commons.lang3.StringUtils;
1414

15+
import root.core.domain.AlertLogCommand;
1516
import root.core.domain.JdbcConnectionInfo;
1617
import root.core.domain.JschConnectionInfo;
1718
import root.core.domain.MonitoringYN;
@@ -55,7 +56,8 @@ public List<String> getConnectionInfoList() {
5556
*/
5657
@Override
5758
public String getLastUseConnectionInfoFilePath() {
58-
return propRepo.getLastUseConnInfoFilePath();
59+
String filePath = propRepo.getLastUseConnInfoFilePath();
60+
return propRepo.isFileExist(filePath) ? filePath : null;
5961
}
6062

6163
/**
@@ -173,6 +175,17 @@ public List<JdbcConnectionInfo> getJdbcConnInfoList(List<String> dbNames) {
173175
.collect(Collectors.mapping(dbName -> propRepo.getJdbcConnectionInfo(dbName), Collectors.toList()));
174176
}
175177

178+
/**
179+
* 서버의 접속정보를 가져온다.
180+
*/
181+
@Override
182+
public JschConnectionInfo getJschConnInfo(String serverName) {
183+
return propRepo.getJschConnectionInfo(serverName);
184+
}
185+
186+
/**
187+
* 서버들의 접속정보를 가져온다.
188+
*/
176189
@Override
177190
public List<JschConnectionInfo> getJschConnInfoList(List<String> serverNames) {
178191
return serverNames.stream().sorted().collect(
@@ -202,4 +215,76 @@ public RoundingDigits getDefaultRoundingDigits() {
202215
public UsageUIType getDefaultUsageUIType() {
203216
return UsageUIType.find(propRepo.getCommonResource("usage-ui-type"));
204217
}
218+
219+
/**
220+
* 공통 설정정보를 저장한다.
221+
*/
222+
@Override
223+
public void saveCommonConfig(String key, String value) {
224+
propRepo.saveCommonConfig(key, value);
225+
}
226+
227+
/**
228+
* 최근 사용한 접속정보 설정정보를 저장한다.
229+
*/
230+
@Override
231+
public void saveLastUseConnectionInfoSetting(String filePath) {
232+
PropertiesConfiguration rememberConfig = propRepo.getConfiguration("rememberConfig");
233+
rememberConfig.setProperty("filepath.config.lastuse", filePath.replace("\\", "/"));
234+
propRepo.save(rememberConfig.getString("filepath.config.remember"), rememberConfig);
235+
}
236+
237+
/**
238+
* 접속정보 설정을 추가한다.
239+
*/
240+
@Override
241+
public String addConnectionInfoSetting(String fileName) {
242+
String filePath = "./config/connectioninfo/" + fileName + ".properties";
243+
propRepo.createNewPropertiesFile(filePath, "ConnectionInfo");
244+
addMonitoringPreset(filePath, "default");
245+
return filePath;
246+
}
247+
248+
/**
249+
* 모니터링여부 Preset 설정을 추가한다.
250+
*/
251+
@Override
252+
public void addMonitoringPreset(String connInfoSetting, String presetName) {
253+
String connInfoFileName = connInfoSetting.substring(0, connInfoSetting.indexOf(".properties"));
254+
String filePath = "./config/monitoring/" + connInfoFileName + "/" + presetName + ".properties";
255+
256+
propRepo.createNewPropertiesFile(filePath, "Monitoring");
257+
258+
PropertiesConfiguration config = propRepo.getConfiguration("connInfoConfig");
259+
config.addProperty("monitoring.setting.preset." + presetName + ".filepath", filePath);
260+
propRepo.save(connInfoSetting, config);
261+
}
262+
263+
/**
264+
* 모니터링여부 Preset 설정을 저장한다.
265+
*/
266+
@Override
267+
public void saveMonitoringPresetSetting(String presetName,
268+
Map<MonitoringType, Map<String, Boolean>> settingedMonitoringYN) {
269+
PropertiesConfiguration config = new PropertiesConfiguration();
270+
String monitoringFilePath = propRepo.getMonitoringPresetMap().get(presetName);
271+
272+
if (!monitoringFilePath.isEmpty()) {
273+
for (MonitoringType type : settingedMonitoringYN.keySet()) {
274+
Map<String, Boolean> aliasMap = settingedMonitoringYN.get(type);
275+
for (String alias : aliasMap.keySet()) {
276+
String key = StringUtils.join(type.getName().replace(" ", "_"), ".", alias);
277+
config.setProperty(key, aliasMap.get(alias) ? "Y" : "N");
278+
}
279+
}
280+
propRepo.save(monitoringFilePath, config);
281+
propRepo.loadMonitoringInfoConfig(monitoringFilePath);
282+
}
283+
}
284+
285+
@Override
286+
public AlertLogCommand getAlertLogCommand(String connInfoSetting, String serverName) {
287+
loadConnectionInfoConfig(connInfoSetting);
288+
return propRepo.getAlertLogCommand(serverName);
289+
}
205290
}

src/main/java/root/core/usecase/constracts/ReportUsecase.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,24 @@
77
import root.utils.UnitUtils.FileSize;
88

99
public interface ReportUsecase {
10+
1011
<T extends MonitoringResult> List<T> getMonitoringReportData(Class<T> clazz, String alias, FileSize unit,
1112
int round);
1213

1314
<T extends MonitoringResult> Map<String, List<T>> getMonitoringReportDataByTime(Class<T> clazz, String alias,
1415
FileSize unit, int round, String inquiryDate);
1516

17+
<T extends MonitoringResult> Map<String, List<T>> getPrevMonitoringReportDataByTime(Class<T> clazz, String alias,
18+
FileSize unit, int round, String inquiryDateTime);
19+
20+
<T extends MonitoringResult> Map<String, List<T>> getNextMonitoringReportDataByTime(Class<T> clazz, String alias,
21+
FileSize unit, int round, String inquiryDateTime);
22+
1623
<T extends MonitoringResult> Map<Integer, Long> getMonitoringReportCountByTime(Class<T> clazz, String alias,
1724
FileSize unit, int round, String inquiryDate);
18-
25+
1926
<T extends MonitoringResult> Map<Integer, List<String>> getMonitoringReportTimesByTime(Class<T> clazz, String alias,
2027
FileSize unit, int round, String inquiryDate);
28+
29+
<T extends MonitoringResult> List<String> getMonitoringHistoryDays(Class<T> clazz, String alias);
2130
}

src/main/java/root/core/usecase/implement/ReportUsecaseImpl.java

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package root.core.usecase.implement;
22

33
import java.util.ArrayList;
4+
import java.util.Comparator;
5+
import java.util.LinkedHashMap;
46
import java.util.List;
57
import java.util.Locale;
68
import java.util.Map;
@@ -51,9 +53,67 @@ public <T extends MonitoringResult> Map<String, List<T>> getMonitoringReportData
5153
return getMonitoringReportData(clazz, alias, unit, round)
5254
.stream()
5355
.filter(m -> inquiryDate.equals(m.getMonitoringDate()))
56+
.sorted(Comparator.comparing(MonitoringResult::getMonitoringDateTime))
57+
.collect(Collectors.groupingBy(MonitoringResult::getMonitoringDateTime,
58+
LinkedHashMap::new,
59+
Collectors.mapping(m -> m, Collectors.toList())));
60+
}
61+
62+
@Override
63+
public <T extends MonitoringResult> Map<String, List<T>> getPrevMonitoringReportDataByTime(Class<T> clazz,
64+
String alias, FileSize unit, int round, String inquiryDateTime) {
65+
66+
String prevDateTime = getPrevHistoryDateTime(clazz, alias, unit, round, inquiryDateTime);
67+
68+
return getMonitoringReportData(clazz, alias, unit, round)
69+
.stream()
70+
.filter(m -> prevDateTime.equals(m.getMonitoringDateTime()))
71+
.sorted(Comparator.comparing(MonitoringResult::getMonitoringDateTime).reversed())
72+
.collect(Collectors.groupingBy(m -> m.getMonitoringDateTime(),
73+
Collectors.mapping(m -> m, Collectors.toList())));
74+
}
75+
76+
private <T extends MonitoringResult> String getPrevHistoryDateTime(Class<T> clazz, String alias, FileSize unit,
77+
int round, String curHistoryDateTime) {
78+
79+
// TODO 날짜 컬럼만 읽기
80+
MonitoringResult result = getMonitoringReportData(clazz, alias, unit, round)
81+
.stream()
82+
.filter(m -> DateUtils.compareTo("yyyyMMddHHmmss", curHistoryDateTime, m.getMonitoringDateTime()) == 1)
83+
.sorted(Comparator.comparing(MonitoringResult::getMonitoringDateTime).reversed())
84+
.findFirst()
85+
.orElse(null);
86+
87+
return result == null ? curHistoryDateTime : result.getMonitoringDateTime();
88+
}
89+
90+
@Override
91+
public <T extends MonitoringResult> Map<String, List<T>> getNextMonitoringReportDataByTime(Class<T> clazz,
92+
String alias, FileSize unit, int round, String inquiryDateTime) {
93+
94+
String nextDateTime = getNextHistoryDateTime(clazz, alias, unit, round, inquiryDateTime);
95+
96+
return getMonitoringReportData(clazz, alias, unit, round)
97+
.stream()
98+
.filter(m -> nextDateTime.equals(m.getMonitoringDateTime()))
99+
.sorted(Comparator.comparing(MonitoringResult::getMonitoringDateTime))
54100
.collect(Collectors.groupingBy(m -> m.getMonitoringDateTime(),
55101
Collectors.mapping(m -> m, Collectors.toList())));
56102
}
103+
104+
private <T extends MonitoringResult> String getNextHistoryDateTime(Class<T> clazz, String alias, FileSize unit,
105+
int round, String curHistoryDateTime) {
106+
107+
// TODO 날짜 컬럼만 읽기
108+
MonitoringResult result = getMonitoringReportData(clazz, alias, unit, round)
109+
.stream()
110+
.filter(m -> DateUtils.compareTo("yyyyMMddHHmmss", curHistoryDateTime, m.getMonitoringDateTime()) == -1)
111+
.sorted(Comparator.comparing(MonitoringResult::getMonitoringDateTime))
112+
.findFirst()
113+
.orElse(null);
114+
115+
return result == null ? curHistoryDateTime : result.getMonitoringDateTime();
116+
}
57117

58118
@Override
59119
public <T extends MonitoringResult> Map<Integer, Long> getMonitoringReportCountByTime(Class<T> clazz,
@@ -84,6 +144,7 @@ public <T extends MonitoringResult> Map<Integer, List<String>> getMonitoringRepo
84144
.stream()
85145
.collect(Collectors.groupingBy(
86146
m -> Integer.parseInt(DateUtils.convertDateFormat("yyyyMMddHHmmss", "HH", m, Locale.KOREA)),
147+
LinkedHashMap::new,
87148
Collectors.mapping(m -> m, Collectors.toList())));
88149

89150
for (int i = 0; i < 24; i++) {
@@ -94,4 +155,12 @@ public <T extends MonitoringResult> Map<Integer, List<String>> getMonitoringRepo
94155

95156
return result;
96157
}
158+
159+
@Override
160+
public <T extends MonitoringResult> List<String> getMonitoringHistoryDays(Class<T> clazz, String alias) {
161+
return getMonitoringReportData(clazz, alias, FileSize.B, 2)
162+
.stream()
163+
.map(r -> r.getMonitoringDate())
164+
.collect(Collectors.toList());
165+
}
97166
}

0 commit comments

Comments
 (0)