YBIGTA/EC2-Dashboard

Parser Issue

Opened this issue · 4 comments

Parser Issue

현재 parser에 대한 이슈가 존재합니다.

각 OS에 따라서 혹은 HardWare에 따라서 parser code의 parsing 여부가 달라집니다.

터미널 명령어인 top에 대해서 각 OS마다 다른 결과물이 나오기 때문에 Physical memory에 대해서 IndexOutOfBoundsException이 발생합니다.

해당 이슈에 대해서 2가지의 방법이 있을 것으로 생각됩니다.

  1. 확실하게 parsing할 수 있는 방법을 모색하는 것입니다. -> python으로 parser를 만들고 난 뒤에 이를 program에 연결하는 방법
  2. 각 OS마다 parser를 따로 만드는 방법이 있습니다. -> window, linux, macOS정도를 목표로 3개의 다른 parser class를 만드는 방법이 있습니다.
  • 제 생각으로는 1번을 우선적으로 진행하되 연결이 잘 되지 않거나 중간에 예상치 못하는 오류가 생긴다면 2번으로 방향을 돌리는 것이 나을 것이라고 생각합니다.

😀이 외에도 다른 의견이 있다면 알려주시면 감사하겠습니다.

1번 방법에 관해서, 파이썬으로 parsing를 하더라도 해당 에러를 완전하게 해결하지 못할 것 같습니다. ex) 파이썬으로 하더라도 process의 이름에 숫자가 들어가고 뛰어쓰기로 구분되는 경우 -> (말이 안 되지만 이름이) Chrome 1.4

2번 방법과 관련해서, 각 os 내에서도 버전에 따라서 top 명령어의 output이 다르게 나옵니다. 그래서 일단 타겟 os 범위를 줄여서 저희 프로젝트 목표인 EC2에서 저희가 활발하게 사용하는 ubuntu linux를 타겟으로 해서 파싱해서 top 명령어 output을 통일하는 방법이 저는 좋을 것 같습니다.

우선 2번 문제에 대해서는 저는 타당성이 있다고 생각합니다. 주로 ec2를 사용하면 open source인 linux를 사용할 것 같으므로 linux를 기준으로 parsing obj를 만들면 좋을 것 같습니다.

다만 1번에 대해서는 processor name이 문제가 된다면 cpu열을 찾아서 pid와 cpu 사이는 processor name이라고 로직을 정리해 보면 좋을 것 같습니다.

  1. Row에서 pid분리
  2. Cpu 값은 0.0% 형태이므로 %를 기준으로 processor name + cpu 분리
  3. Cpu앞에 digit인 부분을 cpu usage로 계산
  4. 남은 부분 전체를 processor name으로 결정

위 방식대로라면 정상적으로 작동 할 수 있을 것 같은데 한번 확인해서 해결해 보면 좋을 것 같습니다!

다른 의견 있다면 남겨주시면 감사하겠습니다!

제 컴퓨터에서 top command output 보면 %CPU column에 float 값 뒤에 %가 안 붙는데, 혹시 다른 분들 컴퓨터에서는 %가 붙나요?

ex) 이런 식으로 나옵니다
%CPU
35.1
10.7

근데 %CPU 다음에 오는 TIME(02:38.74, 02:38:74 형태)을 기준으로 CPU와 processor name 분리하는 방식으로하면 CPU 퍼센트와 processor name 구분이 가능할 것 같고, 굳이 Python을 사용하지 않아도 Java에서 충분히 가능할 것 같습니다.

초-----비상!!!
자바 사용해서 parsing시에 split 말구, substring이랑 trim 사용해서 parsing 완료했습니다!!!!

처음 parsing 시에 공백 문자를 기준으로 split해서 index로 접근하는 형식으로 파싱했는데,
top command의 결과가 한 row에서 각 column value들이 공백 문자 하나(" ")로 구분되니깐, 각 column value별로 substring으로 시작과 끝 을 구해서 substring 얻고, substring 뒤쪽에 공백문자들이 있을 수 있어서 trim처리도 했습니다.

아래는 그 테스트로 파싱한 결과이고, 맨 아래줄이 top command output이고 그 외에는 파싱한 결과를 출력했습니다!
스크린샷 2022-11-15 오후 4 21 17