blob: a19e7d9e4e915d2a7dea1c126f5e5daee71cc916 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include "maintenance.h"
int Maintenance::updateStats()
{
// result
int numOfUpdatedStats = 0;
// get list of gamenames in database
QString selectGamenames = "SELECT DISTINCT gamename FROM serverlist";
QSqlQuery gamenameQuery;
gamenameQuery.prepare(selectGamenames);
if ( ! gamenameQuery.exec() )
return reportQuery(gamenameQuery);
// update stats for every gamename
while ( gamenameQuery.next() )
{
// get next gamename
QString gamename = gamenameQuery.value(0).toString();
// determine beacon and server counts
QString selectStats = "SELECT COUNT(CASE WHEN f_direct THEN 1 END) AS num_direct, "
"count(*) AS num_total "
"FROM serverlist "
"WHERE gamename = :gamename AND dt_updated > :timestamp";
QSqlQuery statQuery;
statQuery.prepare(selectStats);
statQuery.bindValue(":gamename", gamename);
statQuery.bindValue(":timestamp", QDateTime::currentDateTime()
.addSecs(-_coreObject->Settings.ListenServerSettings.serverttl_s).toSecsSinceEpoch());
if ( ! statQuery.exec() )
return reportQuery(statQuery);
// get values
int num_direct = -1;
int num_total = -1;
if ( statQuery.next() )
{
num_direct = statQuery.value("num_direct").toInt();
num_total = statQuery.value("num_total").toInt();
}
// write to db
QString updateStatQuery = "UPDATE gameinfo "
"SET num_direct = :num_direct, num_total = :num_total "
"WHERE gamename = :gamename ";
statQuery.prepare(updateStatQuery);
statQuery.bindValue(":num_direct", num_direct);
statQuery.bindValue(":num_total", num_total);
statQuery.bindValue(":gamename", gamename);
if ( ! statQuery.exec() )
return reportQuery(statQuery);
// update counter
numOfUpdatedStats += statQuery.numRowsAffected();
}
return numOfUpdatedStats;
}
|