/***************************************************************************
                LogFileCleaner.h
                -----------------------------------------
    begin      : 2011/11/09
    copyright  : (C) 2005 SolutionBox Inc.
    author     : Service 1 Team
    email      : svc1@solbox.com

    CopyRight(C) 2005 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.
***************************************************************************/

/***************************************************************************
                소스 수정 히스토리

작성자    작성일       Revision   내용
장희준    2011/11/09   ?          ADD - 최초 등록
***************************************************************************/
#ifndef	__LOGFILECLEANER_H__
#define	__LOGFILECLEANER_H__

#include "LogFileProcessThread.h"
#include "Inode.h"

///@brief 로그 디렉토리에서 일정 시간이 지난 로그 파일 삭제
class CLogFileCleaner : public CLogFileProcessThread
{
// Attributes
private:
	///@brief CLogFileCleaner을 테스트하는 클래스가 private에 접근할 수 있도록 하기 위함.
//	friend class CLogFileCleanerTest;

protected:

public:


// Operations
private:
	///@brief 경로 path와 path의 하위 디렉토리에서 보존기간이 지난 로그 파일을 검색해서 삭제하는 함수.
	///@param path [in] 최상위 로그 디렉토리 경로.
	///@param period [in] 로그 파일 보존 기간.
	///@return 경로 path가 존재하지 않거나 디렉토리가 아니면 false, 반환 그렇지 않으면 true 반환.
	bool UnlinkFiles( std::string path, unsigned int period );

	///@brief 로그 파일의 보존 기간이 초과했는지 여부를 판단하는 함수.
	///@param inode [in] 파일의 inode 정보
	///@param period [in] 보존 기간
	///@return 파일의 마지막 접근 시간이 period를 초과했으면 true, 그렇지 않으면 false.
	bool IsPassedPeriod( CInode& inode, unsigned int period );

	///@brief 파일이 로그 파일인지 여부를 판단하는 함수.
	///       파일의 확장자가 ".log"이면 로그 파일로 판단한다.
	///@param filename [in] 파일명
	///@return filename이 디렉토리이거나 파일의 확장자가 ".log"이 아니면 false, 그렇지 않으면 true 반환.
	bool IsLogFile( std::string filename );

protected:
	///@brief 로그 파일을 삭제하는 메인 함수.
	///       보존 기간이 지난 로그 파일들을 삭제한다.
	///@param none.
	///@return m_szLogRoot이 유효한 디렉토리이면 true 반환, 그렇지 않으면 false 반환.
	bool DoWork();

public:
	///@brief 생성자.
	CLogFileCleaner();

	///@brief 소멸자.
	virtual ~CLogFileCleaner();
	
	///@brief 스레드가 시작하기 전에 초기화 작업을 하는 함수로 CProcessStatus의 초기화 여부와 
	///       최상위 로그 디렉토리의 유효성을 확인한다.
	///       CBaseThread로부터 상속 받음.
	///@param none.
	///@return CProcessStatus가 초기화 되지 않았거나 m_szLogRoot이 유효한 디렉토리가 아니면 false 반환, 
	///        그렇지 않으면 true 반환.
	//bool ThreadInit();
};

#endif //	__LOGFILECLEANER_H__
