로그 파일을 읽어 트랜젝션ID 별 응답소요시간을 구하세요.
* 요청 로그와 응답 로그는 동일한 트랜젝션ID를 갖는다.
* 처리 시간은 로그의 시간 차로 구한다. (응답 로그의 시간 – 요청 로그의 시간)
* 응답소요시간을 못구하는 경우 FAIL로 출력
* 로그 구성(구분자: 스페이스) - 시간, 트랜젝션ID, 요청/응답
package Test_0611;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
public class Second {
public static void main(String[] args) {
try {
Map<String, String> ReqMap = new TreeMap<>(); //Request
Map<String, String> ResMap = new TreeMap<>(); // Response
String filePath = "C:\\Users\\빠큐\\Desktop\\따오기\\Log.txt";
FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
//todo > 구분하기
String[] SplitOption = line.split(" ");
String time = SplitOption[0];
String id = SplitOption[1];
String status = SplitOption[2];
//todo > value를 Response와 Request로 구분
//true.false이기에 String이 아닌 boolean으로 해야 한다.
boolean Request = SplitOption[2].equals("REQUEST");
// System.out.println("Request > " + Request);
boolean Response =SplitOption[2].equals("Response");
// System.out.println("RESPONSE > "+ Response);
//todo > key와 value 설정
//문자열은 비교시 "=="이 아니라 equals를 사용한다.
if(Request == true){
ReqMap.put(id, time);
}else{
ResMap.put(id, time);
}
//todo > Response Time하고 Request Time 구분
int ResTime = Response == true ? Integer.parseInt(SplitOption[0]) : 0;
int ReqTime = Request == true ? Integer.parseInt(SplitOption[0]) : 0;
// System.out.println("reqTime = " + ReqTime);
// System.out.println("resTime = " + ResTime);
}
//todo 출력
for(String Reqkey : ReqMap.keySet()) {
// System.out.println(key + ":" + testMap2.get(key) +"Response");
int ResNum = 0;
int ReqNum = 0;
for(String Reskey : ResMap.keySet()){
if(Reqkey.equals(Reskey)){
ResNum = Integer.parseInt(ResMap.get(Reqkey));
ReqNum = Integer.parseInt(ReqMap.get(Reqkey));
// System.out.println(testMap2.get(key2) + ":" +testMap.get(key));
System.out.println(ReqMap.get(Reskey)+" "+Reqkey+" "+(ResNum - ReqNum)+"sec");
}
}
if(ReqNum == 0 && ResNum == 0) {
System.out.println(ReqMap.get(Reqkey)+" "+Reqkey+" "+"Fail");
}
// System.out.println(ReqNum +":"+ResNum);
}
} catch (FileNotFoundException e) {
System.out.println("파일을 읽을 수 없습니다.");
} catch (IOException e) {
System.out.println(e);
}
}
}
'Java 문제' 카테고리의 다른 글
[JAVA 문제풀이] 2차원 배열을 아래 샘플과 같이 열을 맞추어 출력 (5가지방법) (0) | 2021.06.08 |
---|---|
[Java] 로그 파일을 읽어 트랜젝션ID 별 응답소요시간 구하기 (0) | 2021.05.30 |
[Java] 각 로그의 라인은 객체로 변환 후 처리 (0) | 2021.05.30 |
[Java] 같은 숫자 제거 (0) | 2021.05.07 |
문자열을 정수로 바꾸기 (0) | 2021.05.07 |