Git Product home page Git Product logo

system-monitor-study's People

Contributors

damin8 avatar dependabot[bot] avatar jongwuner avatar winterlood avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

system-monitor-study's Issues

PC Extension Error

  1. Post (나 언제꺼?)
  • 50분에 끄는거야~

image

  1. Get (나한테 할 말 있어?)
  • 1분전에 알려줘

image

  1. Post (연장신청)
  • 나 52분으로 연장할래~

image

  1. Post (나 언제꺼?)
  • 50분에 끄는거 Response (powerStatus : ON) 으로 제대로 온다.

image

  1. Get (나한테 할 말 있어?)
  • Response가 안온다.

  • 원래대로라면 null 값으로 Response가 와서 다시 요청해야 함.

image


결론

연장신청 했을 때

원래대로라면 Post(나 언제꺼?) 와 Get(나한테 할 말 있어?)가 둘 다 Response가 와야 한다.

현재는

Get (나한테 할 말 있어?) 의 Response가 와야 하는데 오지 않는다

둘 중 Post만 온다.

Client's MAC Address

필요 사유

  • 원격 종료/ 재부팅에 필요할 걸로 예상됨

구현 예상

  • ARP Protocol 사용시, 해당 Router의 ARP Table 조회시 습득 가능할 걸로 예상됨

  • MAC Addr 은 불변하니, Client와 Server 연결시에 한번만 조회 시키면 되니 부하 전혀 없음

  • 빨리 검토 부탁드려요 ^&^

GET : `~/mobile/pc/` 에서 'n' 식별

22hours 서버 상

image

  • 'n' 이 식별됨.

로컬 환경 상

image

  • 'n' 이 식별되지 않음.

추측되는 원인으로는,
json 반환결과를 보기좋게 정렬하려고 , "\r\n" 을 넣는데,
그것의 부작용인 것 같다. UTF-8, encoding 코드가 있는데, 요게 호환문제가 있으려나?
json 자체를 반환하는 목적의 측면에서는 해결하는데 큰 어려움은 없다.

@winterlood

강의실 별 PC 분류

  • 강의실 별로 PC 분류를 해놓으면 편하지 않을까
  • Ex) D404 의 PC들, D405 의 PC들

시작하는 시점에서 드는 의문점 3가지

system-monitor 의문점

  1. 목표는 다솔관 PC 관리 시스템(<-system-monitor를 우리의 현실에서 와닿게 표현하기 위함.)
  2. Diagram은 시간이 너무 많이걸려서 불필요하다라는 말씀
  • 의문점1 : 요구사항 분석과 class, sequence에 대한 기획은 어느정도가 적당한가?
  • 의문점2 : 대쉬보드로 소통하는 것으로 diagram설계해서 대화하는것을 대체할 수 있는가?
  1. ☆ 요구사항분석을 어떤식으로 할 것인가?

Storage, Memory 모듈 검토 및 추후 방향

Storage, Memory 모듈 초안완성

갓선욱 한번 검토해주세요.

image

Network

바로 시작하겠습니다.

부가기능

어떤 순서로 , 어떻게?
View도 만들어야 하지 않을까? qt GUI도 공부해봐야겠다.

PC 변수

image

ramData, startTime, endTime이 안들어가는 현상

instance not same (@pathvariable id != Json의 id)

image

드래그해놓은 id와, URL상의 id가 다르다!

이렇게 해도 지금 정상적인 입력이 진행되는데,
혼동이 올까봐 이 부분은 이 현상이 못일어나게 수정하겠음.

GUI qt

  • qt GUI 기반 Client 설계중
    • qt creator 활용

현재 프로세스에서 사용중인 CPU 사용량

image

#pragma comment(lib, "pdh.lib")

#include<iostream>
#include "windows.h"

using namespace std;

static ULARGE_INTEGER lastCPU, lastSysCPU, lastUserCPU;
static int numProcessors;
static HANDLE self;


void init() {
	SYSTEM_INFO sysInfo;
	FILETIME ftime, fsys, fuser;
	GetSystemInfo(&sysInfo);
	numProcessors = sysInfo.dwNumberOfProcessors;

	GetSystemTimeAsFileTime(&ftime);
	memcpy(&lastCPU, &ftime, sizeof(FILETIME));


	self = GetCurrentProcess();
	GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
	memcpy(&lastSysCPU, &fsys, sizeof(FILETIME));
	memcpy(&lastUserCPU, &fuser, sizeof(FILETIME));
}

