コード例 #1
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void		bbwincmd(int argc, char *argv[]) {
	string 	bbdisparg;
	
	BBWinNet	bbobj;
	if (strcmp(argv[1], "$") == 0) {
		cout << "will use environment variable BBDISPLAY" << endl;
		bbdisparg = getBBDisplaySetting();
	} else {
		bbdisparg = argv[1];
	}
	bbobj.SetBBDisplay(bbdisparg);
	cout << "bbdisplay defined to : " << bbobj.GetBBDisplay() << "\n";
	cout << "port defined to : " << bbobj.GetPort() << "\n";
	bbobj.SetDebug(true);
	string message = argv[2];
	bool	unkownMessage = false;
	for (int inc = 0; messTable[inc].callBack != NULL; ++inc) {
		int res = message.find(messTable[inc].argument);
		if (res >= 0 && (unsigned int)res <= message.size()) {
			unkownMessage = true;
			if (argc >= messTable[inc].minArg) {
				messTable[inc].callBack(argc, argv, bbobj);
			} else {
				cout << "\n";
				cout << "Error : not enough arguments for : \"" << message << "\"" << "\n\n";
			}
			break ;
		}
	}
	if (unkownMessage == false) {
		cout << "\n";
		cout << "Error : unknown Xymon message type : \"" << message << "\"" << "\n\n";
	}
}
コード例 #2
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void 			BBWinAgentManager::Status(LPCTSTR testName, LPCTSTR color, LPCTSTR text, LPCTSTR lifeTime) {
	bbdisplay_t::iterator			itr;
	BBWinNet	hobNet;
	
	assert(testName != NULL);
	assert(color != NULL);
	assert(text != NULL);
	assert(lifeTime != NULL);
	Pager(testName, color, text, lifeTime);
	PrepareBBWinNetObj(hobNet);
	for ( itr = m_bbdisplay.begin(); itr != m_bbdisplay.end(); ++itr) {
		hobNet.SetBBDisplay((*itr));
		try {
			hobNet.Status(testName, color, text, lifeTime);
		} catch (BBWinNetException ex) {
			if (m_logReportFailure) {
				string mes;
						
				mes = "Sending report to " + (*itr) + " failed.";
				LPCTSTR		arg[] = {m_agentName.c_str(), mes.c_str(), NULL};
				m_log->reportWarnEvent(BBWIN_AGENT, EVENT_MESSAGE_AGENT, 2, arg);
			}
			continue ; 
		}
	}
}
コード例 #3
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void		BBWinAgentManager::Query(LPCTSTR testName, LPTSTR dest, DWORD size) {
	bbdisplay_t::iterator			itr;
	BBWinNet	hobNet;
	string		result;

	assert(testName != NULL);
	assert(dest != NULL);
	itr = m_bbdisplay.begin();
	hobNet.SetBBDisplay((*itr));
	PrepareBBWinNetObj(hobNet);
	try {
		hobNet.Query(testName, result);
	} catch (BBWinNetException ex) {
		if (m_logReportFailure) {
			string mes;

			mes = "Sending config message to " + (*itr) + " failed.";
			LPCTSTR		arg[] = {m_agentName.c_str(), mes.c_str(), NULL};
			m_log->reportWarnEvent(BBWIN_AGENT, EVENT_MESSAGE_AGENT, 2, arg);
		}
	}
	try
	{
		if (dest != NULL && size != 0)
			strncpy(dest, result.c_str(), size);
	}
	catch (...)
	{
		// Failed to write
	}
}
コード例 #4
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Data(int argc, char *argv[], BBWinNet & bbobj)
{
	cout << "Sending data ...\n";
	bbobj.SetHostName(argv[3]);
	cout << "hostname defined to: " << argv[3] << "\n";
	try {
		bbobj.Data(argv[4], argv[5]);
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #5
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Drop(int argc, char *argv[], BBWinNet & bbobj)
{
	bbobj.SetHostName(argv[3]);
	cout << "hostname defined to: " << argv[3] << "\n";
	cout << "Sending drop ...\n";
	try {
		if (argc > 4)
			bbobj.Drop(argv[4]);
		else
			bbobj.Drop();
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #6
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Query(int argc, char *argv[], BBWinNet & bbobj)
{
	cout << "Sending query ...\n";
	bbobj.SetHostName(argv[3]);
	cout << "hostname defined to: " << argv[3] << "\n";
	try {
		string res;
		
		bbobj.Query(argv[4], res);
		cout << "\n" << res << "\n\n";
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #7
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Status(int argc, char *argv[], BBWinNet & bbobj)
{
	
	bbobj.SetHostName(argv[3]);
	cout << "hostname defined to: " << argv[3] << "\n";
	cout << "Sending status ...\n";
	try {
		if (argc > 7)
			bbobj.Status(argv[4], argv[5], argv[6], argv[7]);
		else
			bbobj.Status(argv[4], argv[5], argv[6]);
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #8
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Rename(int argc, char *argv[], BBWinNet & bbobj)
{
	bbobj.SetHostName(argv[3]);
	cout << "hostname defined to: " << argv[3] << "\n";
	try {
		if (argc > 5) {
			cout << "Sending test rename ...\n";
			bbobj.Rename(argv[4], argv[5]);
		} else {
			cout << "Sending test rename ...\n";
			bbobj.Rename(argv[4]);
		}
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #9
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	UploadMessage(int argc, char *argv[], BBWinNet & bbobj)
{
	cout << "Uploading message ...\n";
	try {
		string res;
		ostringstream 	tosend;
        string line;

		ifstream myfile ( argv[3] );

		if (myfile.is_open())
		{
			while (! myfile.eof() )
			{
				getline (myfile,line);
				tosend << line << endl;
			}
			myfile.close();
		}
		else cout << "Unable to open file"; 

		bbobj.Message(tosend.str(), res);
		cout << "Uploading message done !" ;
		cout << "\n" << res << "\n\n";
		
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #10
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Message(int argc, char *argv[], BBWinNet & bbobj)
{
	cout << "Sending message ...\n";
	try {
		string res;
		
		bbobj.Message(argv[3], res);
		cout << "\n" << res << "\n\n";
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #11
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void		BBWinAgentManager::Config(LPCTSTR fileName, LPCTSTR dest) {
	bbdisplay_t::iterator			itr;
	BBWinNet	hobNet;

	assert(fileName != NULL);
	assert(dest != NULL);
	itr = m_bbdisplay.begin(); 
	hobNet.SetBBDisplay((*itr));
	PrepareBBWinNetObj(hobNet);
	try {
		hobNet.Config(fileName, dest);
	} catch (BBWinNetException ex) {
		if (m_logReportFailure) {
			string mes;

			mes = "Sending config message to " + (*itr) + " failed.";
			LPCTSTR		arg[] = {m_agentName.c_str(), mes.c_str(), NULL};
			m_log->reportWarnEvent(BBWIN_AGENT, EVENT_MESSAGE_AGENT, 2, arg);
		}
	}
}
コード例 #12
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void		BBWinAgentManager::Drop()  {
	bbdisplay_t::iterator			itr;
	BBWinNet						hobNet;
		
	PrepareBBWinNetObj(hobNet);
	for ( itr = m_bbdisplay.begin(); itr != m_bbdisplay.end(); ++itr) {
		hobNet.SetBBDisplay((*itr));
		try {
			hobNet.Drop();
		} catch (BBWinNetException ex) {
			if (m_logReportFailure) {
				string mes;
			
				mes = "Sending report to " + (*itr) + " failed.";
				LPCTSTR		arg[] = {m_agentName.c_str(), mes.c_str(), NULL};
				m_log->reportWarnEvent(BBWIN_AGENT, EVENT_MESSAGE_AGENT, 2, arg);
			}
			continue ; 
		}
	}
}
コード例 #13
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void			BBWinAgentManager::Pager(LPCTSTR testName, LPCTSTR color, LPCTSTR text, LPCTSTR lifeTime) {
	bbpager_t::iterator	itr;
	BBWinNet			hobNet;

	assert(testName != NULL);
	assert(color != NULL);
	assert(text != NULL);
	assert(lifeTime != NULL);
	if (m_usepager == true && m_setting["pagerlevels"].length() > 0 && m_bbpager.size() > 0) {
		istringstream	iss(m_setting["pagerlevels"]);
		bool			matchColor = false;
		string			word;

		while ( std::getline(iss, word, ' ') ) {
			if (word == color) {
				matchColor = true;
			}
		}
		if (matchColor) {
			PrepareBBWinNetObj(hobNet);
			for ( itr = m_bbpager.begin(); itr != m_bbpager.end(); ++itr) {
				hobNet.SetBBPager((*itr));
				try {
					hobNet.Pager(testName, color, text, lifeTime);
				} catch (BBWinNetException ex) {
					if (m_logReportFailure) {
						string mes;

						mes = "Sending pager report to " + (*itr) + " failed.";
						LPCTSTR		arg[] = {m_agentName.c_str(), mes.c_str(), NULL};
						m_log->reportWarnEvent(BBWIN_AGENT, EVENT_MESSAGE_AGENT, 2, arg);
					}
					continue ; 
				}
			}
		}
	}
}
コード例 #14
0
ファイル: BBWinCmd.cpp プロジェクト: CodeAndLoathing/bbwin
void 	Download(int argc, char *argv[], BBWinNet & bbobj)
{
	cout << "Sending download ...\n";
	try {
		string res;
		
		res = argv[3];
		if (argc > 4)
			res = argv[4];
		bbobj.Download(argv[3], res);
		cout << "\nDownloaded file has been stored to " << res << "\n\n";
	} catch (BBWinNetException ex) {
		cout << "Error : " << ex.getMessage() << "\n";
	}
}
コード例 #15
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void		BBWinAgentManager::Message(LPCTSTR message, LPTSTR dest, DWORD size) {
	bbdisplay_t::iterator			itr;
	BBWinNet	hobNet;
	string		result;

	assert(message != NULL);
	assert(dest != NULL);
	if (m_usepager == true && m_bbpager.size() > 0) { // extract the information needed to send pager notification
		string		tmp, type, testName, color, text, lifeTime;
		size_t		pos = 0;

		tmp = message;
		istringstream iss(tmp);
		std::getline( iss, tmp);
		size_t res = tmp.find_first_of(" ");
		if (res > 0 && res < tmp.length()) {
			
			type = tmp.substr(0, res);
			res = type.find_first_of("status");
			if (res >= 0 && res < tmp.length()) {
				size_t	end;
				
				tmp = tmp.substr(type.length() + 1);
				pos += type.length() + 1;
				res = type.find_first_of("+");
				if (res > 0 && res < type.length()) {
					lifeTime = type.substr(res + 1);
				}
				res = tmp.find_first_of(".");
				end = tmp.find_first_of(" ");
				testName = tmp.substr(res + 1, end - (res + 1));
				tmp = tmp.substr(end + 1);
				pos += end + 1;
				end = tmp.find_first_of(" ");
				color = tmp.substr(0, end);
				if (tmp.length() > (end + 2)) {
					pos += end + 2;
					text = message;
					text = text.substr(pos);
					Pager(testName.c_str(), color.c_str(), text.c_str(), lifeTime.c_str());
				}
			}
		}
	}
	for ( itr = m_bbdisplay.begin(); itr != m_bbdisplay.end(); ++itr) {
		hobNet.SetBBDisplay((*itr));
		PrepareBBWinNetObj(hobNet);
		try {
			hobNet.Message(message, result);
		} catch (BBWinNetException ex) {
			if (m_logReportFailure) {
				string mes;
			
				mes = "Sending report to " + (*itr) + " failed.";
				LPCTSTR		arg[] = {m_agentName.c_str(), mes.c_str(), NULL};
				m_log->reportWarnEvent(BBWIN_AGENT, EVENT_MESSAGE_AGENT, 2, arg);
			}
			continue ; 
		}
	}
	try
	{
		if (dest != NULL && size != 0)
			strncpy(dest, result.c_str(), size);
	}
	catch (...)
	{
		// Failed to write
	}
}
コード例 #16
0
ファイル: BBWinCentralHandler.cpp プロジェクト: tjyang/bbwin
void BBWinCentralHandler::run() {
	DWORD 		dwWait;
	std::list<BBWinHandler *>::iterator		itr;
	
	clientLocalCfgPath = m_data.setting["tmppath"] + (string)"\\clientlocal.cfg";
	for (;;) {
		std::ofstream	report(reportPath.c_str(), std::ios_base::trunc | ios_base::binary);
		bool		created = false;

		if (report) {
			report << "client " << m_data.setting["hostname"] << ".bbwin " << m_data.setting["configclass"] << "\n";
			report.close();
			created = true;
			GetClock();
			string		osversion;
			uname(osversion);
			bbwinClientData_callback("osversion", osversion);
		} else {
			string mess, err;

			mess = (string)"failed to create the report file " + reportPath;
			GetLastErrorString(err);
			LPCTSTR		args[] = {mess.c_str(), err.c_str(), NULL};
			m_log->reportErrorEvent(BBWIN_SERVICE, EVENT_HOBBIT_FAILED_CLIENTDATA, 2, args);
		}

		for (itr = m_agents.begin(); itr != m_agents.end(); ++itr) {
			(*itr)->Run();
			dwWait = WaitForMultipleObjects(m_hCount, m_hEvents , FALSE, 0);
			if (( dwWait >= WAIT_OBJECT_0 && dwWait <= (WAIT_OBJECT_0 + m_hCount - 1) ) || (dwWait >= WAIT_ABANDONED_0 && dwWait <= (WAIT_ABANDONED_0 + m_hCount - 1) )) {
				DeleteFile(reportPath.c_str());
				return ;
			}
		}
		if (created) {
			bbdisplay_t::iterator			itr;
			
			string		result;

			for (itr = m_bbdisplay.begin(); itr != m_bbdisplay.end(); ++itr) {
				BBWinNet	hobNet;
				hobNet.SetBBDisplay((*itr));
				try {
					hobNet.ClientData(reportPath, clientLocalCfgPath);
				} catch (BBWinNetException ex) {
					string mess, err;

					GetLastErrorString(err);
					mess = ex.getMessage();
					LPCTSTR		args[] = {mess.c_str(), err.c_str(), NULL};
					m_log->reportErrorEvent(BBWIN_SERVICE, EVENT_HOBBIT_FAILED_CLIENTDATA, 2, args);
				}
			}
			DeleteFile(reportSavePath.c_str());
			MoveFile(reportPath.c_str(), reportSavePath.c_str());
			DeleteFile(reportPath.c_str());
		}
		dwWait = WaitForMultipleObjects(m_hCount, m_hEvents , FALSE, m_timer * 1000 );
		if ( dwWait >= WAIT_OBJECT_0 && dwWait <= (WAIT_OBJECT_0 + m_hCount - 1) ) {    
			break ;
		} else if (dwWait >= WAIT_ABANDONED_0 && dwWait <= (WAIT_ABANDONED_0 + m_hCount - 1) ) {
			break ;
		}
	}
}
コード例 #17
0
ファイル: BBWinAgentManager.cpp プロジェクト: tjyang/abmon
void			BBWinAgentManager::PrepareBBWinNetObj(BBWinNet & hobNet) {
	hobNet.SetHostName(m_setting["hostname"]);
	if (m_setting["useproxy"] == "true")
		hobNet.SetProxy(m_setting["proxy"]);
}