/****************************************************************************
                Storage write / read check class
                -----------------------------------------

    begin      : 2018/01/29
    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_CHECK_H__
#define __STORAGE_CHECK_H__

#include "FhsShm.h"
#include "StorageInfo.h"

#include <unistd.h>
#include <string>
#include <vector>


// Storage 관련 임시 file write, read 테스트를 수행하기 위한 class
class CStorageCheck
{
	public:

		// 생성자
		CStorageCheck( CFhsShm * pFhsShm );

		// 소멸자
		~CStorageCheck();
		

	public:   // Storage Write, Read 테스트 관련 함수

		// 초기화 함수
		bool Init( const char * szRoot );

		// Storage 상태 Check 시작
		// - 인자값으로 최상위 storage root path 정보 입력 (check 시마다 정보 추출하여 check 수행하도록 하기 위함)
		// - 오류 발생시 false 반환
		// - Hang 발생 가능하므로 본 함수 호출부에서 timeout 처리 필요
		bool Check( const char * szRoot );


	private:  // 멤버 변수

		// 공유메모리 interface 객체에 대한 포인터.
		// -  공유메모리에 Data Set, Get 을 담당
		CFhsShm * m_pFhsShm;

		// Storage 관련 정보 추출을 담당할 객체.
		CStorageInfo m_storageInfo;

		struct timespec m_timeTotalStart;	// total 소요시간 측정을 위한 멤버변수
		struct timespec m_timeTotalEnd;		// total 소요시간 측정을 위한 멤버변수
		double m_dElapsedTotalTime;			// total 소요시간 측정을 위한 멤버변수

		struct timespec m_timeDiskStart;	// 각 disk 단위 소요시간 측정을 위한 멤버변수
		struct timespec m_timeDiskEnd;		// 각 disk 단위 소요시간 측정을 위한 멤버변수
		double m_dElapsedDiskTime;			// 각 disk 단위 소요시간 측정을 위한 멤버변수

	private:  // 처리 관련 내부 함수

};


#endif /* __STORAGE_CHECK_H__ */

