Files
interactive/rcts/rc_sscd/src/StorageUsedCalcThread.h
T
2026-08-07 17:38:18 +09:00

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__ */