Skip to content

Commit 3ccd74a

Browse files
authored
Merge pull request #166 from Dokyeongyun/develop
Develop
2 parents 000a490 + fd65b72 commit 3ccd74a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1639
-995
lines changed
Lines changed: 119 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -1,121 +1,119 @@
1-
package root.applications;
2-
3-
import java.util.List;
4-
5-
import root.common.database.contracts.AbstractDatabase;
6-
import root.common.database.implement.JdbcDatabase;
7-
import root.common.server.implement.JschServer;
8-
import root.core.batch.DBCheckBatch;
9-
import root.core.batch.ServerCheckBatch;
10-
import root.core.domain.AlertLogCommand;
11-
import root.core.domain.AlertLogCommandPeriod;
12-
import root.core.domain.JdbcConnectionInfo;
13-
import root.core.domain.JschConnectionInfo;
14-
import root.core.repository.constracts.DBCheckRepository;
15-
import root.core.repository.constracts.ServerCheckRepository;
16-
import root.core.repository.implement.DBCheckRepositoryImpl;
17-
import root.core.repository.implement.ReportFileRepo;
18-
import root.core.repository.implement.ServerCheckRepositoryImpl;
19-
import root.core.usecase.constracts.DBCheckUsecase;
20-
import root.core.usecase.constracts.ServerCheckUsecase;
21-
import root.core.usecase.implement.DBCheckUsecaseImpl;
22-
import root.core.usecase.implement.ServerCheckUsecaseImpl;
23-
import root.utils.ConsoleUtils;
24-
import root.utils.DateUtils;
25-
import root.utils.PropertiesUtils;
26-
27-
public class Application {
28-
29-
public static void main(String[] args) {
30-
try {
31-
String propertiesFilePath = ".\\config\\application.properties";
32-
33-
try {
34-
PropertiesUtils.loadCombinedConfiguration();
35-
String lastUsePropertiesFile = PropertiesUtils.combinedConfig.getString("filepath.config.lastuse");
36-
PropertiesUtils.loadAppConfiguration(lastUsePropertiesFile, "connInfoConfig");
37-
PropertiesUtils.loadAppConfiguration(propertiesFilePath);
38-
PropertiesUtils.loadCombinedConfiguration();
39-
PropertiesUtils.loadAppConfiguration(".\\config\\connectioninfo\\test.properties", "connInfoConfig");
40-
}catch(Exception e) {
41-
System.out.println("configuration loading error\n"+e+"\n");
42-
return;
43-
}
44-
45-
String dbMonitoring = PropertiesUtils.propConfig.getString("monitoring.db");
46-
String serverMonitoring = PropertiesUtils.propConfig.getString("monitoring.server");
47-
48-
if("on".equals(dbMonitoring)) {
49-
dbMonitoring();
50-
}
51-
52-
if("on".equals(serverMonitoring)) {
53-
// serverMonitoring();
54-
}
55-
56-
} catch (Exception e) {
57-
e.printStackTrace();
58-
}
59-
60-
System.out.println("END");
61-
}
62-
63-
public static void dbMonitoring() {
64-
System.out.println("\n==================================================================================================================================");
65-
System.out.println(ConsoleUtils.BACKGROUND_CYAN + "※ DB Monitoring을 시작합니다." + ConsoleUtils.RESET);
66-
System.out.println("==================================================================================================================================\n");
67-
68-
// DB Usage Check
69-
List<JdbcConnectionInfo> jdbcConnectionList = PropertiesUtils.getJdbcConnectionMap();
70-
for(JdbcConnectionInfo jdbc : jdbcConnectionList) {
71-
System.out.println("■ [ " + jdbc.getJdbcDBName() + " Monitoring Start ]\n");
72-
AbstractDatabase db = new JdbcDatabase(jdbc);
73-
db.init();
74-
DBCheckRepository repo = new DBCheckRepositoryImpl(db);
75-
DBCheckUsecase usecase = new DBCheckUsecaseImpl(repo, ReportFileRepo.getInstance());
76-
DBCheckBatch dbBatch = new DBCheckBatch(usecase);
77-
dbBatch.startBatchArchiveUsageCheck();
78-
dbBatch.startBatchTableSpaceUsageCheck();
79-
dbBatch.startBatchASMDiskUsageCheck();
80-
//System.out.println("□ [ " + dbName + " Monitoring End ]\n\n");
81-
}
82-
}
83-
84-
public static void serverMonitoring() {
85-
System.out.println("\n==================================================================================================================================");
86-
System.out.println(ConsoleUtils.BACKGROUND_CYAN + "※ Server Monitoring을 시작합니다." + ConsoleUtils.RESET);
87-
System.out.println("==================================================================================================================================\n");
88-
89-
// Server Usage Check
90-
List<JschConnectionInfo> jschConnectionList = PropertiesUtils.getJschConnectionMap();
91-
for(JschConnectionInfo jsch : jschConnectionList) {
92-
System.out.println("■ [ " + jsch.getServerName() + " Monitoring Start ]\n");
93-
JschServer server = new JschServer(jsch);
94-
server.init();
95-
ServerCheckRepository repo = new ServerCheckRepositoryImpl(server);
96-
ServerCheckUsecase usecase = new ServerCheckUsecaseImpl(repo);
97-
ServerCheckBatch serverBatch = new ServerCheckBatch(usecase);
98-
99-
String alertLogFilePath = PropertiesUtils.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.filepath");
100-
String alertLogReadLine = PropertiesUtils.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.readline");
101-
String alertLogDateFormat = PropertiesUtils.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.dateformat");
102-
String alertLogDateFormatRegex = PropertiesUtils.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.dateformatregex");
103-
AlertLogCommand alc = new AlertLogCommand("tail", alertLogReadLine, alertLogFilePath, alertLogDateFormat, alertLogDateFormatRegex);
104-
AlertLogCommandPeriod alcp = new AlertLogCommandPeriod(alc, DateUtils.addDate(DateUtils.getToday("yyyy-MM-dd"), 0, 0, -1), DateUtils.getToday("yyyy-MM-dd"));
105-
serverBatch.startBatchAlertLogCheckDuringPeriod(alcp);
106-
serverBatch.startBatchOSDiskUsageCheck();
107-
//System.out.println("□ [ " + serverName + " Monitoring End ]\n\n");
108-
}
109-
}
110-
}
111-
112-
/*
113-
[추가해야 할 사항]
114-
1. 조회결과 엑셀파일 작성
115-
2. 엑셀파일 읽어 모니터링 현황 가시화
116-
3. AlertLog 내 Error 발생 키워드 수정
117-
4. AlertLog Error 발생 시, 해당 부분의 로그 출력
118-
5. 각 조회결과 사용량 기준치 초과 시 알람 전송
119-
6. Console 출력내용 파일 형태로 저장
120-
7. DB 조회결과 테이블형태로 출력 (j-text-utils 라이브러리 이용하여 구현. 더 나은 라이브러리 조사 필요)
121-
*/
1+
//package root.applications;
2+
//
3+
//import java.util.List;
4+
//
5+
//import root.common.database.contracts.AbstractDatabase;
6+
//import root.common.database.implement.JdbcDatabase;
7+
//import root.common.server.implement.JschServer;
8+
//import root.core.batch.DBCheckBatch;
9+
//import root.core.batch.ServerCheckBatch;
10+
//import root.core.domain.JdbcConnectionInfo;
11+
//import root.core.domain.JschConnectionInfo;
12+
//import root.core.repository.constracts.DBCheckRepository;
13+
//import root.core.repository.constracts.PropertyRepository;
14+
//import root.core.repository.constracts.ServerCheckRepository;
15+
//import root.core.repository.implement.DBCheckRepositoryImpl;
16+
//import root.core.repository.implement.PropertyRepositoryImpl;
17+
//import root.core.repository.implement.ReportFileRepo;
18+
//import root.core.repository.implement.ServerCheckRepositoryImpl;
19+
//import root.core.usecase.constracts.DBCheckUsecase;
20+
//import root.core.usecase.constracts.ServerCheckUsecase;
21+
//import root.core.usecase.implement.DBCheckUsecaseImpl;
22+
//import root.core.usecase.implement.ServerCheckUsecaseImpl;
23+
//import root.utils.ConsoleUtils;
24+
//
25+
//public class Application {
26+
// private static PropertyRepository propRepo = PropertyRepositoryImpl.getInstance();
27+
//
28+
// public static void main(String[] args) {
29+
//
30+
// try {
31+
// String propertiesFilePath = ".\\config\\application.properties";
32+
//
33+
// try {
34+
// propRepo.loadCombinedConfiguration();
35+
// String lastUsePropertiesFile = propRepo.getCommonResource("filepath.config.lastuse");
36+
// propRepo.loadConnectionInfoConfig(propertiesFilePath);
37+
// propRepo.loadCombinedConfiguration();
38+
// }catch(Exception e) {
39+
// System.out.println("configuration loading error\n"+e+"\n");
40+
// return;
41+
// }
42+
////
43+
//// String dbMonitoring = propRepo.getMonitoringDBNames();
44+
//// String serverMonitoring = propRepo.propConfig.getString("monitoring.server");
45+
////
46+
//// if("on".equals(dbMonitoring)) {
47+
//// dbMonitoring();
48+
//// }
49+
////
50+
//// if("on".equals(serverMonitoring)) {
51+
//// // serverMonitoring();
52+
//// }
53+
//
54+
// } catch (Exception e) {
55+
// e.printStackTrace();
56+
// }
57+
//
58+
// System.out.println("END");
59+
// }
60+
//
61+
// public static void dbMonitoring() {
62+
// System.out.println("\n==================================================================================================================================");
63+
// System.out.println(ConsoleUtils.BACKGROUND_CYAN + "※ DB Monitoring을 시작합니다." + ConsoleUtils.RESET);
64+
// System.out.println("==================================================================================================================================\n");
65+
//
66+
// // DB Usage Check
67+
// List<JdbcConnectionInfo> jdbcConnectionList = propRepo.getJdbcConnectionMap();
68+
// for(JdbcConnectionInfo jdbc : jdbcConnectionList) {
69+
// System.out.println("■ [ " + jdbc.getJdbcDBName() + " Monitoring Start ]\n");
70+
// AbstractDatabase db = new JdbcDatabase(jdbc);
71+
// db.init();
72+
// DBCheckRepository repo = new DBCheckRepositoryImpl(db);
73+
// DBCheckUsecase usecase = new DBCheckUsecaseImpl(repo, ReportFileRepo.getInstance());
74+
// DBCheckBatch dbBatch = new DBCheckBatch(usecase);
75+
// dbBatch.startBatchArchiveUsageCheck();
76+
// dbBatch.startBatchTableSpaceUsageCheck();
77+
// dbBatch.startBatchASMDiskUsageCheck();
78+
// //System.out.println("□ [ " + dbName + " Monitoring End ]\n\n");
79+
// }
80+
// }
81+
//
82+
// public static void serverMonitoring() {
83+
// System.out.println("\n==================================================================================================================================");
84+
// System.out.println(ConsoleUtils.BACKGROUND_CYAN + "※ Server Monitoring을 시작합니다." + ConsoleUtils.RESET);
85+
// System.out.println("==================================================================================================================================\n");
86+
//
87+
// // Server Usage Check
88+
// List<JschConnectionInfo> jschConnectionList = propRepo.getJschConnectionMap();
89+
// for(JschConnectionInfo jsch : jschConnectionList) {
90+
// System.out.println("■ [ " + jsch.getServerName() + " Monitoring Start ]\n");
91+
// JschServer server = new JschServer(jsch);
92+
// server.init();
93+
// ServerCheckRepository repo = new ServerCheckRepositoryImpl(server);
94+
// ServerCheckUsecase usecase = new ServerCheckUsecaseImpl(repo);
95+
// ServerCheckBatch serverBatch = new ServerCheckBatch(usecase);
96+
//
97+
//// String alertLogFilePath = propRepo..getString(jsch.getServerName().toLowerCase() + ".server.alertlog.filepath");
98+
//// String alertLogReadLine = propRepo.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.readline");
99+
//// String alertLogDateFormat = propRepo.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.dateformat");
100+
//// String alertLogDateFormatRegex = propRepo.propConfig.getString(jsch.getServerName().toLowerCase() + ".server.alertlog.dateformatregex");
101+
//// AlertLogCommand alc = new AlertLogCommand("tail", alertLogReadLine, alertLogFilePath, alertLogDateFormat, alertLogDateFormatRegex);
102+
//// AlertLogCommandPeriod alcp = new AlertLogCommandPeriod(alc, DateUtils.addDate(DateUtils.getToday("yyyy-MM-dd"), 0, 0, -1), DateUtils.getToday("yyyy-MM-dd"));
103+
//// serverBatch.startBatchAlertLogCheckDuringPeriod(alcp);
104+
//// serverBatch.startBatchOSDiskUsageCheck();
105+
// //System.out.println("□ [ " + serverName + " Monitoring End ]\n\n");
106+
// }
107+
// }
108+
//}
109+
//
110+
///*
111+
//[추가해야 할 사항]
112+
// 1. 조회결과 엑셀파일 작성
113+
// 2. 엑셀파일 읽어 모니터링 현황 가시화
114+
// 3. AlertLog 내 Error 발생 키워드 수정
115+
// 4. AlertLog Error 발생 시, 해당 부분의 로그 출력
116+
// 5. 각 조회결과 사용량 기준치 초과 시 알람 전송
117+
// 6. Console 출력내용 파일 형태로 저장
118+
// 7. DB 조회결과 테이블형태로 출력 (j-text-utils 라이브러리 이용하여 구현. 더 나은 라이브러리 조사 필요)
119+
//*/
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package root.applications;
2+
3+
import java.io.BufferedReader;
4+
import java.io.File;
5+
import java.io.IOException;
6+
import java.io.InputStreamReader;
7+
import java.util.Arrays;
8+
import java.util.List;
9+
import java.util.stream.Collectors;
10+
11+
import root.core.repository.constracts.PropertyRepository;
12+
import root.core.repository.implement.PropertyRepositoryImpl;
13+
import root.core.service.contracts.PropertyService;
14+
import root.core.service.implement.FilePropertyService;
15+
import root.utils.PatternUtils;
16+
17+
/**
18+
* ConsoleApp은 Console을 통해 입/출력을 수행합니다.
19+
*
20+
* @author DKY
21+
*
22+
*/
23+
public class ConsoleApp {
24+
25+
public static final String DEFAULT_CONFIG_DIR = "./config/connectioninfo";
26+
27+
private static PropertyService propService;
28+
29+
public static void main(String[] args) throws IOException {
30+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
31+
32+
// STEP1: 접속정보 설정파일 선택
33+
String selectedFile = "";
34+
while (true) {
35+
System.out.println("접속정보 설정파일을 선택해주세요.");
36+
List<String> configFiles = Arrays.asList(new File(DEFAULT_CONFIG_DIR).list()).stream()
37+
.filter(fileName -> fileName.endsWith(".properties")).collect(Collectors.toList());
38+
39+
if (configFiles.size() == 0) {
40+
System.out.println("접속정보 설정파일이 존재하지 않습니다. 프로그램을 종료합니다.");
41+
return;
42+
}
43+
44+
for (int i = 0; i < configFiles.size(); i++) {
45+
System.out.println(String.format("[%d] %s", (i + 1), configFiles.get(i)));
46+
}
47+
48+
String input = br.readLine().trim();
49+
if (!PatternUtils.isOnlyNumber(input)) {
50+
System.out.println("잘못 입력하셨습니다. 접속정보 설정파일을 다시 선택해주세요.");
51+
continue;
52+
}
53+
54+
int selectedId = Integer.valueOf(input);
55+
if (!PatternUtils.isOnlyNumber(input) || selectedId <= 0 || selectedId > configFiles.size()) {
56+
System.out.println("잘못 입력하셨습니다. 접속정보 설정파일을 다시 선택해주세요.");
57+
continue;
58+
}
59+
60+
selectedFile = configFiles.get(selectedId - 1);
61+
break;
62+
}
63+
System.out.println(String.format("선택된 파일은 [%s] 입니다.", selectedFile));
64+
65+
// STEP2: 선택된 접속정보 설정파일 Load
66+
String propertiesFilePath = DEFAULT_CONFIG_DIR + "/" + selectedFile;
67+
try {
68+
PropertyRepository propRepo = PropertyRepositoryImpl.getInstance();
69+
propRepo.loadConnectionInfoConfig(propertiesFilePath);
70+
propService = new FilePropertyService(propRepo);
71+
} catch (Exception e) {
72+
System.out.println("configuration loading error\n" + e + "\n");
73+
return;
74+
}
75+
76+
// STEP3: 접속정보 설정파일 내, 모니터링여부 설정파일 찾기 및 LOAD
77+
String selectedPreset = "";
78+
while (true) {
79+
System.out.println(String.format("사용하실 모니터링여부 설정을 선택해주세요."));
80+
81+
List<String> presetNames = propService.getMonitoringPresetNameList();
82+
if (presetNames.size() == 0) {
83+
System.out.println("모니터링여부 설정파일이 존재하지 않습니다. 프로그램을 종료합니다.");
84+
return;
85+
}
86+
87+
for (int i = 0; i < presetNames.size(); i++) {
88+
System.out.println(String.format("[%d] %s", (i + 1), presetNames.get(i)));
89+
}
90+
91+
String input = br.readLine().trim();
92+
if (!PatternUtils.isOnlyNumber(input)) {
93+
System.out.println("잘못 입력하셨습니다. 모니터링여부 설정파일을 다시 선택해주세요.");
94+
continue;
95+
}
96+
97+
int selectedId = Integer.valueOf(input);
98+
if (!PatternUtils.isOnlyNumber(input) || selectedId <= 0 || selectedId > presetNames.size()) {
99+
System.out.println("잘못 입력하셨습니다. 모니터링여부 설정파일을 다시 선택해주세요.");
100+
continue;
101+
}
102+
103+
selectedPreset = presetNames.get(selectedId - 1);
104+
break;
105+
}
106+
System.out.println(String.format("선택된 파일은 [%s] 입니다.", selectedPreset));
107+
}
108+
}

0 commit comments

Comments
 (0)