double getCurrentValue() {
	FILETIME ftime, fsys, fuser;
	ULARGE_INTEGER now, sys, user;
	double percent;

	GetSystemTimeAsFileTime(&ftime);
	memcpy(&now, &ftime, sizeof(FILETIME));


	GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
	memcpy(&sys, &fsys, sizeof(FILETIME));
	memcpy(&user, &fuser, sizeof(FILETIME));
	percent = (sys.QuadPart - lastSysCPU.QuadPart) + (user.QuadPart - lastUserCPU.QuadPart);
	percent /= (now.QuadPart - lastCPU.QuadPart);
	percent /= numProcessors;
	lastCPU = now;
	lastUserCPU = user;
	lastSysCPU = sys;

	return percent;
}

int main() {
	init();
	while (1) {
		cout << "This Process USAGE : " << getCurrentValue()<<"\n";
		Sleep(500);
	}
}

SDL 2.0 사용 시 컴파일 x

SDL 2.0 API 사용

CpuData 모듈에서 L1 메모리값 불러오기 위해 SDL_GetCPUCacheLineSize() 사용.

SDL_cpuinfo.h을 참조하였음.

image


다음과 같은 에러 발생. 다른 SDL 함수를 사용해봐도 동일한 증상.
#include "include\SDL.h"
#include "include\SDL_cpuinfo.h"
#include <stdio.h>

int SDL_GetCPUCacheLineSize(void);
int main(int argc, char* argv[]) {
	printf("CacheLineSize = %d", SDL_GetCPUCacheLineSize());
	return 0;
}

Reference

1. SDL 2.0 Official Site :

2. Stackoverflow "SDL" :

Alternative flow

같이 얘기를 해보고 같이 정규화를 해야 하는 상황들

내가 생각한것이고, 더 추가가 무조건 될 것임.

Master 입장

  1. 네트워크가 끊겼을 때, Client의 컴퓨터를 어떻게 관리할건지

  2. Client의 프로세스가 하나 이상 켜져 있더라도, 일정 시간 사용을 안하면 Client는 나간 것으로 판별하여 종료를 시킬텐데, 그 안에 중요 문서가 있다면?

  3. Client의 프로세스가 하나 이상 켜져있고, 일정 시간 사용을 안하지만 그에 대해 발표나 회의를 하고 있다면?

2번과 3번은 비슷한 맥락

PC 종료 (나 언제꺼?) Bug

#47 에 있는 나 언제꺼? (PC Shutdown)

1. PC -> Server (나 언제꺼?) Post Long-Polling

1.1. URL로 Post 던지기

image


1.2. Request 던진 후에 Response 대기

image

Long Polling 이기 때문에 응답 대기중


1.3. Server의 Log

image


2. PC -> Server (나한테 할 말 있어?) Get Long-Polling

2.1. 10분 전에 알려달라고 요청

image

Long-Polling 이라 응답 대기중

2.2. Server의 Log

image

2.3. 10분전에 응답(response) 확인

image

3. Android -> Server (PC 끄기 endTime은 1분 앞으로 설정) Post Long-Polling

3.1. 지정한 시간(endTime)에 PC 끄기 요청

image

Android의 Post Long-Polling 이라 response 대기중

3.2. Server의 Log

image

4. Android 에게 endTime이 되면 response로 id와 powerStatus가 정상적으로 온다.

4.1. Android의 response

image

Android Post-Long-polling의 response는 온다.

4.2. PC의 response

image

아직도 대기중이다.

결론

현재 Android가 끄는 요청 post를 날려서 해당 시간이 되어도, client PC 에게 response가 안 온다.

하지만 Android에게는 status : OFF 로 오게 된다.

따라서 client PC의 "나 언제꺼??" Long polling의 response를 확인해야 할 듯 하다.

PC 사용자가 PC를 자의적으로 끌 때

사용자가 컴퓨터를 끌 때

  1. 우리 프로그램도 꺼질 것임.

  2. 우리 프로그램 꺼질 때 Post로 Server에게 id랑 powerStatus를 준다.

ex) {id : 홍길동, powerStatus : OFF}

  1. One-time

