mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 21:12:53 +02:00
Adding http monitoring for ICE server
This commit is contained in:
parent
ad209ee731
commit
5efc046316
3 changed files with 60 additions and 6 deletions
|
@ -4,6 +4,20 @@ 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)
|
||||||
|
|
||||||
|
# find OpenSSL
|
||||||
|
find_package(OpenSSL REQUIRED)
|
||||||
|
|
||||||
|
if (APPLE AND ${OPENSSL_INCLUDE_DIR} STREQUAL "/usr/include")
|
||||||
|
# this is a user on OS X using system OpenSSL, which is going to throw warnings since they're deprecating for their common crypto
|
||||||
|
message(WARNING "The found version of OpenSSL is the OS X system version. This will produce deprecation warnings."
|
||||||
|
"\nWe recommend you install a newer version (at least 1.0.1h) in a different directory and set OPENSSL_ROOT_DIR in your env so Cmake can find it.")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
include_directories(SYSTEM "${OPENSSL_INCLUDE_DIR}")
|
||||||
|
|
||||||
|
# append OpenSSL to our list of libraries to link
|
||||||
|
target_link_libraries(${TARGET_NAME} ${OPENSSL_LIBRARIES})
|
||||||
|
|
||||||
include_dependency_includes()
|
include_dependency_includes()
|
|
@ -20,14 +20,19 @@
|
||||||
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),
|
||||||
|
_httpsManager(NULL)
|
||||||
{
|
{
|
||||||
// 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 +170,32 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IceServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl& url, bool skipSubHandler) {
|
||||||
|
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 <HTTPSConnection.h>
|
||||||
|
|
||||||
typedef QHash<QUuid, SharedNetworkPeer> NetworkPeerHash;
|
typedef QHash<QUuid, SharedNetworkPeer> NetworkPeerHash;
|
||||||
|
|
||||||
class IceServer : public QCoreApplication {
|
class IceServer : public QCoreApplication, public HTTPSRequestHandler {
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
IceServer(int argc, char* argv[]);
|
IceServer(int argc, char* argv[]);
|
||||||
|
bool handleHTTPRequest(HTTPConnection* connection, const QUrl& url, bool skipSubHandler = false);
|
||||||
|
bool handleHTTPSRequest(HTTPSConnection* connection, const QUrl& url, bool skipSubHandler = false);
|
||||||
private slots:
|
private slots:
|
||||||
void processDatagrams();
|
void processDatagrams();
|
||||||
void clearInactivePeers();
|
void clearInactivePeers();
|
||||||
|
@ -34,6 +38,8 @@ private:
|
||||||
QUdpSocket _serverSocket;
|
QUdpSocket _serverSocket;
|
||||||
NetworkPeerHash _activePeers;
|
NetworkPeerHash _activePeers;
|
||||||
QHash<QUuid, QSet<QUuid> > _currentConnections;
|
QHash<QUuid, QSet<QUuid> > _currentConnections;
|
||||||
|
HTTPManager _httpManager;
|
||||||
|
HTTPSManager* _httpsManager;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_IceServer_h
|
#endif // hifi_IceServer_h
|
Loading…
Reference in a new issue