본문 바로가기
Java 문제

[Java문제풀기] 로그 파일을 읽어 트랜젝션ID 별 응답소요시간 구하기

by 두리두리안 2021. 6. 13.

 

로그 파일을 읽어 트랜젝션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);
        }
    }
}