모니터링 자동화 - Teamviewer 상태 관리

2023. 12. 18. 23:05개발/C#

2023.12.17 - [개발 기록/C#] - 모니터링 자동화 - 웹 크롤링

 

모니터링 자동화 - 웹 크롤링

C# Selenium 라이브러리를 활용해 모니터링 페이지의 데이터를 크롤링 테스트한다. 크롤링 함수 public bool GetMonitoringSiteData() { bool flag = false; #region 리스트 초기화 companyListMgr.companyIdList. Clear(); companyL

iruk.tistory.com

 

웹 크롤링 기능에 이어, Teamviewer API 호출 내용 정리

 

수용가 별 PC 에 Teamviewer 소프트웨어를 설치.

해당 PC들을 id 및 이름 부여하여 원격 접속으로 관리.

 

Teamviewer 사의 API 를 활용해서,

내가 등록한 PC들의 연결 상태를 응답받을 수 있음

 

무수히 많은 Teamviewer API 호출 시도 끝에,
직접 Teamviewer 사에 영문 메일 요청 등

고생고생한 기록은 스킵하고 ( 사실 별 게 없었음, 나의 지식 부족 )

Teamviewer API 호출 성공 이후 작업 정리


Teamviewer API 호출

public bool GetTeamviewerOffline()
{
    bool flag = false;
    offlineCompanyIdList.Clear();

    try
    {
        HttpWebRequest request = WebRequest.Create(teamviewerApi) as HttpWebRequest;
        request.Headers.Add("Authorization", "Bearer " + accessToken);
        request.Method = "GET";
        WebResponse webResp = request.GetResponse();

        Stream responseStream = webResp.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        string result = reader.ReadToEnd();

        jobj = JObject.Parse(result);

        string devices = jobj["devices"].ToString();

        JArray jsonArray = JArray.Parse(devices);
        foreach (JObject item in jsonArray)
        {
            if (item.ContainsKey("description"))
            {
                offlineCompanyIdList.Add(item["description"].ToString()); // 팀뷰어 장치 별 "설명(description)"란에 각 수용가의 companyId를 적어뒀음
            }
            continue;
        }

        companyListMgr.CompanyIdToName(offlineCompanyIdList);

        flag = true;
        return flag;
    }
    catch (Exception)
    {
        return flag;
    }
}

 

해당 bool 형 함수를 통해 

Teamviewer 가 오프라인 상태인 장치만 추출한다.

 

https://webapi.teamviewer.com/api/v1/docs/index

 

TeamViewer API Documentation

 

webapi.teamviewer.com

 

팀뷰어 API 종류는 위 사이트에 기재되어있는데

내 지식 수준에서는 그닥 친절하지 않다 느껴져서 고생 좀 했다.

HttpWebRequest request = WebRequest.Create(teamviewerApi) as HttpWebRequest;
request.Headers.Add("Authorization", "Bearer " + accessToken);
request.Method = "GET";
WebResponse webResp = request.GetResponse();

Get 메소드로 teamviewer API 중

오프라인 상태 장치 목록 API 사용

Stream responseStream = webResp.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string result = reader.ReadToEnd();

jobj = JObject.Parse(result);

string devices = jobj["devices"].ToString();

JArray jsonArray = JArray.Parse(devices);
foreach (JObject item in jsonArray)
{
    if (item.ContainsKey("description"))
    {
        offlineCompanyIdList.Add(item["description"].ToString()); // 팀뷰어 장치 별 "설명(description)"란에 각 수용가의 companyId를 적어뒀음
    }
    continue;
}
companyListMgr.CompanyIdToName(offlineCompanyIdList);
flag = true;
return flag;

 

result 값에, Json 형식으로

팀뷰어 장치 id, 명, 생성날짜, 상태 등의 정보가 반환된다.

(팀뷰어 오프라인 상태인 장비만)

 

devices [] Json 배열에 담겨 저장된 값을 파싱,

해당 장치의 description(설명) 에 

장치가 설치된 수용가의 factory Code를 기재해두었다.

 

즉, description 만 추출하여 저장하면

"팀뷰어 오프라인 수용가의 factory Code 리스트" 가 저장됨

 

해당 목록을 CompanyIdToName() 메소드로 전달.

public void CompanyIdToName(List<string> offlineCompanyIdList)
{
    for (int i = 0; i < offlineCompanyIdList.Count; i++)
    {
        for (int j = 0; j < companyIdList.Count; j++)
        {
            if (companyIdList[j] == offlineCompanyIdList[i])
            {
                offlineCompanyNameList.Add(companyNameList[j]);
            }
        }
    }
}

 

파라미터로 전달받은 팀뷰어 오프라인 장치 code 목록을

전체 수용가 code 목록과 비교 후,

값이 겹치면, 해당 수용가의 명 ( ex) 티스토리공장, 티스토리 물류공장 등 ) 을

"offlineCompanyNameList" 에 저장!

 

해당 List를 통해, 팀뷰어 오프라인 수용가의

'이름' 을 모두 알 수 있음 -> 엑셀 연동보고서 파일 작성 시 용이


* 굳이 id -> name 컨버팅 과정을 거친 이유

실제 수용가 명이 "티스토리 공장" 일 때,

팀뷰어에 저장된 이름은 A01 티스토리 공장 이다.

( A = 수용가를 관리하는 지사 코드, 01 = 순번 )

 

연동보고서 파일에 수용가 명을 A01 티스토리 공장 으로 기재하면

A01 이라는 값은 불필요한 정보라 판단해서

깔끔하게 '티스토리 공장' 으로 보고서를 작성하기 위해

팀뷰어 설명란에 code 값을 적고

컨버팅 과정을 거쳤다.

 

나중에 귀찮아지거나 비효율적이게 되면

컨버팅 없이, 보고서에도 A01 티스토리 공장

A02 네이버 공장 등 으로 수정할 생각