Files
interactive/cc_logbackup/logmngd/src/LogFileProcessThread.h
T
2026-08-07 17:38:18 +09:00

157 lines
5.2 KiB
C++

/***************************************************************************
Log File Process Base Trhead
-----------------------------------------
begin : 2015/10/07
copyright : (C) 2010 SolutionBox Inc.
author : Service 1 Team
email : svc1@solbox.com
version : 1.0
CopyRight(C) 2010 SolutionBox Inc. All Rights reserved.
Redistribution and use in source and binary forms, with or with out
modification, are not permitted in outside of SolutionBox Inc.
***************************************************************************/
#ifndef __CASH_GENERATOR_H__
#define __CASH_GENERATOR_H__
#include <pthread.h>
#include <string>
#include <stdint.h>
#include "Logger.h"
#include "Signal_handle.h"
using namespace std;
/// @brief
class CLogFileProcessThread
{
public:
/// @brief 생성자
CLogFileProcessThread(string myname);
~CLogFileProcessThread();
/// @brief Thread를 생성하고, 이를 시작한다.
/// @param none
/// @return 성공은 return true 실패는 return false
bool Start();
/// @brief ProcessStatus 내의 RCDB 관련 설정값을 이용해 DB Connection을 한다.
/// @param sighandle 쓰레드에서 signal에 따라 정상 종료하도록 signal handle을 전달한다.
/// @param pshmemNetworStat 공유메모리 포인터
/// @return 성공하면 return true 실패하면 return false
bool ThreadInit(const sig_atomic_t *sighandle);
// Attributes
private:
// 쓰레드 핸들
pthread_t m_threadHandle;
const sig_atomic_t *m_sighandle;
///@brief 작업 시간 구간을 저장하는 구조체.
typedef struct LOG_FILE_PROCESS_TIME_SCOPE
{
int begin;
int end;
} LogFileProcessTimeScope;
///@brief 상태값.
typedef enum LOG_FILE_PROCESS_STATUS
{
LFP_READY = 0,
LFP_SLEEP,
LFP_WORKING,
LFP_DONE
} LogFileProcessStatus;
///@brief 오늘 날자를 저장. struct tm 구조체의 tm_mday 값.(1~31)
int m_nToday;
///@brief 현재 상태를 저장.
LogFileProcessStatus m_nStatus;
///@brief 작업 시간 구간을 저장.
LogFileProcessTimeScope m_TimeScope;
bool bFirst;
string m_szMyName;
// Operations
private:
///@brief 상태를 설정하는 함수.
///@param status [in] 설정할 상태값.
///@return none.
void SetStatus( LogFileProcessStatus status );
///@brief 현재 상태를 얻는 함수.
///@param none.
///@return 현재 상태를 반환.
LogFileProcessStatus GetStatus() { return m_nStatus; };
///@brief 정수형의 상태를 입력 받아서 문자열로 반환하는 함수.
///@param status [in] 상태값.
///@return status에 해당하는 문자열을 반환.
/// "LFP_READY", "LFP_SLEEP", "LFP_WORKING", "LFP_DONE" , "UNKOWN" 중 하나.
std::string GetStrStatus( LogFileProcessStatus status );
///@brief 작업 시작 여부를 판단하는 함수.
///@param now [in] 현재 시각을 저장하고 있는 tm 구조체.
///@return 현재 상태에 따라 아래의 값을 반환.
/// - LFP_READY : 현재 시각이 작업 시간 구간에 있는지 확인해서 작업 시간 구간이면 true, 그렇지 않으면 false 반환.
/// - LFP_DONE : false 반환
/// - LFP_SLEEP : false 반환
/// - LFP_WORKING : false 반환
bool IsBeginWork( struct tm& now );
///@brief 주어진 시간이 작업 시간 구간인지 판단하는 함수.
///@param hour [in] 시간값 (0~23)
///@return 4 <= hour < 7이면 true, 그렇지 않으면 false 반환.
bool IsInWorkTimeScope( int hour );
///@brief 날자가 변경 되었는지를 확인하는 함수.
///@param day [in] 날자값 (1~31)
///@return 주어진 day가 m_nToday와 같으면 false, 다르면 true 반환.
bool IsChangedDay( int day );
///@brief 작업 시간 구간 내에서 실제로 작업을 시작할 때까지 대기할 수 있는 최대 시간을 초 단위로 계산하는 함수.
///@param now [in] 현재 시각을 저장하고 있는 tm 구조체.
///@return 주어진 시간에서 작업 시간 구간의 마지막 시간까지의 남은 초를 반환.
/// 주어진 시간이 작업 구간 내에 있지 않거나 시간 정보가 올바르지 않으면 -1 반환.
int GetMaxSleepSecond( struct tm& now );
///@brief 오늘 날자를 구하는 함수
///@param none.
///@return 오늘 날자를 반환한다.(1~31)
int GetToday();
int Rand( uint32_t max, uint32_t key );
// Functions
private:
// 쓰레드 시작 루틴이다.
static void* EntryPoint(void* arg);
// 해당 함수의 내용은 수정하지 말것.
void Execute();
protected:
///@brief 실제 로그 파일을 처리하는 함수.
///@ 가상 함수로 CLogFileProcessThread 클래스를 상속받는 자식 클래스에서 구현해야 한다.
virtual bool DoWork() { return false; };
///@brief 주어진 경로가 디렉토리인지 아닌지를 판단하는 함수.
///@param path [in] 경로.
///@return path가 존재하지 않거나 파일이면 false, 그렇지 않으면 true 반환.
bool IsDirectory( std::string path );
///@brief 파일을 unlink 시키는 함수.
///@param filename [in] 삭제할 파일명
///@return unlink 성공하면 true, 그렇지 않으면 false 반환.
bool Unlink( std::string filename );
};
#endif //__CASH_GENERATOR_H__