69 lines
2.3 KiB
C++
69 lines
2.3 KiB
C++
#include "RequestStorageDataMsgEx.h"
|
|
|
|
bool RequestStorageDataMsgEx::processIncoming(ResponseContext& ctx)
|
|
{
|
|
App* app = Program::getApp();
|
|
Node& node = app->getLocalNode();
|
|
MultiWorkQueueMap* workQueueMap = app->getWorkQueueMap();
|
|
StorageTargets* storageTargets = app->getStorageTargets();
|
|
|
|
// get disk space of each target
|
|
|
|
StorageTargetInfoList storageTargetInfoList;
|
|
|
|
storageTargets->generateTargetInfoList(storageTargetInfoList);
|
|
|
|
// compute total disk space and total free space
|
|
|
|
int64_t diskSpaceTotal = 0; // sum of all targets
|
|
int64_t diskSpaceFree = 0; // sum of all targets
|
|
|
|
for(StorageTargetInfoListIter iter = storageTargetInfoList.begin();
|
|
iter != storageTargetInfoList.end();
|
|
iter++)
|
|
{
|
|
if(diskSpaceTotal == -1)
|
|
continue; // statfs() failed on this target
|
|
|
|
diskSpaceTotal += iter->getDiskSpaceTotal();
|
|
diskSpaceFree += iter->getDiskSpaceFree();
|
|
}
|
|
|
|
|
|
unsigned sessionCount = app->getSessions()->getSize();
|
|
|
|
NicAddressList nicList(node.getNicList());
|
|
std::string hostnameid = System::getHostname();
|
|
|
|
// highresStats
|
|
HighResStatsList statsHistory;
|
|
uint64_t lastStatsMS = getValue();
|
|
|
|
// get stats history
|
|
StatsCollector* statsCollector = app->getStatsCollector();
|
|
statsCollector->getStatsSince(lastStatsMS, statsHistory);
|
|
|
|
// get work queue stats
|
|
unsigned indirectWorkListSize = 0;
|
|
unsigned directWorkListSize = 0;
|
|
|
|
for(MultiWorkQueueMapCIter iter = workQueueMap->begin(); iter != workQueueMap->end(); iter++)
|
|
{
|
|
indirectWorkListSize += iter->second->getIndirectWorkListSize();
|
|
directWorkListSize += iter->second->getDirectWorkListSize();
|
|
}
|
|
|
|
RequestStorageDataRespMsg requestStorageDataRespMsg(node.getAlias(), hostnameid, node.getNumID(),
|
|
&nicList, indirectWorkListSize, directWorkListSize, diskSpaceTotal, diskSpaceFree,
|
|
sessionCount, &statsHistory, &storageTargetInfoList);
|
|
ctx.sendResponse(requestStorageDataRespMsg);
|
|
|
|
LOG_DEBUG(__func__, Log_SPAM, std::string("Sent a message with type: " ) +
|
|
StringTk::uintToStr(requestStorageDataRespMsg.getMsgType() ) + std::string(" to mon") );
|
|
|
|
app->getNodeOpStats()->updateNodeOp(ctx.getSocket()->getPeerIP(),
|
|
StorageOpCounter_REQUESTSTORAGEDATA, getMsgHeaderUserID() );
|
|
|
|
return true;
|
|
}
|