mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 23:32:48 +02:00
at minimum send packet rate stats for ThreadedAssignment subclasses
This commit is contained in:
parent
3db8386743
commit
ba338cb7bc
8 changed files with 42 additions and 60 deletions
|
@ -120,10 +120,12 @@ void Agent::readPendingDatagrams() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString AGENT_LOGGING_NAME = "agent";
|
||||||
|
|
||||||
void Agent::run() {
|
void Agent::run() {
|
||||||
NodeList* nodeList = NodeList::getInstance();
|
ThreadedAssignment::commonInit(AGENT_LOGGING_NAME, NodeType::Agent);
|
||||||
nodeList->setOwnerType(NodeType::Agent);
|
|
||||||
|
|
||||||
|
NodeList* nodeList = NodeList::getInstance();
|
||||||
nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer);
|
nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet() << NodeType::AudioMixer << NodeType::AvatarMixer);
|
||||||
|
|
||||||
// figure out the URL for the script for this agent assignment
|
// figure out the URL for the script for this agent assignment
|
||||||
|
@ -148,17 +150,6 @@ void Agent::run() {
|
||||||
|
|
||||||
qDebug() << "Downloaded script:" << scriptContents;
|
qDebug() << "Downloaded script:" << scriptContents;
|
||||||
|
|
||||||
timeval startTime;
|
|
||||||
gettimeofday(&startTime, NULL);
|
|
||||||
|
|
||||||
QTimer* domainServerTimer = new QTimer(this);
|
|
||||||
connect(domainServerTimer, SIGNAL(timeout()), this, SLOT(checkInWithDomainServerOrExit()));
|
|
||||||
domainServerTimer->start(DOMAIN_SERVER_CHECK_IN_USECS / 1000);
|
|
||||||
|
|
||||||
QTimer* silentNodeTimer = new QTimer(this);
|
|
||||||
connect(silentNodeTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes()));
|
|
||||||
silentNodeTimer->start(NODE_SILENCE_THRESHOLD_USECS / 1000);
|
|
||||||
|
|
||||||
// setup an Avatar for the script to use
|
// setup an Avatar for the script to use
|
||||||
AvatarData scriptedAvatar;
|
AvatarData scriptedAvatar;
|
||||||
|
|
||||||
|
|
|
@ -369,32 +369,18 @@ void AudioMixer::sendStatsPacket() {
|
||||||
statsObject["average_mixes_per_listener"] = 0.0;
|
statsObject["average_mixes_per_listener"] = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeList* nodeList = NodeList::getInstance();
|
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
||||||
|
|
||||||
float packetsPerSecond, bytesPerSecond;
|
|
||||||
nodeList->getPacketStats(packetsPerSecond, bytesPerSecond);
|
|
||||||
nodeList->resetPacketStats();
|
|
||||||
|
|
||||||
statsObject["packets_per_second"] = packetsPerSecond;
|
|
||||||
statsObject["bytes_per_second"] = bytesPerSecond;
|
|
||||||
|
|
||||||
_sumListeners = 0;
|
_sumListeners = 0;
|
||||||
_sumMixes = 0;
|
_sumMixes = 0;
|
||||||
_numStatFrames = 0;
|
_numStatFrames = 0;
|
||||||
|
|
||||||
nodeList->sendStatsToDomainServer(statsObject);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioMixer::run() {
|
void AudioMixer::run() {
|
||||||
|
|
||||||
commonInit(AUDIO_MIXER_LOGGING_TARGET_NAME, NodeType::AudioMixer);
|
ThreadedAssignment::commonInit(AUDIO_MIXER_LOGGING_TARGET_NAME, NodeType::AudioMixer);
|
||||||
|
|
||||||
NodeList* nodeList = NodeList::getInstance();
|
NodeList* nodeList = NodeList::getInstance();
|
||||||
|
|
||||||
// send a stats packet every 1 second
|
|
||||||
QTimer* statsTimer = new QTimer(this);
|
|
||||||
connect(statsTimer, &QTimer::timeout, this, &AudioMixer::sendStatsPacket);
|
|
||||||
statsTimer->start(1000);
|
|
||||||
|
|
||||||
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
|
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
|
||||||
|
|
||||||
|
|
|
@ -251,19 +251,10 @@ void AvatarMixer::sendStatsPacket() {
|
||||||
QJsonObject statsObject;
|
QJsonObject statsObject;
|
||||||
statsObject["average_listeners_last_second"] = _sumListeners / (float) _numStatFrames;
|
statsObject["average_listeners_last_second"] = _sumListeners / (float) _numStatFrames;
|
||||||
|
|
||||||
NodeList* nodeList = NodeList::getInstance();
|
|
||||||
|
|
||||||
float packetsPerSecond, bytesPerSecond;
|
|
||||||
nodeList->getPacketStats(packetsPerSecond, bytesPerSecond);
|
|
||||||
nodeList->resetPacketStats();
|
|
||||||
|
|
||||||
statsObject["packets_per_second"] = packetsPerSecond;
|
|
||||||
statsObject["bytes_per_second"] = bytesPerSecond;
|
|
||||||
|
|
||||||
statsObject["trailing_sleep_percentage"] = _trailingSleepRatio * 100;
|
statsObject["trailing_sleep_percentage"] = _trailingSleepRatio * 100;
|
||||||
statsObject["performance_throttling_ratio"] = _performanceThrottlingRatio;
|
statsObject["performance_throttling_ratio"] = _performanceThrottlingRatio;
|
||||||
|
|
||||||
nodeList->sendStatsToDomainServer(statsObject);
|
ThreadedAssignment::addPacketStatsAndSendStatsPacket(statsObject);
|
||||||
|
|
||||||
_sumListeners = 0;
|
_sumListeners = 0;
|
||||||
_numStatFrames = 0;
|
_numStatFrames = 0;
|
||||||
|
@ -273,16 +264,11 @@ const qint64 AVATAR_IDENTITY_KEYFRAME_MSECS = 5000;
|
||||||
const qint64 AVATAR_BILLBOARD_KEYFRAME_MSECS = 5000;
|
const qint64 AVATAR_BILLBOARD_KEYFRAME_MSECS = 5000;
|
||||||
|
|
||||||
void AvatarMixer::run() {
|
void AvatarMixer::run() {
|
||||||
commonInit(AVATAR_MIXER_LOGGING_NAME, NodeType::AvatarMixer);
|
ThreadedAssignment::commonInit(AVATAR_MIXER_LOGGING_NAME, NodeType::AvatarMixer);
|
||||||
|
|
||||||
NodeList* nodeList = NodeList::getInstance();
|
NodeList* nodeList = NodeList::getInstance();
|
||||||
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
|
nodeList->addNodeTypeToInterestSet(NodeType::Agent);
|
||||||
|
|
||||||
// send a stats packet every 1 second
|
|
||||||
QTimer* statsTimer = new QTimer(this);
|
|
||||||
connect(statsTimer, &QTimer::timeout, this, &AvatarMixer::sendStatsPacket);
|
|
||||||
statsTimer->start(1000);
|
|
||||||
|
|
||||||
nodeList->linkedDataCreateCallback = attachAvatarDataToNode;
|
nodeList->linkedDataCreateCallback = attachAvatarDataToNode;
|
||||||
|
|
||||||
int nextFrame = 0;
|
int nextFrame = 0;
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
virtual void run();
|
virtual void run();
|
||||||
|
|
||||||
virtual void readPendingDatagrams();
|
virtual void readPendingDatagrams();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void maybeAttachSession(const SharedNodePointer& node);
|
void maybeAttachSession(const SharedNodePointer& node);
|
||||||
|
|
|
@ -823,9 +823,9 @@ void OctreeServer::run() {
|
||||||
_safeServerName = getMyServerName();
|
_safeServerName = getMyServerName();
|
||||||
// Before we do anything else, create our tree...
|
// Before we do anything else, create our tree...
|
||||||
_tree = createTree();
|
_tree = createTree();
|
||||||
|
|
||||||
// change the logging target name while this is running
|
// use common init to setup common timers and logging
|
||||||
Logging::setTargetName(getMyLoggingServerTargetName());
|
commonInit(getMyLoggingServerTargetName(), getMyNodeType());
|
||||||
|
|
||||||
// Now would be a good time to parse our arguments, if we got them as assignment
|
// Now would be a good time to parse our arguments, if we got them as assignment
|
||||||
if (getPayload().size() > 0) {
|
if (getPayload().size() > 0) {
|
||||||
|
@ -988,14 +988,6 @@ void OctreeServer::run() {
|
||||||
strftime(utcBuffer, MAX_TIME_LENGTH, " [%m/%d/%Y %X UTC]", gmtm);
|
strftime(utcBuffer, MAX_TIME_LENGTH, " [%m/%d/%Y %X UTC]", gmtm);
|
||||||
}
|
}
|
||||||
qDebug() << "Now running... started at: " << localBuffer << utcBuffer;
|
qDebug() << "Now running... started at: " << localBuffer << utcBuffer;
|
||||||
|
|
||||||
QTimer* domainServerTimer = new QTimer(this);
|
|
||||||
connect(domainServerTimer, SIGNAL(timeout()), this, SLOT(checkInWithDomainServerOrExit()));
|
|
||||||
domainServerTimer->start(DOMAIN_SERVER_CHECK_IN_USECS / 1000);
|
|
||||||
|
|
||||||
QTimer* silentNodeTimer = new QTimer(this);
|
|
||||||
connect(silentNodeTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes()));
|
|
||||||
silentNodeTimer->start(NODE_SILENCE_THRESHOLD_USECS / 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeServer::nodeAdded(SharedNodePointer node) {
|
void OctreeServer::nodeAdded(SharedNodePointer node) {
|
||||||
|
|
|
@ -46,7 +46,6 @@ public:
|
||||||
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
virtual bool hasSpecialPacketToSend(const SharedNodePointer& node);
|
||||||
virtual int sendSpecialPacket(const SharedNodePointer& node);
|
virtual int sendSpecialPacket(const SharedNodePointer& node);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _sendEnvironments;
|
bool _sendEnvironments;
|
||||||
bool _sendMinimalEnvironment;
|
bool _sendMinimalEnvironment;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <QtCore/QCoreApplication>
|
#include <QtCore/QCoreApplication>
|
||||||
|
#include <QtCore/QJsonObject>
|
||||||
#include <QtCore/QTimer>
|
#include <QtCore/QTimer>
|
||||||
|
|
||||||
#include "Logging.h"
|
#include "Logging.h"
|
||||||
|
@ -34,7 +35,7 @@ void ThreadedAssignment::setFinished(bool isFinished) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeType) {
|
void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeType, bool shouldSendStats) {
|
||||||
// change the logging target name while the assignment is running
|
// change the logging target name while the assignment is running
|
||||||
Logging::setTargetName(targetName);
|
Logging::setTargetName(targetName);
|
||||||
|
|
||||||
|
@ -52,6 +53,31 @@ void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeTy
|
||||||
QTimer* silentNodeRemovalTimer = new QTimer(this);
|
QTimer* silentNodeRemovalTimer = new QTimer(this);
|
||||||
connect(silentNodeRemovalTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes()));
|
connect(silentNodeRemovalTimer, SIGNAL(timeout()), nodeList, SLOT(removeSilentNodes()));
|
||||||
silentNodeRemovalTimer->start(NODE_SILENCE_THRESHOLD_USECS / 1000);
|
silentNodeRemovalTimer->start(NODE_SILENCE_THRESHOLD_USECS / 1000);
|
||||||
|
|
||||||
|
if (shouldSendStats) {
|
||||||
|
// send a stats packet every 1 second
|
||||||
|
QTimer* statsTimer = new QTimer(this);
|
||||||
|
connect(statsTimer, &QTimer::timeout, this, &ThreadedAssignment::sendStatsPacket);
|
||||||
|
statsTimer->start(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject &statsObject) {
|
||||||
|
NodeList* nodeList = NodeList::getInstance();
|
||||||
|
|
||||||
|
float packetsPerSecond, bytesPerSecond;
|
||||||
|
nodeList->getPacketStats(packetsPerSecond, bytesPerSecond);
|
||||||
|
nodeList->resetPacketStats();
|
||||||
|
|
||||||
|
statsObject["packets_per_second"] = packetsPerSecond;
|
||||||
|
statsObject["bytes_per_second"] = bytesPerSecond;
|
||||||
|
|
||||||
|
nodeList->sendStatsToDomainServer(statsObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThreadedAssignment::sendStatsPacket() {
|
||||||
|
QJsonObject statsObject;
|
||||||
|
addPacketStatsAndSendStatsPacket(statsObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThreadedAssignment::checkInWithDomainServerOrExit() {
|
void ThreadedAssignment::checkInWithDomainServerOrExit() {
|
||||||
|
|
|
@ -17,16 +17,18 @@ public:
|
||||||
ThreadedAssignment(const QByteArray& packet);
|
ThreadedAssignment(const QByteArray& packet);
|
||||||
void setFinished(bool isFinished);
|
void setFinished(bool isFinished);
|
||||||
virtual void aboutToFinish() { };
|
virtual void aboutToFinish() { };
|
||||||
|
void addPacketStatsAndSendStatsPacket(QJsonObject& statsObject);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
/// threaded run of assignment
|
/// threaded run of assignment
|
||||||
virtual void run() = 0;
|
virtual void run() = 0;
|
||||||
virtual void deleteLater();
|
virtual void deleteLater();
|
||||||
virtual void readPendingDatagrams() = 0;
|
virtual void readPendingDatagrams() = 0;
|
||||||
|
virtual void sendStatsPacket();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool readAvailableDatagram(QByteArray& destinationByteArray, HifiSockAddr& senderSockAddr);
|
bool readAvailableDatagram(QByteArray& destinationByteArray, HifiSockAddr& senderSockAddr);
|
||||||
void commonInit(const QString& targetName, NodeType_t nodeType);
|
void commonInit(const QString& targetName, NodeType_t nodeType, bool shouldSendStats = true);
|
||||||
bool _isFinished;
|
bool _isFinished;
|
||||||
private slots:
|
private slots:
|
||||||
void checkInWithDomainServerOrExit();
|
void checkInWithDomainServerOrExit();
|
||||||
|
|
Loading…
Reference in a new issue