사용자가 우리 프로그램을 끌 때

  1. 컴퓨터를 끌 때와 똑같다.

  2. 왜? 어차피 우리 프로그램을 사용하지 않으면, 서비스로 등록하지 않는 이상 우리는 아무것도 알 수가 없다.

  3. 따라서 우리 프로그램 종로 = powerStatus = OFF 랑 같다고 취급


  • 사용자가 PC를 자의적으로 끄거나 프로그램 종료할 때를 생각해봤는데 이렇게 하면 어떨까 싶어서

  • Server와 얘기를 해야 하는 것이라서

  • @jongwuner 어떻게 생각하십니까

다소 충격적?인 나의 생각 (PC Client <-> Server)

생각을 하고 하고 하고 또 하고

조심스럽게 내 생각을 올려 봅니다.

PC Client와 Server의 통신 (Client -> Server)

순서대로

  1. 나 언제꺼? (Post Long-Polling)
  • Body에는 각종 정보 들어가 있다.
  • endTime이 되면 Server에서 Response로 끄라고 온다.
  1. 나한테 할 말 있어? (Get Long-Polling)
  • 몇 분 전에 알릴껀지?
  • N 분 전이 된다면 Response로 "N분 전입니다! 자료 서둘러 주세요!"
  • 다시 Get 요청
  1. data 업데이트 (Post General-Polling 주기적으로 n분마다)
  • Body에는 각종 정보 들어가 있다.

생각

일단 위에는 프로그램이 실행이 되면 무조건 실행이 되는 부분이다.

  • 사용자가 아무것도 안해도 되어야 하는 부분

우리 통신에 대해서 생각을 하다가

이제와서 아차! 싶었던 생각이 들었다.

굉장히 근본적인 생각인데

1번에서 Post Long-Polling 의 Response를 신경써야 하는 이유가 있나?

이렇게 생각하는 이유

  • 우리는 Get 요청으로 몇 분 남았는지 알 수 있다.
  • 그렇다면 남은 시간이 0분이라는 뜻은?
  • 꺼야 된다는 뜻 (PC Client 에서 처리 해주기)

이렇게 된다면 Post Long-Polling 의 Response를 신경 쓸 필요도 없을 뿐 더러
Server에서 굳이 Request를 붙잡고 있을 필요도 없다.

또, Client 입장에서 Post라면 "어떠어떠한 것을 바꿔줘!" 이다.
그렇다면 Response가 어떻게 오던간에 Post를 던지면 끝이어야 하는게 아닌가?


결론

PC Client -> Server로 가는 모든 Post 의 response는 null 이 와야 한다고 생각. (붙잡고 있을 필요도 없다)

Get Long-Polling 의 Response에 따라 Client가 처리 하겠습니다.

이 의견에 대한 생각을 부탁드립니다 @jongwuner

PC 연장 Bug

#47 에 있는 PC 연장

1. PC -> Server (나 언제꺼?) Post Long-Polling

1.1. Post Long-Polling URL로 요청 + response 대기

image

2. PC -> Server (나한테 할 말 있어?) Get Long-Polling

2.1. Get Long-Polling 5분 전으로 설정 + response 대기

image

3. PC -> Server 연장신청 (One-Time)

image

이때, 1번과 2번의 response가 와야 하는데 오지 않는다.

image


결론

연장신청을 하면, get, post의 response가 오기로 했었지만 오지 않는다.

Spring REST API Server pcs배열 문제 식별

문제 식별 URL

http://13.125.225.221/mobile/pc

문제 식별

Android Client

문제 원인

PC 전체를 조회하는 GET method 에서 문제가 발생함
image

살펴보니 다음과 같은 설계와 다른 점이 존재 함

기존 설계

image

현재 서버 상태

image

차이점

기존 설계에서는 pcs 배열의 value는

pcs : [ {item 1 }. {item 2}. {item 3}] 

다음과 같았으나, 현재 server에서 확인되는 pcs는 다음과 같은 형태

pcs : [ "{item 1 }". "{item 2}". "{item 3}" ] 

따라서 JSON Array 를 읽어오는 과정에서 runtime error 식별되었음

현재

Android 상에서 해결 가능한 내용인지 검토중...

요청

Server 상에서 원래 설계 구도와 동일하게 변경해 줄 수 있는지 요청

Version 2 설계의 필요한 모든 것 A to Z

1 pc id

