11package root .core .repository .implement ;
22
3+ import java .io .BufferedReader ;
34import java .io .BufferedWriter ;
45import java .io .File ;
6+ import java .io .FileNotFoundException ;
7+ import java .io .FileReader ;
58import java .io .FileWriter ;
69import java .io .IOException ;
10+ import java .util .ArrayList ;
11+ import java .util .List ;
12+ import java .util .Map ;
13+ import java .util .stream .Collectors ;
714
815import org .apache .commons .lang3 .StringUtils ;
916
1017import lombok .extern .slf4j .Slf4j ;
11- import root .core .domain .MonitoringResult ;
12- import root .core .domain .TableSpaceUsage ;
1318import root .core .repository .constracts .ReportRepository ;
1419import root .utils .CsvUtils ;
1520
@@ -31,46 +36,34 @@ public static ReportRepository getInstance() {
3136 * 모니터링 결과를 파일에 기록한다.
3237 */
3338 @ Override
34- public void writeReportFile (String filePath , String fileName , String fileExtension ,
35- MonitoringResult <?> monitoringResult ) {
39+ public < T > void writeReportFile (String filePath , String fileName , String fileExtension , List < T > monitoringResult ,
40+ Class < T > clazz ) {
3641
3742 File file = new File (rootDirectory + "/" + filePath + "/" + fileName + fileExtension );
38- File parentDir = file .getParentFile ();
39-
4043 String content = null ;
41-
4244 try {
4345
44- boolean isNewFile = false ;
4546 if (!file .exists ()) {
46- parentDir .mkdirs ();
47- isNewFile = file .createNewFile ();
47+ file . getParentFile () .mkdirs ();
48+ file .createNewFile ();
4849 }
4950
50- // 첫 파일작성인 경우 헤더 추가
51- if (isNewFile ) {
52- content = StringUtils .joinWith ("," , "MONITORING_DATE" , "MONITORING_TIME" ,
53- CsvUtils .createCsvHeader (TableSpaceUsage .class ));
54- }
51+ content = CsvUtils .createCsvHeader (clazz );
5552
56- // 모니터링결과 Row 추가
57- String monitoringDay = monitoringResult .getMonitoringDay ();
58- String monitoringTime = monitoringResult .getMonitoringTime ();
59- for (Object obj : monitoringResult .getMonitoringResults ()) {
60- String rowString = StringUtils .joinWith ("," , monitoringDay , monitoringTime ,
61- CsvUtils .createCsvRow (obj , obj .getClass ()));
62- content = StringUtils .joinWith (System .lineSeparator (), content , rowString );
53+ for (Object t : monitoringResult ) {
54+ String row = CsvUtils .createCsvRow (t , t .getClass ());
55+ content = StringUtils .joinWith (System .lineSeparator (), content , row );
6356 }
6457 } catch (Exception e ) {
6558 e .printStackTrace ();
6659 }
6760
6861 if (content == null ) {
69- log .error (String .format ("파일에 작성할 내용이 없습니다. 파일경로: %s" , file .getPath ()));
62+ log .info (String .format ("파일에 작성할 내용이 없습니다. 파일경로: %s" , file .getPath ()));
7063 return ;
7164 }
7265
73- try (BufferedWriter bw = new BufferedWriter (new FileWriter (file , true ))) {
66+ try (BufferedWriter bw = new BufferedWriter (new FileWriter (file , false ))) {
7467 bw .append (content );
7568 bw .flush ();
7669 bw .close ();
@@ -79,4 +72,46 @@ public void writeReportFile(String filePath, String fileName, String fileExtensi
7972 }
8073 }
8174
75+ @ Override
76+ public List <String > getReportHeaders (File file ) {
77+ List <String > result = new ArrayList <>();
78+
79+ try (BufferedReader br = new BufferedReader (new FileReader (file ))) {
80+
81+ String firstLine = br .readLine ();
82+ Map <Integer , String > headerMap = CsvUtils .parseCsvLine (firstLine );
83+ List <Integer > sortedKeyList = headerMap .keySet ().stream ().sorted ().collect (Collectors .toList ());
84+
85+ for (int i : sortedKeyList ) {
86+ result .add (headerMap .get (i ));
87+ }
88+
89+ } catch (FileNotFoundException e ) {
90+ e .printStackTrace ();
91+ } catch (IOException e ) {
92+ e .printStackTrace ();
93+ }
94+
95+ return result ;
96+ }
97+
98+ @ Override
99+ public String getReportContentsInCsv (File reportFile ) {
100+ StringBuilder result = new StringBuilder ();
101+
102+ try (BufferedReader br = new BufferedReader (new FileReader (reportFile ))) {
103+
104+ String line = br .readLine ();
105+ while ((line = br .readLine ()) != null ) {
106+ result .append (line ).append (System .lineSeparator ());
107+ }
108+
109+ } catch (FileNotFoundException e ) {
110+ e .printStackTrace ();
111+ } catch (IOException e ) {
112+ e .printStackTrace ();
113+ }
114+
115+ return result .toString ();
116+ }
82117}
0 commit comments