112 lines
3.9 KiB
C++
112 lines
3.9 KiB
C++
/****************************************************************************
|
|
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 <pthread.h>
|
|
#include <unistd.h>
|
|
#include <vector>
|
|
|
|
#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<struct storage_used_info> m_vecStorage;
|
|
|
|
};
|
|
|
|
#endif /* __STORAGE_USED_CALC_THREAD_H__ */
|
|
|