2 어플이 켜지는 순서와 pc가 켜지는 순서의 관계를 어떤식으로

  • pc들이 켜져있고, 어플이 켜질때,
    (Server, Mobile) 1000대를 모두 조사해서 powerStastus = ON애들을 다 가져온다.

  • 어플이 먼저켜져있을 때, pc가 추가 켜진다.
    (Mobile) longpolling get 으로 대기를 한 상태에서, pc가 켜질때, get을 해온다.
    (PC) 켜질때, 언제꺼요? post날려줄때, to send Android pc의 모든 정보를 mobile로 보내준다.

  • 어플이 켜져있을때, pc가 종료된다.
    (PC) 언제꺼요?에서 longpolling 'response'할 때,(종료예약시간이 되엇을떄) 끌꺼아냐.
    (Mobile) PC longpolling response를 이벤트로 걸어서, 저게 발생하면, 해당 id를 인스턴스 삭제. 그리고 UI에서는 껏다는 표시.
    (Server) DB에 powerStastus = OFF

  • pc를 사용자가 임의로 종료시켜버린다.
    -> 아이디어 1 : (종원) pc로부터 general polling(id, cpuData, ramData) 이 일정시간동안 동작하지 않으면, PC는 먼저 껴저버린 것으로 판단.
    -> 아이디어 2 : (다민) 종료할때, shutdown hook으로 post를 보낸다. request : "나 갑자기 지금꺼요~"
    -> 아이디어 3 : (지금 현 상태) 종료시간이 안되었는데, 그냥 pc꺼져있지만, pc가 켜져있다고 서버에서 인지하고있는 것.
    (PC방 카운터프로그램도 켜져있다고 인지하니깐, 사용시간이 남아있으면, )

PC Client -> Server Request 종류 명시

Request 종류

GET

Mesaage channel (Long Polling)

URL = http://13.125.225.221/pc/{id}/message/{minute}

Post

PC Shutdown (Long Polling)

-> v1.2.1 General Polling으로 구현되어있음.

처음에 접속하자 마자

classId, powerStatus, id, name, cpuData, ramData, startTime, endTime 보내주기

URL = http://13.125.225.221/pc/{id}/power/{endTime}

PC Extension (One-time)

id와 endTime보내주기

ex) {id : 홍길동, endTime : 2010-02-56-21-39}

URL = http://13.125.225.221/pc/{id}/power/{endTime}

PC Update (General Polling)

id와 cpuData, ramData 보내주기

ex) {id : 홍길동, cpuData : 77.23, ramData : 31.45}

URL = http://13.125.225.221/pc/{id}/data

Response 종류

Get

id 와 msg 받기

ex) {id : 홍길동, msg : 2분남았습니다. 자료 정리 서둘러라.}

PC 연장신청을 대비해서

msg가 null 값이 들어오는 경우 대비


Post

PC Shutdown (Long Polling)

id와 powerStatus 받기

ex) {id : 홍길동, powerStatus : OFF}
*ON / OFF 대문자

PC 연장신청을 대비해서

powerStatus가 ON이 오는 경우 대비


PC Extension(One-time)

  • 필요 없다.

PC Update(General Polling)

  • 필요 없다.

창업 동아리

운영 목표

  • 우수 창업 아이디어 발굴 및 육성
  • 창업 교과목/캡스톤디자인과 연계를 통한 창업동아리 발굴 및 육성
  • 대학 전반의 창업분위기 확산 및 창업 마인드 함양
  • 사업화 아이디어의 구체화를 통한 실천창업자 양성

지원 내용

  • 창업 동아리 발탁 되면 링크 사업단에서 지원해주는 내용

STEP 01

창업교육

  • 창업 강좌
  • 캡스톤디자인
  • 글로벌창의인재과정
  • 창업캠프

STEP 02

창업동아리지원

  • 운영비지원
  • 내/외부 창업경진대회 지원
  • 창업멘토링

STEP 03

실전사업화지원

-시제품개발지원
-지식재산권취득지원
-창업실무과정지원
-창업심화멘토링

STEP04

창업지원

  • 창업LAB 입주
  • 사업자등록지원
  • 기타 정부지원사업 연계지원
  • 창업보육센터 입주 연계지원

참여대상

  • 창업 아이템을 보유한 대학생(원) 재학(휴학)생
  • 창업동아리 회원 수 최소 3인 이상 팀 단위로 신청

신청 방법

  • 매년 3월 전체 공개모집
  • 가톨릭대학교 공지사항 또는 LINC+ 사업단 홈페이지 참조
공개 모집 외에 참신한 창업아이템을 보유한 창업 동아리를 수시 모집하오니, 관심 있는 학생들은 창업 대학운영팀을 방문 후 상담 바람

문의처

구)02-2164-4734

전화해서 알아 본 내용

