store network traffic statistics in database
This commit is contained in:
parent
1455c093cc
commit
eb6520a737
4 changed files with 37 additions and 4 deletions
|
@ -119,9 +119,11 @@ CREATE TABLE IF NOT EXISTS `cockatrice_users` (
|
|||
CREATE TABLE `cockatrice_uptime` (
|
||||
`id_server` tinyint(3) NOT NULL,
|
||||
`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,
|
||||
`uptime` int(11) NOT NULL,
|
||||
`users_count` int(11) NOT NULL,
|
||||
`games_count` int(11) NOT NULL,
|
||||
`rx_bytes` int(11) NOT NULL,
|
||||
`tx_bytes` int(11) NOT NULL,
|
||||
PRIMARY KEY (`timest`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
|
|
@ -398,15 +398,26 @@ void Servatrice::statusUpdate()
|
|||
|
||||
uptime += statusUpdateClock->interval() / 1000;
|
||||
|
||||
txBytesMutex.lock();
|
||||
quint64 tx = txBytes;
|
||||
txBytes = 0;
|
||||
txBytesMutex.unlock();
|
||||
rxBytesMutex.lock();
|
||||
quint64 rx = rxBytes;
|
||||
rxBytes = 0;
|
||||
rxBytesMutex.unlock();
|
||||
|
||||
QMutexLocker locker(&dbMutex);
|
||||
checkSql();
|
||||
|
||||
QSqlQuery query;
|
||||
query.prepare("insert into " + dbPrefix + "_uptime (id_server, timest, uptime, users_count, games_count) values(:id, NOW(), :uptime, :users_count, :games_count)");
|
||||
query.prepare("insert into " + dbPrefix + "_uptime (id_server, timest, uptime, users_count, games_count, tx_bytes, rx_bytes) values(:id, NOW(), :uptime, :users_count, :games_count, :tx, :rx)");
|
||||
query.bindValue(":id", serverId);
|
||||
query.bindValue(":uptime", uptime);
|
||||
query.bindValue(":users_count", uc);
|
||||
query.bindValue(":games_count", gc);
|
||||
query.bindValue(":tx", tx);
|
||||
query.bindValue(":rx", rx);
|
||||
execSqlQuery(query);
|
||||
}
|
||||
|
||||
|
@ -424,6 +435,20 @@ void Servatrice::scheduleShutdown(const QString &reason, int minutes)
|
|||
shutdownTimeout();
|
||||
}
|
||||
|
||||
void Servatrice::incTxBytes(quint64 num)
|
||||
{
|
||||
txBytesMutex.lock();
|
||||
txBytes += num;
|
||||
txBytesMutex.unlock();
|
||||
}
|
||||
|
||||
void Servatrice::incRxBytes(quint64 num)
|
||||
{
|
||||
rxBytesMutex.lock();
|
||||
rxBytes += num;
|
||||
rxBytesMutex.unlock();
|
||||
}
|
||||
|
||||
void Servatrice::shutdownTimeout()
|
||||
{
|
||||
QMutexLocker locker(&serverMutex);
|
||||
|
|
|
@ -75,6 +75,8 @@ public:
|
|||
QMap<QString, ServerInfo_User *> getBuddyList(const QString &name);
|
||||
QMap<QString, ServerInfo_User *> getIgnoreList(const QString &name);
|
||||
void scheduleShutdown(const QString &reason, int minutes);
|
||||
void incTxBytes(quint64 num);
|
||||
void incRxBytes(quint64 num);
|
||||
protected:
|
||||
int startSession(const QString &userName, const QString &address);
|
||||
void endSession(int sessionId);
|
||||
|
@ -89,6 +91,8 @@ private:
|
|||
int serverId;
|
||||
bool threaded;
|
||||
int uptime;
|
||||
QMutex txBytesMutex, rxBytesMutex;
|
||||
quint64 txBytes, rxBytes;
|
||||
int maxGameInactivityTime, maxPlayerInactivityTime;
|
||||
int maxUsersPerAddress, messageCountingInterval, maxMessageCountPerInterval, maxMessageSizePerInterval, maxGamesPerUser;
|
||||
ServerInfo_User *evalUserQueryResult(const QSqlQuery &query, bool complete);
|
||||
|
|
|
@ -86,6 +86,7 @@ void ServerSocketInterface::flushXmlBuffer()
|
|||
QMutexLocker locker(&xmlBufferMutex);
|
||||
if (xmlBuffer.isEmpty())
|
||||
return;
|
||||
servatrice->incTxBytes(xmlBuffer.size());
|
||||
socket->write(xmlBuffer.toUtf8());
|
||||
socket->flush();
|
||||
xmlBuffer.clear();
|
||||
|
@ -94,6 +95,7 @@ void ServerSocketInterface::flushXmlBuffer()
|
|||
void ServerSocketInterface::readClient()
|
||||
{
|
||||
QByteArray data = socket->readAll();
|
||||
servatrice->incRxBytes(data.size());
|
||||
if (!data.contains("<cmd type=\"ping\""))
|
||||
logger->logMessage(QString(data), this);
|
||||
xmlReader->addData(data);
|
||||
|
|
Loading…
Reference in a new issue