nodemanager/core/Monitor.h (72 lines of code) (raw):

#ifndef MONITOR_H #define MONITOR_H #include <cpprest/json.h> #include <cpprest/http_client.h> #include <map> #include <boost/uuid/uuid.hpp> #include "../utils/System.h" #include "../data/MonitoringPacket.h" #include "../arguments/MetricCounter.h" #include "../arguments/MetricCountersConfig.h" #include "MetricCollectorBase.h" using namespace web; using namespace boost::uuids; namespace hpc { namespace core { class Monitor { public: Monitor( const std::string& nodeName, const std::string& networkName, int interval); ~Monitor(); std::vector<std::vector<unsigned char>> GetMonitorPacketData(); json::value GetRegisterInfo(); void SetNodeUuid(const uuid& id); void ApplyMetricConfig(hpc::arguments::MetricCountersConfig&& config, pplx::cancellation_token token); protected: private: bool EnableMetricCounter(const hpc::arguments::MetricCounter& counterConfig, pplx::cancellation_token token); void Run(); static void* MonitoringThread(void* arg); static const int MaxCountersInPacket = 80; std::string name; std::string networkName; std::string metricTime; float cpuUsage; float availableMemoryMb; std::map<std::string, uint64_t> networkUsage; int coreCount; int socketCount; int totalMemoryMb; std::string ipAddress; std::string distroInfo; std::vector<hpc::utils::System::NetInfo> networkInfo; std::map<std::string, std::shared_ptr<MetricCollectorBase>> collectors; hpc::data::MonitoringPacket<MaxCountersInPacket> packet = 1; int gpuInitRet; System::GpuInfoList gpuInfo; void InitializeGpuDriver(); pthread_rwlock_t lock; int intervalSeconds; bool isCollected; float freeSpacePercent = 0.0f; float queueLength = 0.0f; float pagesPerSec = 0.0f; float contextSwitchesPerSec = 0.0f; float bytesPerSecond = 0.0f; pthread_t threadId = 0; std::string azureInstanceMetadata; std::shared_ptr<http::client::http_client> metaDataClient; std::shared_ptr<http::http_request> metaDataRequest; void InitializeMetadataRequester(); std::string QueryAzureInstanceMetadata(); int remainingRetryCount = 5; static std::vector<std::string> GetFilteredInstanceNames(const std::vector<std::string> & instanceNames, const std::string & instanceFilter); }; } } #endif // MONITOR_H