/****************************************************************************
				Telegraf control calss 
				-----------------------------------------

	begin      : 2021/05/10
	copyright  : (C) 2005 Solbox Inc.
	author     : huibong
	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 __TELEGRAF_CONTROL_H__
#define __TELEGRAF_CONTROL_H__

#include <unistd.h>

#include <string>


// CTelegrafControl class
// telegraf 에 대한 alive 상태 check, 재기동 처리 등의 action 을 수행하기 위한 class
// 본 class 는 telegraf 관련 interface 만 제공하고...
// 실제 판단 및 명령은 상위 worker 프로세스 상에서 수행한다.
class CTelegrafControl
{
	public:

		// 생성자
		CTelegrafControl();

		// 소멸자
		~CTelegrafControl();


		// telegraf process 의 PID 정보 반환...
		// - 정보 추출시 오류 또는 미동작 상황인 경우.. 0 반환
		int GetProcessId();

		// telegraf service start
		void ServiceStart();

		// telegraf hang  check
		bool IsHang();

		// telegraf SIGQUIT signal 전송
		// - log 상에 stack trace 남기고 재기동 처리됨
		// - hang 상황시.. trace 처리 후 재기동 처리하기 위한 함수.
		void ServiceQuit();


		// telegraf 의 기동 후 elapsed time 정보를 추출한다.
		// - ps -o etimes= -p `pgrep -x telegraf` 명령을 이용하여 추출
		// - 0 인 경우.. 오류로 판단...
		long long GetProcessElapsedSec();


		// telegraf service restart
		void ServiceRestart();


	private:
		void Trim( std::string & str );


};

#endif /* __TELEGRAF_CONTROL_H__ */

