From 93113af2d2d8b193148da4cf5254d9df4c36e2d9 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 15 Oct 2015 11:55:20 -0700 Subject: [PATCH 1/5] improve server error message for failed edit --- libraries/entities/src/EntityTree.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index c4c02d364f..764f7fd421 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -647,8 +647,10 @@ int EntityTree::processEditPacketData(NLPacket& packet, const unsigned char* edi } } else { static QString repeatedMessage = - LogHandler::getInstance().addRepeatedMessageRegex("^Add or Edit failed.*"); - qCDebug(entities) << "Add or Edit failed." << packet.getType() << existingEntity.get(); + LogHandler::getInstance().addRepeatedMessageRegex("^Edit failed.*"); + qCDebug(entities) << "Edit failed. [" << packet.getType() <<"] " << + "entity id:" << entityItemID << + "existingEntity pointer:" << existingEntity.get(); } } From 923e1ed208936788deeb33e98bf4bf699e715a56 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 15 Oct 2015 12:21:36 -0700 Subject: [PATCH 2/5] add more processing stats --- interface/src/ui/OctreeStatsDialog.cpp | 31 ++++++++++++++++++++++---- interface/src/ui/OctreeStatsDialog.h | 3 ++- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/interface/src/ui/OctreeStatsDialog.cpp b/interface/src/ui/OctreeStatsDialog.cpp index d3ff017633..42f31f8b1e 100644 --- a/interface/src/ui/OctreeStatsDialog.cpp +++ b/interface/src/ui/OctreeStatsDialog.cpp @@ -54,11 +54,13 @@ OctreeStatsDialog::OctreeStatsDialog(QWidget* parent, NodeToOctreeSceneStats* mo _localElementsMemory = AddStatItem("Elements Memory"); _sendingMode = AddStatItem("Sending Mode"); - _processedPackets = AddStatItem("Entity Packets"); + _processedPackets = AddStatItem("Incoming Entity Packets"); _processedPacketsElements = AddStatItem("Processed Packets Elements"); _processedPacketsEntities = AddStatItem("Processed Packets Entities"); _processedPacketsTiming = AddStatItem("Processed Packets Timing"); + _outboundEditPackets = AddStatItem("Outbound Entity Packets"); + _entityUpdateTime = AddStatItem("Entity Update Time"); _entityUpdates = AddStatItem("Entity Updates"); @@ -266,6 +268,7 @@ void OctreeStatsDialog::paintEvent(QPaintEvent* event) { label = _labels[_processedPackets]; const OctreePacketProcessor& entitiesPacketProcessor = qApp->getOctreePacketProcessor(); + auto incomingPacketsDepth = entitiesPacketProcessor.packetsToProcessCount(); auto incomingPPS = entitiesPacketProcessor.getIncomingPPS(); auto processedPPS = entitiesPacketProcessor.getProcessedPPS(); auto treeProcessedPPS = entities->getAveragePacketsPerSecond(); @@ -276,6 +279,7 @@ void OctreeStatsDialog::paintEvent(QPaintEvent* event) { statsValue.str(""); statsValue << + "Queue Size: " << incomingPacketsDepth << " Packets / " << "Network IN: " << qPrintable(incomingPPSString) << " PPS / " << "Queue OUT: " << qPrintable(processedPPSString) << " PPS / " << "Tree IN: " << qPrintable(treeProcessedPPSString) << " PPS"; @@ -301,12 +305,31 @@ void OctreeStatsDialog::paintEvent(QPaintEvent* event) { label = _labels[_processedPacketsTiming]; statsValue.str(""); statsValue << - "Lock Wait:" << qPrintable(averageWaitLockPerPacketString) << " (usecs) / " << - "Uncompress:" << qPrintable(averageUncompressPerPacketString) << " (usecs) / " << - "Process:" << qPrintable(averageReadBitstreamPerPacketString) << " (usecs)"; + "Lock Wait: " << qPrintable(averageWaitLockPerPacketString) << " (usecs) / " << + "Uncompress: " << qPrintable(averageUncompressPerPacketString) << " (usecs) / " << + "Process: " << qPrintable(averageReadBitstreamPerPacketString) << " (usecs)"; label->setText(statsValue.str().c_str()); + auto entitiesEditPacketSender = qApp->getEntityEditPacketSender(); + + auto outboundPacketsDepth = entitiesEditPacketSender->packetsToSendCount(); + auto outboundQueuedPPS = entitiesEditPacketSender->getLifetimePPSQueued(); + auto outboundSentPPS = entitiesEditPacketSender->getLifetimePPS(); + + QString outboundQueuedPPSString = locale.toString(outboundQueuedPPS, 'f', FLOATING_POINT_PRECISION); + QString outboundSentPPSString = locale.toString(outboundSentPPS, 'f', FLOATING_POINT_PRECISION); + + label = _labels[_outboundEditPackets]; + statsValue.str(""); + statsValue << + "Queue Size: " << outboundPacketsDepth << " packets / " << + "Queued IN: " << qPrintable(outboundQueuedPPSString) << " PPS / " << + "Sent OUT: " << qPrintable(outboundSentPPSString) << " PPS"; + + label->setText(statsValue.str().c_str()); + + // Entity Edits update time label = _labels[_entityUpdateTime]; auto averageEditDelta = entitiesTree->getAverageEditDeltas(); diff --git a/interface/src/ui/OctreeStatsDialog.h b/interface/src/ui/OctreeStatsDialog.h index 063c04b295..97f87849ec 100644 --- a/interface/src/ui/OctreeStatsDialog.h +++ b/interface/src/ui/OctreeStatsDialog.h @@ -70,10 +70,11 @@ private: int _processedPacketsElements; int _processedPacketsEntities; int _processedPacketsTiming; + int _outboundEditPackets; const int SAMPLES_PER_SECOND = 10; SimpleMovingAverage _averageUpdatesPerSecond; - quint64 _lastWindowAt = 0; + quint64 _lastWindowAt = usecTimestampNow(); quint64 _lastKnownTrackedEdits = 0; quint64 _lastRefresh = 0; From 82a211174bf4fc361b75c7dc10102d95ccca4449 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 15 Oct 2015 15:23:12 -0700 Subject: [PATCH 3/5] added packet recieved,lost,recovered stats to detailed server stats page --- assignment-client/src/octree/OctreeServer.cpp | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index ee0403d57b..c3d3d9094d 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -692,6 +692,16 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url totalElementsProcessed = senderStats.getTotalElementsProcessed(); totalPacketsProcessed = senderStats.getTotalPacketsProcessed(); + + auto received = senderStats._incomingEditSequenceNumberStats.getReceived(); + auto expected = senderStats._incomingEditSequenceNumberStats.getExpectedReceived(); + auto unreasonable = senderStats._incomingEditSequenceNumberStats.getUnreasonable(); + auto outOfOrder = senderStats._incomingEditSequenceNumberStats.getOutOfOrder(); + auto early = senderStats._incomingEditSequenceNumberStats.getEarly(); + auto late = senderStats._incomingEditSequenceNumberStats.getLate(); + auto lost = senderStats._incomingEditSequenceNumberStats.getLost(); + auto recovered = senderStats._incomingEditSequenceNumberStats.getRecovered(); + averageElementsPerPacket = totalPacketsProcessed == 0 ? 0 : (float)totalElementsProcessed / totalPacketsProcessed; statsString += QString(" Total Inbound Packets: %1 packets\r\n") @@ -702,7 +712,7 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url (double)averageElementsPerPacket); statsString += QString(" Average Transit Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageTransitTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); - statsString += QString(" Average Process Time/Packet: %1 usecs\r\n") + statsString += QString(" Average Process Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageProcessTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Wait Lock Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageLockWaitTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); @@ -711,6 +721,24 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url statsString += QString(" Average Wait Lock Time/Element: %1 usecs\r\n") .arg(locale.toString((uint)averageLockWaitTimePerElement).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString("\r\n Inbound Edit Packets --------------------------------\r\n"); + statsString += QString(" Received: %1\r\n") + .arg(locale.toString(received).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Expected: %1\r\n") + .arg(locale.toString(expected).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Unreasonable: %1\r\n") + .arg(locale.toString(unreasonable).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Out of Order: %1\r\n") + .arg(locale.toString(outOfOrder).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Early: %1\r\n") + .arg(locale.toString(early).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Late: %1\r\n") + .arg(locale.toString(late).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Lost: %1\r\n") + .arg(locale.toString(lost).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Recovered: %1\r\n") + .arg(locale.toString(recovered).rightJustified(COLUMN_WIDTH, ' ')); + } statsString += "\r\n\r\n"; From e1570e319737335e991f034e36752734f3b469dd Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 15 Oct 2015 15:31:52 -0700 Subject: [PATCH 4/5] include inbound queue PPS stats in server stats page --- assignment-client/src/octree/OctreeServer.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index c3d3d9094d..4bd1211547 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -625,6 +625,8 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url statsString += QString().sprintf("%s Edit Statistics... [RESET]\r\n", getMyServerName()); quint64 currentPacketsInQueue = _octreeInboundPacketProcessor->packetsToProcessCount(); + float incomingPPS = _octreeInboundPacketProcessor->getIncomingPPS(); + float processedPPS = _octreeInboundPacketProcessor->getProcessedPPS(); quint64 averageTransitTimePerPacket = _octreeInboundPacketProcessor->getAverageTransitTimePerPacket(); quint64 averageProcessTimePerPacket = _octreeInboundPacketProcessor->getAverageProcessTimePerPacket(); quint64 averageLockWaitTimePerPacket = _octreeInboundPacketProcessor->getAverageLockWaitTimePerPacket(); @@ -639,11 +641,16 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url quint64 averageCreateTime = _tree->getAverageCreateTime(); quint64 averageLoggingTime = _tree->getAverageLoggingTime(); + int FLOAT_PRECISION = 3; float averageElementsPerPacket = totalPacketsProcessed == 0 ? 0 : (float)totalElementsProcessed / totalPacketsProcessed; - statsString += QString(" Current Inbound Packets Queue: %1 packets\r\n") + statsString += QString(" Current Inbound Packets Queue: %1 packets \r\n") .arg(locale.toString((uint)currentPacketsInQueue).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Packets Queue Network IN: %1 PPS \r\n") + .arg(locale.toString(incomingPPS, 'f', FLOAT_PRECISION).rightJustified(COLUMN_WIDTH, ' ')); + statsString += QString(" Packets Queue Processing OUT: %1 PPS \r\n") + .arg(locale.toString(incomingPPS, 'f', FLOAT_PRECISION).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Inbound Packets: %1 packets\r\n") .arg(locale.toString((uint)totalPacketsProcessed).rightJustified(COLUMN_WIDTH, ' ')); From 3718149157cb82eecf92620b07c0c182e118fd41 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 15 Oct 2015 15:49:12 -0700 Subject: [PATCH 5/5] include inbound queue PPS stats in server stats page --- assignment-client/src/octree/OctreeServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-client/src/octree/OctreeServer.cpp b/assignment-client/src/octree/OctreeServer.cpp index 4bd1211547..818d54ee97 100644 --- a/assignment-client/src/octree/OctreeServer.cpp +++ b/assignment-client/src/octree/OctreeServer.cpp @@ -650,7 +650,7 @@ bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url statsString += QString(" Packets Queue Network IN: %1 PPS \r\n") .arg(locale.toString(incomingPPS, 'f', FLOAT_PRECISION).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Packets Queue Processing OUT: %1 PPS \r\n") - .arg(locale.toString(incomingPPS, 'f', FLOAT_PRECISION).rightJustified(COLUMN_WIDTH, ' ')); + .arg(locale.toString(processedPPS, 'f', FLOAT_PRECISION).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Inbound Packets: %1 packets\r\n") .arg(locale.toString((uint)totalPacketsProcessed).rightJustified(COLUMN_WIDTH, ' '));