mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 12:49:34 +02:00
Merge pull request #4151 from murillodigital/ice-monitoring
Adding http monitoring for ICE server
This commit is contained in:
commit
e488e841b7
3 changed files with 40 additions and 6 deletions
|
@ -4,6 +4,6 @@ set(TARGET_NAME ice-server)
|
||||||
setup_hifi_project(Network)
|
setup_hifi_project(Network)
|
||||||
|
|
||||||
# link the shared hifi libraries
|
# link the shared hifi libraries
|
||||||
link_hifi_libraries(networking shared)
|
link_hifi_libraries(embedded-webserver networking shared)
|
||||||
|
|
||||||
include_dependency_includes()
|
include_dependency_includes()
|
|
@ -20,14 +20,18 @@
|
||||||
const int CLEAR_INACTIVE_PEERS_INTERVAL_MSECS = 1 * 1000;
|
const int CLEAR_INACTIVE_PEERS_INTERVAL_MSECS = 1 * 1000;
|
||||||
const int PEER_SILENCE_THRESHOLD_MSECS = 5 * 1000;
|
const int PEER_SILENCE_THRESHOLD_MSECS = 5 * 1000;
|
||||||
|
|
||||||
|
const quint16 ICE_SERVER_MONITORING_PORT = 40110;
|
||||||
|
|
||||||
IceServer::IceServer(int argc, char* argv[]) :
|
IceServer::IceServer(int argc, char* argv[]) :
|
||||||
QCoreApplication(argc, argv),
|
QCoreApplication(argc, argv),
|
||||||
_id(QUuid::createUuid()),
|
_id(QUuid::createUuid()),
|
||||||
_serverSocket(),
|
_serverSocket(),
|
||||||
_activePeers()
|
_activePeers(),
|
||||||
|
_httpManager(ICE_SERVER_MONITORING_PORT, QString("%1/web/").arg(QCoreApplication::applicationDirPath()), this)
|
||||||
{
|
{
|
||||||
// start the ice-server socket
|
// start the ice-server socket
|
||||||
qDebug() << "ice-server socket is listening on" << ICE_SERVER_DEFAULT_PORT;
|
qDebug() << "ice-server socket is listening on" << ICE_SERVER_DEFAULT_PORT;
|
||||||
|
qDebug() << "monitoring http endpoint is listening on " << ICE_SERVER_MONITORING_PORT;
|
||||||
_serverSocket.bind(QHostAddress::AnyIPv4, ICE_SERVER_DEFAULT_PORT);
|
_serverSocket.bind(QHostAddress::AnyIPv4, ICE_SERVER_DEFAULT_PORT);
|
||||||
|
|
||||||
// call our process datagrams slot when the UDP socket has packets ready
|
// call our process datagrams slot when the UDP socket has packets ready
|
||||||
|
@ -165,3 +169,28 @@ void IceServer::clearInactivePeers() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IceServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url, bool skipSubHandler) {
|
||||||
|
//
|
||||||
|
// We need an HTTP handler in order to monitor the health of the ice server
|
||||||
|
// The correct functioning of the ICE server will first be determined by its HTTP availability,
|
||||||
|
// and then by the existence of a minimum number of peers in the list, matching the minimum number of
|
||||||
|
// domains in production by High Fidelity.
|
||||||
|
//
|
||||||
|
|
||||||
|
int MINIMUM_PEERS = 3;
|
||||||
|
bool IS_HEALTHY = false;
|
||||||
|
|
||||||
|
IS_HEALTHY = _activePeers.size() >= MINIMUM_PEERS ? true : false;
|
||||||
|
|
||||||
|
if (connection->requestOperation() == QNetworkAccessManager::GetOperation) {
|
||||||
|
if (url.path() == "/status") {
|
||||||
|
if (IS_HEALTHY) {
|
||||||
|
connection->respond(HTTPConnection::StatusCode200, QByteArray::number(_activePeers.size()));
|
||||||
|
} else {
|
||||||
|
connection->respond(HTTPConnection::StatusCode404, QByteArray::number(_activePeers.size()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -12,17 +12,21 @@
|
||||||
#ifndef hifi_IceServer_h
|
#ifndef hifi_IceServer_h
|
||||||
#define hifi_IceServer_h
|
#define hifi_IceServer_h
|
||||||
|
|
||||||
#include <qcoreapplication.h>
|
#include <QtCore/QCoreApplication>
|
||||||
#include <qsharedpointer.h>
|
#include <QtCore/QSharedPointer>
|
||||||
#include <qudpsocket.h>
|
#include <QUdpSocket>
|
||||||
|
|
||||||
#include <NetworkPeer.h>
|
#include <NetworkPeer.h>
|
||||||
|
#include <HTTPConnection.h>
|
||||||
|
#include <HTTPManager.h>
|
||||||
|
|
||||||
typedef QHash<QUuid, SharedNetworkPeer> NetworkPeerHash;
|
typedef QHash<QUuid, SharedNetworkPeer> NetworkPeerHash;
|
||||||
|
|
||||||
class IceServer : public QCoreApplication {
|
class IceServer : public QCoreApplication, public HTTPRequestHandler {
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
IceServer(int argc, char* argv[]);
|
IceServer(int argc, char* argv[]);
|
||||||
|
bool handleHTTPRequest(HTTPConnection* connection, const QUrl& url, bool skipSubHandler = false);
|
||||||
private slots:
|
private slots:
|
||||||
void processDatagrams();
|
void processDatagrams();
|
||||||
void clearInactivePeers();
|
void clearInactivePeers();
|
||||||
|
@ -34,6 +38,7 @@ private:
|
||||||
QUdpSocket _serverSocket;
|
QUdpSocket _serverSocket;
|
||||||
NetworkPeerHash _activePeers;
|
NetworkPeerHash _activePeers;
|
||||||
QHash<QUuid, QSet<QUuid> > _currentConnections;
|
QHash<QUuid, QSet<QUuid> > _currentConnections;
|
||||||
|
HTTPManager _httpManager;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_IceServer_h
|
#endif // hifi_IceServer_h
|
Loading…
Reference in a new issue