aboutsummaryrefslogtreecommitdiff
path: root/src/Maintenance/updatestats.cpp
blob: 21ef21370a335e84bb61ff7fbaff6d8422c37d5c (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
#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();

        // hotfix hf4
        // update number of servers directly
        QString numStatsAll = "UPDATE gameinfo "
                              "SET num_total = ( "
                                "SELECT COUNT(gamename) FROM serverlist "
                                "WHERE gamename = :gamename AND dt_updated > :timestamp "
                              "), "
                              "num_direct = ( "
                                "SELECT COUNT(gamename) FROM serverlist "
                                "WHERE gamename = :gamename AND dt_updated > :timestamp AND f_direct"
                              ") WHERE gamename = :gamename";

        QSqlQuery statQuery;
        statQuery.prepare(numStatsAll);
        statQuery.bindValue(":gamename", gamename);
        statQuery.bindValue(":timestamp", QDateTime::currentDateTime()
                                              .addSecs(-_coreObject->Settings.ListenServerSettings.serverttl_s).toSecsSinceEpoch());
        if ( ! statQuery.exec() )
            return reportQuery(statQuery);

        // update counter
        numOfUpdatedStats += statQuery.numRowsAffected();
    }

    return numOfUpdatedStats;
}