diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index b9bf9fea67..459382c5bf 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -577,7 +577,7 @@ SharedNodePointer LimitedNodeList::addOrUpdateNode(const QUuid& uuid, NodeType_t if (it != _nodeHash.end()) { SharedNodePointer& matchingNode = it->second; - + matchingNode->setPublicSocket(publicSocket); matchingNode->setLocalSocket(localSocket); matchingNode->setPermissions(permissions); @@ -717,14 +717,20 @@ SharedNodePointer LimitedNodeList::soloNodeOfType(NodeType_t nodeType) { }); } -void LimitedNodeList::getPacketStats(float& packetsPerSecond, float& bytesPerSecond) { - packetsPerSecond = (float) _numCollectedPackets / ((float) _packetStatTimer.elapsed() / 1000.0f); - bytesPerSecond = (float) _numCollectedBytes / ((float) _packetStatTimer.elapsed() / 1000.0f); +void LimitedNodeList::getPacketStats(float& packetsInPerSecond, float& bytesInPerSecond, float& packetsOutPerSecond, float& bytesOutPerSecond) { + packetsInPerSecond = (float) getPacketReceiver().getInPacketCount() / ((float) _packetStatTimer.elapsed() / 1000.0f); + bytesInPerSecond = (float) getPacketReceiver().getInByteCount() / ((float) _packetStatTimer.elapsed() / 1000.0f); + + packetsOutPerSecond = (float) _numCollectedPackets / ((float) _packetStatTimer.elapsed() / 1000.0f); + bytesOutPerSecond = (float) _numCollectedBytes / ((float) _packetStatTimer.elapsed() / 1000.0f); } void LimitedNodeList::resetPacketStats() { + getPacketReceiver().resetCounters(); + _numCollectedPackets = 0; _numCollectedBytes = 0; + _packetStatTimer.restart(); } diff --git a/libraries/networking/src/LimitedNodeList.h b/libraries/networking/src/LimitedNodeList.h index 0d54c843f6..5256e55397 100644 --- a/libraries/networking/src/LimitedNodeList.h +++ b/libraries/networking/src/LimitedNodeList.h @@ -161,7 +161,7 @@ public: unsigned int broadcastToNodes(std::unique_ptr packet, const NodeSet& destinationNodeTypes); SharedNodePointer soloNodeOfType(NodeType_t nodeType); - void getPacketStats(float &packetsPerSecond, float &bytesPerSecond); + void getPacketStats(float& packetsInPerSecond, float& bytesInPerSecond, float& packetsOutPerSecond, float& bytesOutPerSecond); void resetPacketStats(); std::unique_ptr constructPingPacket(PingType_t pingType = PingType::Agnostic); diff --git a/libraries/networking/src/ThreadedAssignment.cpp b/libraries/networking/src/ThreadedAssignment.cpp index c7b6b05c35..9db540cae2 100644 --- a/libraries/networking/src/ThreadedAssignment.cpp +++ b/libraries/networking/src/ThreadedAssignment.cpp @@ -45,9 +45,9 @@ void ThreadedAssignment::setFinished(bool isFinished) { if (_isFinished) { qCDebug(networking) << "ThreadedAssignment::setFinished(true) called - finishing up."; - + auto nodeList = DependencyManager::get(); - + auto& packetReceiver = nodeList->getPacketReceiver(); // we should de-register immediately for any of our packets @@ -55,7 +55,7 @@ void ThreadedAssignment::setFinished(bool isFinished) { // we should also tell the packet receiver to drop packets while we're cleaning up packetReceiver.setShouldDropPackets(true); - + // send a disconnect packet to the domain nodeList->getDomainHandler().disconnect(); @@ -92,12 +92,17 @@ void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeTy void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject statsObject) { auto nodeList = DependencyManager::get(); - float packetsPerSecond, bytesPerSecond; - nodeList->getPacketStats(packetsPerSecond, bytesPerSecond); + float packetsInPerSecond, bytesInPerSecond, packetsOutPerSecond, bytesOutPerSecond; + nodeList->getPacketStats(packetsInPerSecond, bytesInPerSecond, packetsOutPerSecond, bytesOutPerSecond); nodeList->resetPacketStats(); - statsObject["packets_per_second"] = packetsPerSecond; - statsObject["bytes_per_second"] = bytesPerSecond; + QJsonObject ioStats; + ioStats["inbound_bytes_per_s"] = bytesInPerSecond; + ioStats["inbound_packets_per_s"] = packetsInPerSecond; + ioStats["outbound_bytes_per_s"] = bytesOutPerSecond; + ioStats["outbound_packets_per_s"] = packetsOutPerSecond; + + statsObject["io_stats"] = ioStats; nodeList->sendStatsToDomainServer(statsObject); }