115 lines
3.3 KiB
C++
115 lines
3.3 KiB
C++
/****************************************************************************
|
|
rc_balanced process monitoring thread header
|
|
-----------------------------------------
|
|
|
|
begin : 2019/03/07
|
|
copyright : (C) 2005 Solbox Inc.
|
|
author : huibong
|
|
email : huibong@solbox.com
|
|
version : 3.5
|
|
|
|
CopyRight(C) 2005 Solbox Inc. All Rights reserved.
|
|
Redistribution and use in source and binary forms, with or with out
|
|
modification, are not permitted in outside of Solbox Inc.
|
|
*****************************************************************************/
|
|
|
|
|
|
#ifndef __PROCESS_MONITORING_THREAD_H__
|
|
#define __PROCESS_MONITORING_THREAD_H__
|
|
|
|
#include "RebalanceData.h"
|
|
#include "DataQueue.hpp"
|
|
#include "CopyControlThread.h"
|
|
|
|
#include <pthread.h>
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
|
|
|
|
|
|
// 각 FHS 별 unlink 처리한 정보 저장을 위한 구조체
|
|
// map 을 통해서 관리하기 때문에 각 장비 hostname 을 정보에 포함시키지 않는다.
|
|
struct FhsUnlinkInfo {
|
|
|
|
unsigned long long hour_sum; // 시간당 삭제 sum
|
|
unsigned long hour_count; // 시간당 삭제 count
|
|
|
|
unsigned long long day_sum; // 일일 삭제 sum
|
|
unsigned long day_count; // 일일 삭제 count
|
|
};
|
|
|
|
|
|
|
|
// CProcessMonitoringThread class
|
|
// - 프로세스 내부의 각 작업 queue count 정보를 주기적으로 console 상에 업데이트 처리
|
|
// - 주기적으로 rebalance 처리 상황을 로깅
|
|
class CProcessMonitoringThread
|
|
{
|
|
|
|
public:
|
|
|
|
// 생성자
|
|
CProcessMonitoringThread(
|
|
CDataQueue<CRebalanceData> * const pQueueMoveStandby
|
|
, CDataQueue<CRebalanceData> * const pQueueUpdateStandby
|
|
, CDataQueue<CRebalanceData> * const pQueueDeleteStandby
|
|
, CCopyControlThread * const pCopyControlThread
|
|
);
|
|
|
|
// 소멸자
|
|
~CProcessMonitoringThread();
|
|
|
|
|
|
// Thread 를 생성하여 상태정보를 주기적으로 갱신, 로깅 처리한다.
|
|
bool Start( void );
|
|
|
|
// 현재 프로세스 표시 정보 직접 업데이트
|
|
void UpdateTitle( void );
|
|
|
|
// PhysicalDeleteThread 모듈로 부터 정상적으로 삭제한 FHS, content 정보를 전달받기 위한 함수
|
|
// - 전달받은 정보는 내부적으로 저장했다가 주기적으로 logging 처리
|
|
void UpdateDeletedInfo( CRebalanceData & data );
|
|
|
|
|
|
|
|
private:
|
|
|
|
// Thread Handle
|
|
pthread_t m_threadHandle;
|
|
|
|
// Move 처리할 대상을 저장하는 queueMoveStandby 객체에 대한 포인터
|
|
CDataQueue<CRebalanceData> * m_pQueueMoveStandby;
|
|
|
|
// FHS Copy 처리 완료 후 RCDB 업데이트 대상 content 정보를 저장하는 queueUpdateStandby 객체에 대한 포인터
|
|
CDataQueue<CRebalanceData> * m_pQueueUpdateStandby;
|
|
|
|
// unlink 처리 대상 content 정보를 저장하는 queueDeleteStandby 객체에 대한 포인터
|
|
CDataQueue<CRebalanceData> * m_pQueueDeleteStandby;
|
|
|
|
// copy control thread 객체에 대한 포인터
|
|
CCopyControlThread * m_pCopyControlThread;
|
|
|
|
// unlink 처리한 FHS 별 통계 정보 저장을 위한 객체
|
|
std::map<std::string, struct FhsUnlinkInfo> m_mapUnlinkInfo;
|
|
pthread_mutex_t m_mutexUnlinkInfo;
|
|
|
|
|
|
private:
|
|
|
|
// Thread loop base function
|
|
static void * threadFunc( void * arg );
|
|
|
|
// 실제 상태 정보 업데이트를 수행하는 함수
|
|
void Execute( void );
|
|
|
|
// FHS 별 삭제 처리한 통계 정보를 로깅 및 초기화 처리한다.
|
|
void printUnlinkInfo( void );
|
|
|
|
|
|
|
|
};
|
|
|
|
#endif /* __PROCESS_MONITORING_THREAD_H__ */
|