aboutsummaryrefslogtreecommitdiff
path: root/Maintenance/updatestats.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Maintenance/updatestats.cpp')
-rw-r--r--Maintenance/updatestats.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/Maintenance/updatestats.cpp b/Maintenance/updatestats.cpp
new file mode 100644
index 0000000..a19e7d9
--- /dev/null
+++ b/Maintenance/updatestats.cpp
@@ -0,0 +1,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;
+}