Skip to content

Commit e93cc51

Browse files
authored
Merge pull request #177 from Dokyeongyun/develop
Develop
2 parents 3ccd74a + 1580db6 commit e93cc51

Some content is hidden

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

45 files changed

+2605
-921
lines changed

src/main/java/root/applications/ConsoleApp.java

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,31 @@
88
import java.util.List;
99
import java.util.stream.Collectors;
1010

11+
import dnl.utils.text.table.TextTable;
12+
import dnl.utils.text.table.csv.CsvTableModel;
13+
import root.common.database.contracts.AbstractDatabase;
14+
import root.common.database.implement.JdbcDatabase;
15+
import root.common.server.implement.JschServer;
16+
import root.core.batch.DBCheckBatch;
17+
import root.core.batch.ServerCheckBatch;
18+
import root.core.domain.AlertLogCommandPeriod;
19+
import root.core.domain.JdbcConnectionInfo;
20+
import root.core.domain.JschConnectionInfo;
21+
import root.core.repository.constracts.DBCheckRepository;
1122
import root.core.repository.constracts.PropertyRepository;
23+
import root.core.repository.constracts.ServerCheckRepository;
24+
import root.core.repository.implement.DBCheckRepositoryImpl;
1225
import root.core.repository.implement.PropertyRepositoryImpl;
26+
import root.core.repository.implement.ReportFileRepo;
27+
import root.core.repository.implement.ServerCheckRepositoryImpl;
1328
import root.core.service.contracts.PropertyService;
1429
import root.core.service.implement.FilePropertyService;
30+
import root.core.usecase.constracts.DBCheckUsecase;
31+
import root.core.usecase.constracts.ServerCheckUsecase;
32+
import root.core.usecase.implement.DBCheckUsecaseImpl;
33+
import root.core.usecase.implement.ServerCheckUsecaseImpl;
34+
import root.utils.CsvUtils;
35+
import root.utils.DateUtils;
1536
import root.utils.PatternUtils;
1637

