/***************************************************************************
                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	__LOGFILESENDER_H__
#define	__LOGFILESENDER_H__

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

///@brief 로그 디렉토리에서 일정 시간이 지난 로그 파일 삭제
class CLogFileSender : public CLogFileProcessThread
{
// Attributes
private:
	///@brief 최상위 로그 디렉토리 경로 저장.
	std::string m_szLogRoot;

	///@brief CLogFileSender을 테스트하는 클래스가 private에 접근할 수 있도록 하기 위함.
	friend class CLogFileSenderTest;

protected:

public:


// Operations
private:
	///@brief 경로 path와 path의 하위 디렉토리에서 log파일들을 제외한다. 단, 당일의 log는 제외
	///@param path [in] 최상위 로그 디렉토리 경로.
	///@param period [in] 로그 파일 보존 기간.
	///@return 경로 path가 존재하지 않거나 디렉토리가 아니면 false, 반환 그렇지 않으면 true 반환.
	bool SendFiles( std::string path);

	///@brief 파일을 unlink 시키는 함수.
	///@param filename [in] 삭제할 파일명
	///@return unlink 성공하면 true, 그렇지 않으면 false 반환.
//	bool Unlink( std::string filename );

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

	///@brief 해당 log 파일이 어느 데몬의 로그인지 얻는다.
	///@param szFullName [in] 파일명
	///@return szAppName [out] 데몬 명
	bool GetApplicationName(string szFullName, string& szAppName);

	void FileSending(string szAppName,string szFullName);

	bool IsTodayFile(string szFullName);

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

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

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

#endif //	__LOGFILESENDER_H__
