From 6b0c644d2f3d1933e9e7c6ed5c4d4280fab9000d Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Tue, 16 Nov 2010 17:28:14 +0100 Subject: [PATCH] server status information table --- common/server.h | 4 ++-- servatrice/servatrice.sql | 8 ++++++++ servatrice/src/servatrice.cpp | 22 ++++++++++++++++++++-- servatrice/src/servatrice.h | 4 +++- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/common/server.h b/common/server.h index 81e9c848..3f4dfd56 100644 --- a/common/server.h +++ b/common/server.h @@ -38,12 +38,12 @@ public: virtual bool getGameShouldPing() const = 0; virtual int getMaxGameInactivityTime() const = 0; virtual int getMaxPlayerInactivityTime() const = 0; -private: +protected: QMap games; QList clients; QMap users; QMap chatChannels; -protected: + virtual AuthenticationResult checkUserPassword(const QString &user, const QString &password) = 0; virtual ServerInfo_User *getUserData(const QString &name) = 0; int nextGameId; diff --git a/servatrice/servatrice.sql b/servatrice/servatrice.sql index 75206a42..4c5179c0 100644 --- a/servatrice/servatrice.sql +++ b/servatrice/servatrice.sql @@ -111,3 +111,11 @@ CREATE TABLE IF NOT EXISTS `users` ( `token` char(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=915 ; + +CREATE TABLE `cockatrice_uptime` ( + `timest` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `uptime` int(11) DEFAULT NULL, + `users_count` int(11) DEFAULT NULL, + `games_count` int(11) DEFAULT NULL, + PRIMARY KEY (`timest`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp index 1d7203c1..4be6b7f3 100644 --- a/servatrice/src/servatrice.cpp +++ b/servatrice/src/servatrice.cpp @@ -27,12 +27,16 @@ #include "protocol.h" Servatrice::Servatrice(QObject *parent) - : Server(parent) + : Server(parent), uptime(0) { pingClock = new QTimer(this); connect(pingClock, SIGNAL(timeout()), this, SIGNAL(pingClockTimeout())); pingClock->start(1000); + statusUpdateClock = new QTimer(this); + connect(statusUpdateClock, SIGNAL(timeout()), this, SLOT(statusUpdate())); + statusUpdateClock->start(15000); + ProtocolItem::initializeHash(); settings = new QSettings("servatrice.ini", QSettings::IniFormat, this); @@ -179,4 +183,18 @@ ServerInfo_User *Servatrice::getUserData(const QString &name) return new ServerInfo_User(name, ServerInfo_User::IsUser); } -const QString Servatrice::versionString = "Servatrice 0.20101103"; +void Servatrice::statusUpdate() +{ + uptime += statusUpdateClock->interval() / 1000; + + checkSql(); + + QSqlQuery query; + query.prepare("insert into " + dbPrefix + "_uptime (timest, uptime, users_count, games_count) values(NOW(), :uptime, :users_count, :games_count)"); + query.bindValue(":uptime", uptime); + query.bindValue(":users_count", users.size()); + query.bindValue(":games_count", games.size()); + execSqlQuery(query); +} + +const QString Servatrice::versionString = "Servatrice 0.20101116"; diff --git a/servatrice/src/servatrice.h b/servatrice/src/servatrice.h index d8aad5c5..39a1a1a6 100644 --- a/servatrice/src/servatrice.h +++ b/servatrice/src/servatrice.h @@ -33,6 +33,7 @@ class Servatrice : public Server Q_OBJECT private slots: void newConnection(); + void statusUpdate(); public: static const QString versionString; Servatrice(QObject *parent = 0); @@ -49,11 +50,12 @@ protected: AuthenticationResult checkUserPassword(const QString &user, const QString &password); ServerInfo_User *getUserData(const QString &name); private: - QTimer *pingClock; + QTimer *pingClock, *statusUpdateClock; QTcpServer *tcpServer; QString loginMessage; QString dbPrefix; QSettings *settings; + int uptime; int maxGameInactivityTime; int maxPlayerInactivityTime; };