Files
interactive/rcts/rc_cmove/src/monitoring.cpp
T
2026-08-07 17:38:18 +09:00

145 lines
3.0 KiB
C++

/***************************************************************************
Monitoring
-----------------------------------------
begin : 2015/05/14
copyright : (C) 2011 SolutionBox Inc.
author : Service 1 Team
email : svc1@solbox.com
version : 3.1.0
CopyRight(C) 2011 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.
***************************************************************************/
#include "rc_cmove.h"
#include "monitoring.h"
#include "dbconnpool.h"
#include "workpool.h"
#include "jobmanager.h"
#include "Logger.h"
#define MONITORING_SLEEP (1000*1000) // microsecond
monitoring *monitoring::m_inst = NULL;
monitoring::monitoring()
: m_exit(false), m_pjobs(NULL)
{
pthread_mutex_init(&m_mutex, NULL);
}
monitoring::~monitoring()
{
pthread_mutex_destroy(&m_mutex);
}
void* monitoring::monitoringfn( void* pdata )
{
monitoring* pObject = reinterpret_cast<monitoring *>(pdata);
ostringstream msg;
//pthread_detach(pthread_self());
msg << "monitoring::monitoringfn Start";
_LOGACOUT(LDEV2, msg);
while( pObject->m_exit == false )
{
msg << "monitoring::monitoringfn";
_LOGACOUT(LDBG, msg);
// pool status
if (masterdbpool::getInstance())
masterdbpool::getInstance()->printstatus("monitoring");
//slavedbpool::getInstance()->printstatus("monitoring(Slave)");
if (workpool::getInstance())
workpool::getInstance()->printstatus("monitoring");
if( CLogger::GetInstance()->GetLogLevel() >= LDEV1 )
workpool::getInstance()->printstatusex("monitoring-DEBUG");
// job status
if (pObject->m_exit == false)
{
pObject->printjobstatus("monitoring");
solusleep(MONITORING_SLEEP);
}
}
msg << "monitoring::monitoringfn End";
_LOGACOUT(LDEV2, msg);
return 0;
}
bool monitoring::init()
{
// Monitoring thread
int nRet = pthread_create(&m_thread, 0, monitoring::monitoringfn, this);
if( nRet )
{
cerr << "Thread create failed.: errno: " << errno << endl;
return false;
}
sleep(0);
return true;
}
void monitoring::destory()
{
m_exit = true;
pthread_join(m_thread, NULL);
}
monitoring* monitoring::getInstance()
{
if(monitoring::m_inst == NULL)
{
monitoring::m_inst = new monitoring();
}
return monitoring::m_inst;
}
void monitoring::release()
{
if( monitoring::m_inst != NULL)
{
monitoring::m_inst->destory();
delete monitoring::m_inst;
monitoring::m_inst = NULL;
}
}
void monitoring::printjobstatus(string prefixed)
{
if (m_exit) return;
ostringstream msg;
if( m_pjobs == NULL )
{
msg << "monitoring - Work has not been set yet.";
_LOGACOUT(LDBG, msg);
return;
}
monlock();
vector<jobmanager *>::iterator it;
if (m_pjobs->size())
{
for (it = m_pjobs->begin(); it < m_pjobs->end(); it++)
{
if (m_exit == false && it != m_pjobs->end())
{
if ((*it)->isexit() == false)
(*it)->printstatus(prefixed);
}
}
}
monunlock();
}