1738
/**
@@ -77,17 +98,17 @@ public static void main(String[] args) throws IOException {
7798
String selectedPreset = "";
7899
while (true) {
79100
System.out.println(String.format("사용하실 모니터링여부 설정을 선택해주세요."));
80-
101+
81102
List<String> presetNames = propService.getMonitoringPresetNameList();
82103
if (presetNames.size() == 0) {
83104
System.out.println("모니터링여부 설정파일이 존재하지 않습니다. 프로그램을 종료합니다.");
84105
return;
85106
}
86-
107+
87108
for (int i = 0; i < presetNames.size(); i++) {
88109
System.out.println(String.format("[%d] %s", (i + 1), presetNames.get(i)));
89110
}
90-
111+
91112
String input = br.readLine().trim();
92113
if (!PatternUtils.isOnlyNumber(input)) {
93114
System.out.println("잘못 입력하셨습니다. 모니터링여부 설정파일을 다시 선택해주세요.");
@@ -104,5 +125,53 @@ public static void main(String[] args) throws IOException {
104125
break;
105126
}
106127
System.out.println(String.format("선택된 파일은 [%s] 입니다.", selectedPreset));
128+
129+
// STEP4: 설정파일의 접속정보를 읽어 DB,Server 객체 생성 및 출력
130+
List<String> dbNames = propService.getMonitoringDBNameList();
131+
List<JdbcConnectionInfo> jdbcConnectionList = propService.getJdbcConnInfoList(dbNames);
132+
System.out.println("저장된 DB접속정보는 다음과 같습니다.");
133+
TextTable dbTable = new TextTable(
134+
new CsvTableModel(CsvUtils.toCsvString(jdbcConnectionList, JdbcConnectionInfo.class)));
135+
dbTable.printTable(System.out, 2);
136+
137+
List<String> serverNames = propService.getMonitoringServerNameList();
138+
List<JschConnectionInfo> jschConnectionList = propService.getJschConnInfoList(serverNames);
139+
System.out.println("저장된 Server접속정보는 다음과 같습니다.");
140+
TextTable serverTable = new TextTable(
141+
new CsvTableModel(CsvUtils.toCsvString(jschConnectionList, JschConnectionInfo.class)));
142+
serverTable.printTable(System.out, 2);
143+
144+
// TODO STEP5: 모니터링여부 설정 읽기
145+
146+
// STEP6: 모니터링 수행
147+
System.out.println("DB 모니터링을 수행합니다.");
148+
for (JdbcConnectionInfo jdbc : jdbcConnectionList) {
149+
System.out.println("■ [ " + jdbc.getJdbcDBName() + " Monitoring Start ]\n");
150+
AbstractDatabase db = new JdbcDatabase(jdbc);
151+
db.init();
152+
DBCheckRepository repo = new DBCheckRepositoryImpl(db);
153+
DBCheckUsecase usecase = new DBCheckUsecaseImpl(repo, ReportFileRepo.getInstance());
154+
DBCheckBatch dbBatch = new DBCheckBatch(usecase);
155+
dbBatch.startBatchArchiveUsageCheck();
156+
dbBatch.startBatchTableSpaceUsageCheck();
157+
dbBatch.startBatchASMDiskUsageCheck();
158+
System.out.println("■ [ " + jdbc.getJdbcDBName() + " Monitoring End ]\n\n");
159+
}
160+
161+
System.out.println("Server 모니터링을 수행합니다.");
162+
for (JschConnectionInfo jsch : jschConnectionList) {
163+
System.out.println("■ [ " + jsch.getServerName() + " Monitoring Start ]\n");
164+
JschServer server = new JschServer(jsch);
165+
server.init();
166+
ServerCheckRepository repo = new ServerCheckRepositoryImpl(server);
167+
ServerCheckUsecase usecase = new ServerCheckUsecaseImpl(repo);
168+
ServerCheckBatch serverBatch = new ServerCheckBatch(usecase);
169+
170+
AlertLogCommandPeriod alcp = new AlertLogCommandPeriod(jsch.getAlc(),
171+
DateUtils.addDate(DateUtils.getToday("yyyy-MM-dd"), 0, 0, -1), DateUtils.getToday("yyyy-MM-dd"));
172+
serverBatch.startBatchAlertLogCheckDuringPeriod(alcp);
173+
serverBatch.startBatchOSDiskUsageCheck();
174+
System.out.println("■ [ " + jsch.getServerName() + " Monitoring End ]\n\n");
175+
}
107176
}
108177
}
Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,51 @@
11
package root.applications;
22

3-
import java.io.File;
4-
53
import javafx.application.Application;
6-
import javafx.fxml.FXMLLoader;
4+
import javafx.scene.Parent;
75
import javafx.scene.Scene;
8-
import javafx.scene.layout.AnchorPane;
9-
import javafx.scene.text.Font;
106
import javafx.stage.Stage;
117
import root.core.repository.constracts.PropertyRepository;
128
import root.core.repository.implement.PropertyRepositoryImpl;
9+
import root.javafx.Controller.HomeController;
10+
import root.javafx.Controller.LeftMenuController;
11+
import root.javafx.DI.DependencyInjection;
1312

1413
public class Program extends Application {
1514

15+
public static Stage stage;
16+
1617
PropertyRepository propRepo = PropertyRepositoryImpl.getInstance();
1718

1819
@Override
1920
public void start(Stage primaryStage) throws Exception {
2021

22+
stage = primaryStage;
23+
24+
setUpDependecyInjector();
25+
2126
// configuration load
2227
propRepo.loadCombinedConfiguration();
2328

2429
// fxml load
2530
System.setProperty("prism.lcdtext", "false"); // ¾ÈƼ¾Ù¸®¾î½Ì (Font ºÎµå·´°Ô)
2631

27-
String[] fontFiles = new File("./src/main/resources/font").list();
28-
for(String font : fontFiles) {
29-
Font.loadFont(getClass().getResourceAsStream("./src/main/resources/font/" + font), 10);
30-
}
31-
32-
FXMLLoader homeloader = new FXMLLoader();
33-
homeloader.setLocation(getClass().getResource("/fxml/Home.fxml"));
34-
AnchorPane homePane = homeloader.load();
35-
36-
Scene scene = new Scene(homePane, 1200, 650);
37-
scene.getStylesheets().add(getClass().getResource("/css/javaFx.css").toExternalForm());
38-
32+
Parent root = DependencyInjection.load("/fxml/Home.fxml");
3933
primaryStage.setTitle("DB Monitoring Window Program");
40-
primaryStage.setScene(scene);
34+
primaryStage.setScene(new Scene(root, 1200, 650));
4135
primaryStage.show();
42-
4336
}
4437

4538
public static void main(String[] args) {
39+
if(System.getProperty("resourceBaseDir") == null) {
40+
System.setProperty("resourceBaseDir", "");
41+
}
42+
4643
launch(args);
4744
}
45+
46+
private void setUpDependecyInjector() {
47+
// save the factory in the injector
48+
DependencyInjection.addInjectionMethod(HomeController.class, param -> {return new HomeController();});
49+
DependencyInjection.addInjectionMethod(LeftMenuController.class, param -> {return new LeftMenuController();});
50+
}
4851
}

src/main/java/root/core/batch/DBCheckBatch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public DBCheckBatch(DBCheckUsecase dbCheckUsecase) {
1212
public void startBatchArchiveUsageCheck() {
1313
try {
1414
this.dbCheckUsecase.printArchiveUsageCheck();
15-
this.dbCheckUsecase.writeExcelArchiveUsageCheck();
15+
// this.dbCheckUsecase.writeExcelArchiveUsageCheck();
1616
this.dbCheckUsecase.writeCsvArchiveUsage();
1717
}catch(Exception e) {
1818
e.printStackTrace();
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package root.core.domain;
2+
3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
6+
import lombok.AllArgsConstructor;
7+
import lombok.Data;
8+
import root.core.domain.enums.MonitoringType;
9+
10+
@AllArgsConstructor
11+
@Data
12+
public class MonitoringYN {
13+
14+
private String monitoringAlias;
15+
private List<MonitoringTypeAndYN> monitoringTypeList;
16+
17+
public MonitoringYN(String monitoringAlias) {
18+
this.monitoringAlias = monitoringAlias;
19+
}
20+
21+
public List<MonitoringType> getDistinctMonitoringTypes() {
22+
return monitoringTypeList.stream().map(type -> type.getMonitoringType()).distinct()
23+
.collect(Collectors.toList());
24+
}
25+
26+
@AllArgsConstructor
27+
@Data
28+
public static class MonitoringTypeAndYN {
29+
private MonitoringType monitoringType;
30+
private boolean isMonitoring;
31+
}
32+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package root.core.domain.enums;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public enum MonitoringType {
7+
8+
ARCHIVE("DB", "Archive"), TABLE_SPACE("DB", "TableSpace"), ASM_DISK("DB", "ASM Disk"), OS_DISK("SERVER", "OS Disk"),
9+
ALERT_LOG("SERVER", "Alert Log");
10+
11+
private String category;
12+
private String name;
13+
14+
MonitoringType(String category, String name) {
15+
this.category = category;
16+
this.name = name;
17+
}
18+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package root.core.domain.enums;
2+
3+
import java.util.Collections;
4+
import java.util.Map;
5+
import java.util.Optional;
6+
import java.util.function.Function;
7+
import java.util.stream.Collectors;
8+
import java.util.stream.Stream;
9+
10+
import lombok.Getter;
11+
12+
@Getter
13+
public enum RoundingDigits {
14+
15+
ONE(1), TWO(2), THREE(3), FOUR(4), FIVE(5);
16+
17+
private int digits;
18+
19+
private RoundingDigits(int digits) {
20+
this.digits = digits;
21+
}
22+
23+
private static final Map<Integer, RoundingDigits> roundingDigitsMap = Collections.unmodifiableMap(
24+
Stream.of(values()).collect(Collectors.toMap(RoundingDigits::getDigits, Function.identity())));
25+
26+
public static RoundingDigits find(final int digits) {
27+
return Optional.ofNullable(roundingDigitsMap.get(digits)).orElse(TWO);
28+
}
29+
30+
public static RoundingDigits find(final String digits) {
31+
try {
32+
return find(Integer.parseInt(digits));
33+
} catch (NumberFormatException e) {
34+
return TWO;
35+
}
36+
}
37+
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public interface PropertyRepository {
5151

5252
String getLastUseMonitoringPresetName();
5353

54+
String getLastUseMonitoringPresetName(String filePath);
55+
5456
String[] getMonitoringDBNames();
5557

5658
String[] getMonitoringServerNames();
@@ -59,9 +61,11 @@ public interface PropertyRepository {
5961

6062
void createNewPropertiesFile(String filePath, String type);
6163

62-
List<JdbcConnectionInfo> getJdbcConnectionMap();
63-
64-
List<JschConnectionInfo> getJschConnectionMap();
64+
JdbcConnectionInfo getJdbcConnectionInfo(String dbName);
6565

66-
Map<String, AlertLogCommand> getAlertLogCommandMap();
66+
JschConnectionInfo getJschConnectionInfo(String serverName);
67+
68+
AlertLogCommand getAlertLogCommand(String serverName);
69+
70+
String getMonitoringConfigResource(String key);
6771
}

0 commit comments

Comments
 (0)