//
//
// Copyright (C) 2004 SIPfoundry Inc.
// Licensed by SIPfoundry under the LGPL license.
//
// Copyright (C) 2004 Pingtel Corp.
// Licensed to SIPfoundry under a Contributor Agreement.
//
// $$
//////////////////////////////////////////////////////////////////////////////
// SYSTEM INCLUDES
// APPLICATION INCLUDES
#include "os/OsMsgQ.h"
#include "os/OsProcessIterator.h"
#include "sipdb/SIPDBManager.h"
#include "IMDBTaskMonitor.h"
#include "HeartBeatMonitor.h"
HeartBeatMonitor::HeartBeatMonitor (
const UtlString& rArgument, OsMsgQ& rMsgQ, OsEvent& rCommandEvent) :
IMDBWorkerTask( rArgument, rMsgQ, rCommandEvent )
{}
HeartBeatMonitor::~HeartBeatMonitor()
{}
int
HeartBeatMonitor::run( void* runArg )
{
osPrintf ("Starting Thread\n");
OsSysLog::add(LOG_FACILITY, PRI_DEBUG, "Starting Thread\n");
while ( !isShuttingDown() )
{
// Indicate that we're finished, the monitor thread
// reads this flag and if it's still set
setBusy (TRUE);
// print the db meta process info before locking the IMDB
UtlString databaseInfo;
getDatabaseInfo ( databaseInfo );
osPrintf ( "%s", databaseInfo.data() );
OsSysLog::add(LOG_FACILITY, PRI_DEBUG, databaseInfo.data());
// print out the IMDB stats, this commmand may hang forever
if ( mArgument.compareTo("processinfo", UtlString::ignoreCase) == 0 )
{
UtlString processInfo;
getProcessInfo ( FALSE, processInfo );
osPrintf ("%s\n", processInfo.data());
OsSysLog::add( LOG_FACILITY, PRI_DEBUG, "%s\n", processInfo.data());
} else
{
// Access the database using a cursorForUpdate (forcing a lock)
int transactionLockSecs = atoi( mArgument.data());
SIPDBManager::getInstance()->
pingDatabase ( transactionLockSecs, TRUE );
}
setBusy (FALSE);
// send a success message to the sleeping monitor
notifyMonitor( USER_HEARTBEAT_SUCCESS_EVENT );
// wait for the next event to be signaled by the notifier
mCommandEvent.wait();
mCommandEvent.reset();
}
cleanupIMDBResources();
osPrintf ("Stopping Thread");
OsSysLog::add(LOG_FACILITY, PRI_DEBUG, "Stopping Thread\n");
return( TRUE );
}
syntax highlighted by Code2HTML, v. 0.9.1