퇴근5분전

  설비가 90여대가 가까운데 프로그램 업데이트가 자동이 아니다. 

할때마다 배포서버에 배포 후 프로그램을 각 설비마다 가서 껐다 켜줘야 한다. 

이때 구형pc는 켜지는게 느리다. 그래서 프로그램이 꺼지면 설비가 일정시간 동안 신호를 받지 못하면 멈춘다. 

 

 그래서... 지금까지는 시간에 쫒기다보니... 재시작 프로그램을 만들 시간을 낼 수가 없어서 몸으로 때웠다.

이제 재시작을 만들었다. 

 추후엔 업데이트할 내역이 있으면 자동 재시작도 가능할거라 생각한다. 

샘플프로그램이다. ( 설비에서 제대로 동작하는 것을 확인 하였다. )

 

1. 버튼을 누르면... 해당 프로그램은 죽으면서 cmd로 Restart 프로그램을 띄운다. 

2. 파라미터로 원래 프로그램의 프로세스명과 재시작해줄 프로그램 실행경로를 넘겨준다. 

3. 재시작 프로그램이 떠서 원 프로그램이 죽는지 체크하고... 죽고 나면 다시 실행시켜준다. 

 -- 이때 설비에 시그널을 던져주기 위해... 별도의 쓰레드를 잠깐 돌려준다. 

+++++++++++++++++++++++++++++++++

추가. 

재시작 프로그램을 도입했는데... 시행착오? 같은게 있었다. 

재시작 할 프로그램도 업데이트 항목에 넣으면... 재시작되는 도중에 업데이트가 안된다. 

 

 업데이트 파일은 ReStart00.exe로 00을 붙여서 배포하고

재시작 하는 이벤트에서 ReStart00.exe를 복사해서 ReStart.exe로 덮어쓰기.

그 후 ReStart.exe를 실행하도록 바꾸었다. 

+++++++++++++++++++++++++++++++++

하나더...

설비별로 별도의 테스트가 필요한 경우가 있어서... 

 

재시작 프로그램이 실행중에 'TestFile' 이라는 폴더에 테스트용 실행파일이 있다면 

파일이 존재하면 옮겨서 붙여넣기 해준다.

+++++++++++++++++++++++++++++++++

또 하나...

이래 저래 시행착오를 거치다가...

ReStart 바로가기 만드는 콘솔프로그램을 만들었다. 

 

 이유는 재시작 프로그램배포와 함께 맞물려서 깔끔하게 안돌아간다... 88대를 배포하다보니...

전체 배포를 했음에도... 신뢰가 안되네... 멈출까봐... 불안한 느낌?

 처음 배포 후 재시작눌렀을때 일부 pc에서 재시작 안하고 콘솔이 종료되는 현상이 있었더랬다... 

수정 후... 잘 되긴 하는데... 구형PC는 좀 불안하긴 함... 

배포할때 ReStart.exe를 붙여넣고 바로가기 생성프로그램을 돌려서

이걸 실행해놓은 상태에서 프로그램을 끈다. 

그러면 정해진 프로세스대로 동작하면서 업데이트 된다. 

 전체 배포가 잘 진행된다 싶을때까지... 구형PC들은 이걸로 사용할 예정이다. 

****************************************************

마지막으로.. 

오늘 모두 배포 완료했다. 시작하자마자 콘솔이 꺼지는 현상도 잡혔고... 

업데이트 중 설비가 멈추지는 않을 듯 하다. 

구형설비의 프로그램이 죽고 되살아 나는데 시간이 참 오래 걸리네... 

 

 이번 플젝에서 설비88대에 대한 모니터링을 만들예정이다. 

딱히 이건 요구사항 정의도 없는 거고... 그냥 설비마다 돌아다니면서 보는게 구찮아.

한달되었는데... 하루 쉬었다. 게다가 새벽에 퇴근도 몇번하고... 차 끊겨서 태워다 주기도 하고...

 

 TCP/IP통신을 할까? gRPC를 할까? WCF로 할까? ... 다 알아봤는데...

다 구찮아.. gRPC는 .net framework로도 안된다.. 4.8에서 된다고는 하는데... 뭐가 복잡한건지... 지원이 된다 안된다... 

인증서 만들어야 한다거나... 포트열어줘야 한다거나... 등등 귀찮아.... 

 

그냥 DB에 넣고 빼자. 

 

그래서 만든 거다. 

큰 프로그램은 88대의 설비를 보여줄 화면이고 1개만 우선 테스트 중이다. 

작은 화면은 설비에서 보낼 설비 정보를 테스트용으로 만든 프로그램이다. 

DB를 통해 전달하고 DB를 읽어서 보여준다. 

 

10분 이상이면

 

장비가 가동 중일때 신호를 받아서 찍어준 것.

 

 이번 플젝에서 사용한 기술이지만... 간략히 메모하자면... 

챠트를 직접 쓰자니... 저거 그리자고 챠트를? 

저런건 간단히 그리자!!!

 /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/  3일치 데이타

 /~~~~~~~~~~~~~~~/ 그려질 컨트롤 가로폭

두개의 데이타로  그려질 컨트롤의 1px에 3일치 데이타의 갯수를 구한다. 

1px에 데이타갯수 =  3일치 데이타 갯수 / 그려질 컨트롤 가로폭

for( loop < 그려질 컨트롤 가로폭 )

    for( loop2 < 1px에 데이타갯수 )

            idx = ( loop * 1px에 그려질 데이타 갯수 ) + loop2

            이렇게 하면 3일치 데이타[ idx ]로 접근이 가능.

            1px에 그려질 데이타의 존재여부에 따라 있으면 loop2 의 for문 탈출....

 

위처럼 하면 1px에 그려질 데이타가 모두 보여지는 것은 아니나... 존재여부에 따라 신호를 그려준다. 

손실률이 있지만... 지금 현재 보고 싶은 그래프 그리는 것엔 충분하다. 

  

 

이렇게 3일치의 데이타를 챠트로 발행/인쇄/배출 신호를 잡아서 뿌려주면 

설비에서 어느 시점에 어떤 신호들이 안왔는지 알 수 있다.

저기에 해당하는 지점의 로그를 살펴서 어떤 이유인지 살펴보게 된다.