155 lines
7.3 KiB
C++
155 lines
7.3 KiB
C++
/*
|
|
* SystemMonitor.h
|
|
*
|
|
* This source file is part of the FoundationDB open source project
|
|
*
|
|
* Copyright 2013-2018 Apple Inc. and the FoundationDB project authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef FLOW_SYSTEM_MONITOR_H
|
|
#define FLOW_SYSTEM_MONITOR_H
|
|
#pragma once
|
|
|
|
#include "flow/Platform.h"
|
|
#include "flow/TDMetric.actor.h"
|
|
|
|
struct SystemMonitorMachineState {
|
|
Optional<std::string> folder;
|
|
Optional<Standalone<StringRef>> dcId;
|
|
Optional<Standalone<StringRef>> zoneId;
|
|
Optional<Standalone<StringRef>> machineId;
|
|
Optional<IPAddress> ip;
|
|
|
|
double monitorStartTime;
|
|
|
|
SystemMonitorMachineState() : monitorStartTime(0) {}
|
|
explicit SystemMonitorMachineState(const IPAddress& ip) : ip(ip), monitorStartTime(0) {}
|
|
SystemMonitorMachineState(std::string folder,
|
|
Optional<Standalone<StringRef>> dcId,
|
|
Optional<Standalone<StringRef>> zoneId,
|
|
Optional<Standalone<StringRef>> machineId,
|
|
const IPAddress& ip)
|
|
: folder(folder), dcId(dcId), zoneId(zoneId), machineId(machineId), ip(ip), monitorStartTime(0) {}
|
|
};
|
|
|
|
void initializeSystemMonitorMachineState(SystemMonitorMachineState machineState);
|
|
|
|
struct NetworkData {
|
|
int64_t bytesSent;
|
|
int64_t countPacketsReceived;
|
|
int64_t countPacketsGenerated;
|
|
int64_t bytesReceived;
|
|
int64_t countWriteProbes;
|
|
int64_t countReadProbes;
|
|
int64_t countReads;
|
|
int64_t countWouldBlock;
|
|
int64_t countWrites;
|
|
int64_t countRunLoop;
|
|
int64_t countCantSleep;
|
|
int64_t countWontSleep;
|
|
int64_t countTimers;
|
|
int64_t countTasks;
|
|
int64_t countYields;
|
|
int64_t countYieldBigStack;
|
|
int64_t countYieldCalls;
|
|
int64_t countASIOEvents;
|
|
int64_t countYieldCallsTrue;
|
|
int64_t countRunLoopProfilingSignals;
|
|
int64_t countFileLogicalWrites;
|
|
int64_t countFileLogicalReads;
|
|
int64_t countAIOSubmit;
|
|
int64_t countAIOCollect;
|
|
int64_t countFileCacheWrites;
|
|
int64_t countFileCacheReads;
|
|
int64_t countFileCacheWritesBlocked;
|
|
int64_t countFileCacheReadsBlocked;
|
|
int64_t countFileCachePageReadsMerged;
|
|
int64_t countFileCacheFinds;
|
|
int64_t countFileCacheReadBytes;
|
|
int64_t countFilePageCacheHits;
|
|
int64_t countFilePageCacheMisses;
|
|
int64_t countFilePageCacheEvictions;
|
|
int64_t countConnEstablished;
|
|
int64_t countConnClosedWithError;
|
|
int64_t countConnClosedWithoutError;
|
|
int64_t countTLSPolicyFailures;
|
|
double countLaunchTime;
|
|
double countReactTime;
|
|
|
|
void init() {
|
|
bytesSent = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.BytesSent"));
|
|
countPacketsReceived = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountPacketsReceived"));
|
|
countPacketsGenerated = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountPacketsGenerated"));
|
|
bytesReceived = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.BytesReceived"));
|
|
countWriteProbes = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountWriteProbes"));
|
|
countReadProbes = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountReadProbes"));
|
|
countReads = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountReads"));
|
|
countWouldBlock = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountWouldBlock"));
|
|
countWrites = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountWrites"));
|
|
countRunLoop = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountRunLoop"));
|
|
countCantSleep = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountCantSleep"));
|
|
countWontSleep = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountWontSleep"));
|
|
countTimers = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountTimers"));
|
|
countTasks = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountTasks"));
|
|
countYields = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountYields"));
|
|
countYieldBigStack = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountYieldBigStack"));
|
|
countYieldCalls = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountYieldCalls"));
|
|
countASIOEvents = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountASIOEvents"));
|
|
countYieldCallsTrue = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountYieldCallsTrue"));
|
|
countRunLoopProfilingSignals =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountRunLoopProfilingSignals"));
|
|
countConnEstablished = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountConnEstablished"));
|
|
countConnClosedWithError = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountConnClosedWithError"));
|
|
countConnClosedWithoutError =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountConnClosedWithoutError"));
|
|
countTLSPolicyFailures = Int64Metric::getValueOrDefault(LiteralStringRef("Net2.CountTLSPolicyFailures"));
|
|
countLaunchTime = DoubleMetric::getValueOrDefault(LiteralStringRef("Net2.CountLaunchTime"));
|
|
countReactTime = DoubleMetric::getValueOrDefault(LiteralStringRef("Net2.CountReactTime"));
|
|
countFileLogicalWrites = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountLogicalWrites"));
|
|
countFileLogicalReads = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountLogicalReads"));
|
|
countAIOSubmit = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountAIOSubmit"));
|
|
countAIOCollect = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountAIOCollect"));
|
|
countFileCacheWrites = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCacheWrites"));
|
|
countFileCacheReads = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCacheReads"));
|
|
countFileCacheWritesBlocked =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCacheWritesBlocked"));
|
|
countFileCacheReadsBlocked =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCacheReadsBlocked"));
|
|
countFileCachePageReadsMerged =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCachePageReadsMerged"));
|
|
countFileCacheFinds = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCacheFinds"));
|
|
countFileCacheReadBytes = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCacheReadBytes"));
|
|
countFilePageCacheHits = Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCachePageReadsHit"));
|
|
countFilePageCacheMisses =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("AsyncFile.CountCachePageReadsMissed"));
|
|
countFilePageCacheEvictions =
|
|
Int64Metric::getValueOrDefault(LiteralStringRef("EvictablePageCache.CacheEvictions"));
|
|
}
|
|
};
|
|
|
|
struct StatisticsState {
|
|
SystemStatisticsState* systemState;
|
|
NetworkData networkState;
|
|
NetworkMetrics networkMetricsState;
|
|
|
|
StatisticsState() : systemState(nullptr) {}
|
|
};
|
|
|
|
void systemMonitor();
|
|
SystemStatistics customSystemMonitor(std::string eventName, StatisticsState* statState, bool machineMetrics = false);
|
|
SystemStatistics getSystemStatistics();
|
|
|
|
#endif /* FLOW_SYSTEM_MONITOR_H */
|