/**************************************************************************** Thread class for storage used calcutator per service ----------------------------------------- begin : 2015/08/31 copyright : (C) 2005 Solbox Inc. author : Dev Storage Team 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 __STORAGE_USED_CALC_THREAD_H__ #define __STORAGE_USED_CALC_THREAD_H__ #include #include #include #include "RcdbInfo.h" #include "Database.h" // 각 서비스별 계산된 Storage 사용량 정보를 저장하기 위한 Struct.... struct storage_used_info { unsigned int timestamp; // 5분 단위 timestamp 값 저장... int user_seq; // 고객사 sequence 정보.. int svc_seq; // 서비스 sequence 정보. unsigned long long quota; // 할당량 (Byte) unsigned long long used; // 사용량 (Byte) unsigned long long check_resource_id; // 조회 기준 resource_id 값. unsigned long long check_get_lastmodified; // 조회 기준 get_lastmodifed 값. }; /// @brief CStorageUsedCalcThread /// 본 클래스는 Thread 클래스로서... /// RCDB 정보를 기준으로 서비스별 스토리지 사용량 정보를 주기적으로 계산하여... RCDB 및 Local DB 에 저장하는 역활을 수행한다. class CStorageUsedCalcThread { public: // 생성 및 소멸자. CStorageUsedCalcThread(); ~CStorageUsedCalcThread(); // 업무 Flow 작업 시작 bool Start( void ); private: // Thread function.... static void * threadFunc( void * arg ); // 실제 작업 수행을 담당하는 함수 void Execute( void ); // Full Scan 을 담당하는 rc_du 를 실행시킨다. bool ExecuteFullScanProcess(); // RCDB 에 저장된 full scan 실행 결과 정보를 조회하여 내부 객체인 m_vecStorage 에 저장 처리한다. bool GetFullScanResult( CRcdbInfo & rcdbInfo, unsigned int nowTimestamp ); // RCDB t_sms_sp_svc_product 테이블로 부터 서비스 정보를 추출하여.. 멤버변수 m_vecStorage 에 저장한다. // return value : -1 : RCDB Query 수행 등의 오류 발생시 // 0 : 처리할 서비스 정보가 존재하지 않는 경우. // 양수 : 처리할 서비스의 갯수 int GetServiceInfoFromRCDB( DataBase & rcdb ); // 멤버 변수 m_vecStorage 에 저장된 서비스에 대하여.... // Local db storage_stat 테이블에 저장된 마지막 스토리지 사용량, partial scan 관련 정보 값을 조회하여 저장 처리한다. // return value : -1 : Local DB 접속 실패 등의 오류 발생시... // 0 : 처리할 서비스 정보가 존재하지 않는 경우. // 양수 : 처리할 서비스의 갯수 int GetLastStorageStatFromLocal(); // 멤버 변수 m_vecStorage 에 저장된 서비스별 Storage 사용량 정보를 Local DB 에 저장 처리한다. bool SaveStorageStatToLocal( unsigned int nowTimestamp ); // 멤버 변수 m_vecStorage 에 저장된 서비스별 Storage 사용량 정보를 RCDB 에 저장 처리한다. bool SaveStorageStatToRCDB( DataBase & rcdb, unsigned int nowTimestamp ); // 멤버 객체 m_vecStorage 에 저장된 서비스별 스트리지 사용량을 확인하여.. 지정된 임계치가 초과할 경우. report 로그에 기록 처리한다. void CheckQuotaForReport( unsigned int nowTimestamp ); private: // 쓰레드 핸들 pthread_t m_threadHandle; // DB 조회 정보를 저장할 Vector 객체 std::vector m_vecStorage; }; #endif /* __STORAGE_USED_CALC_THREAD_H__ */