mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-04-03 22:36:23 +00:00
Fix sentry url length print remove quotes github actions is cursed add debug print test action Dont use curl on windows I dont know why the windows build doesnt report to sentry, so ill try this. Change timeout to 20 minutes instead of 5 this is a hacky workaround anyways, so i really dont see why it should only be 5. 5 is barely enough. temporarily enable debug mode on sentry CMake: Use breakpad on windows instead of crashpad CMake: Sentry: use inproc backend Since cmake refuses to set my variables, I will do it this way. I am so tired of this github workflow garbage Sentry: disable debug again, set sentry_options_set_symbolize_stacktraces to true, fix memory leak Sentry: hotfix: dont free options somehow that causes it to crash, and i cannot be bothered to find out why right now
67 lines
2.1 KiB
C++
67 lines
2.1 KiB
C++
#include "TPPSMonitor.h"
|
|
#include "Client.h"
|
|
#include "TNetwork.h"
|
|
|
|
TPPSMonitor::TPPSMonitor(TServer& Server)
|
|
: mServer(Server) {
|
|
Application::SetPPS("-");
|
|
Application::RegisterShutdownHandler([&] {
|
|
if (mThread.joinable()) {
|
|
debug("shutting down PPSMonitor");
|
|
mShutdown = true;
|
|
mThread.join();
|
|
debug("shut down PPSMonitor");
|
|
}
|
|
});
|
|
Start();
|
|
}
|
|
void TPPSMonitor::operator()() {
|
|
RegisterThread("PPSMonitor");
|
|
while (!mNetwork) {
|
|
// hard spi
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
|
}
|
|
info("PPSMonitor starting");
|
|
std::vector<std::shared_ptr<TClient>> TimedOutClients;
|
|
while (!mShutdown) {
|
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
|
int C = 0, V = 0;
|
|
if (mServer.ClientCount() == 0) {
|
|
Application::SetPPS("-");
|
|
continue;
|
|
}
|
|
mServer.ForEachClient([&](const std::weak_ptr<TClient>& ClientPtr) -> bool {
|
|
std::shared_ptr<TClient> c;
|
|
{
|
|
ReadLock Lock(mServer.GetClientMutex());
|
|
if (!ClientPtr.expired()) {
|
|
c = ClientPtr.lock();
|
|
} else
|
|
return true;
|
|
}
|
|
if (c->GetCarCount() > 0) {
|
|
C++;
|
|
V += c->GetCarCount();
|
|
}
|
|
// kick on "no ping"
|
|
if (c->SecondsSinceLastPing() > (20 * 60)) {
|
|
debug("client " + std::string("(") + std::to_string(c->GetID()) + ")" + c->GetName() + " timing out: " + std::to_string(c->SecondsSinceLastPing()) + ", pps: " + Application::PPS());
|
|
TimedOutClients.push_back(c);
|
|
}
|
|
|
|
return true;
|
|
});
|
|
for (auto& ClientToKick : TimedOutClients) {
|
|
Network().ClientKick(*ClientToKick, "Timeout (no ping for way too long)");
|
|
}
|
|
TimedOutClients.clear();
|
|
if (C == 0 || mInternalPPS == 0) {
|
|
Application::SetPPS("-");
|
|
} else {
|
|
int R = (mInternalPPS / C) / V;
|
|
Application::SetPPS(std::to_string(R));
|
|
}
|
|
mInternalPPS = 0;
|
|
}
|
|
}
|