현재 가톨릭대학교에서 창업 동아리는 20개 이상이라고 함.

창업 동아리에도 등급이 있는데(일반, 심화)

매년 여름방학때 심사 후에 갈린다고 함.

문의처 전화번호가 바꼈다고 함 (02-2164-4734)

공개 모집 외에 참신한 창업아이템을 보유한 창업 동아리를 수시 모집한다고 해서 물어보니 방문하면 된다고 함.

지금까지 구현해둔 메소드들(19-10-13)

해당 변수(O)들은 찾았으나...

image

  • 핸들러 갯수 : 못찾음
  • 소켓 갯수 : 못찾음
  • 코어 갯수 : 논리프로세서갯수로밖에 못찾았음.
  • 가상화여부 : 못찾음
  • L1, L2, L3 :
    * SDL 2.0 API로 구할 수 있을 듯. 지금 컴파일오류(#5)

software-version-management

  • 레지스트리를 통해 해당 소프트웨어 버전 get
  • 해당 소프트웨어에서 업데이트할 수 있는 URL 확보
  • #13 원격 파일 송/수신 Include 고려 중....
    • URL확보가 매끄럽게 된다면 Include 안한다

원격 파일 송/수신

  • 각종 소프트웨어 버전관리기능
    • (컨셉) Server PC에 깔려있는 프로그램 기준으로 Client PC의 프로그램이 버전이 더 낮을 때, Client PC에 자동 업데이트 해주는 기능.
    • Client PC에 깔려있는 프로그램 및 버전 확인기능
  • 파일 송/수신
    • Server <-> Client 간 메신저 격으로 파일 송/수신 할 수 있는?
    • 각종 소프트웨어 버전관리기능 에 해당 기능 include 고려 중

CPU 사용량 가져오는 API

image

Windows의 작업 관리자를 참고하여 전체 사용량, 코어당 사용량 등 필요한 정보를 가져오는 API 구현합니다.

// Example
CpuData GetCpuUsageInformation()
{
   // ...
}

Android Data Binding

image

Data Binding이 안되는 문제 발생,

짐작가는 원인

  1. Recycler Adapter Reference의 문제,
  2. MVVM이 아닌 MVP 패턴으로 구현되어있음,
  3. Nullable 변수를 View에 할당

Todo
livedata Plugin 적용 예정
RxJava, Koin, Retrofit2 Library 사용법 숙지

개발에 불가피한 라이브러리들

Mobile에서 PC Client만의 시나리오로 꺼진 PC 꺼지는 이벤트를 감지해야할 필요성

Mobile에서 PC를 껐을 때 response를 받게 된다.
하지만 Mobile Client어플이 작동되고나서, PC Client 시나리오로만 PC가 꺼지는 경우
Android가 이걸 감지할 수 있는가?

없다면 어떻게 해볼까.

두가지 안

  1. 어플이 처음 켜질때 Init 해주는 과정을 시간단위로 반복
  • 이럴경우 새로 켜지는 것에대한 long-polling도 굳이 필요 없어진다.
  1. 새로 켜지는 것을 long-polling으로 받고 있는데, 이후에 꺼지는 것도 long-polling으로 대기한다.

@winterlood

PC켜질때, 언제꺼요? About Long Polling

PC Client -> Server

Post Long Polling (나 언제 꺼요?)

Request (PC Client -> Server)

  • 모든 필드 보내기
  • Response 기다리기

여기서 Response가 늦게(Server 가 잡고 있어서) 와야 하는데

바로 response가 온다.

Response : {"timestamp":"2020-01-28T10:00:11.849+0000","status":404,"error":"Not Found","message":"No message available","path":"/pc/34_E1_2D_3C_81_E7"}

즉, Response를 잡지 못하고 있다.

PC 종료 (나 언제꺼?) Bug2

#47 에 있는 나 언제꺼? (PC Shutdown)

1. PC -> Server (나 언제꺼?) Post Long-Polling

2. PC -> Server (나한테 할 말 있어?) Get Long-Polling

2.1. 1분 전에 꺼지는 알람 보내달라고 요청

image

3. endTime 1분전

3.1. 1분전에 알맞은 알람이 온다.

image

4. endTime이 되었을 때

image

Post Long-Polling의 응답이 오지 않는다.

결론

#60 이랑 같이, Post Long-Pollng의 응답이 오지 않는 것을 보니 Post Long-Polling 쪽을 봐야 할 듯 하다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.