mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-15 05:41:51 +08:00
Fixed peak TPS query
This commit is contained in:
parent
c60003cda0
commit
bbb158ddc5
@ -120,16 +120,23 @@ public class TPSQueries {
|
||||
}
|
||||
|
||||
public static Query<Optional<DateObj<Integer>>> fetchPeakPlayerCount(UUID serverUUID, long afterDate) {
|
||||
String sql = "SELECT " + DATE + ", MAX(" + PLAYERS_ONLINE + ") as max FROM " + TABLE_NAME +
|
||||
" WHERE " + SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID +
|
||||
" AND " + DATE + ">= ?" +
|
||||
" GROUP BY " + SERVER_ID;
|
||||
String subQuery = "(" + SELECT + "MAX(" + PLAYERS_ONLINE + ")" + FROM + TABLE_NAME + WHERE + SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID +
|
||||
AND + DATE + ">= ?)";
|
||||
String sql = SELECT +
|
||||
DATE + ", " + PLAYERS_ONLINE +
|
||||
FROM + TABLE_NAME +
|
||||
WHERE + SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID +
|
||||
AND + DATE + ">= ?" +
|
||||
AND + PLAYERS_ONLINE + "=" + subQuery +
|
||||
ORDER_BY + DATE + " DESC LIMIT 1";
|
||||
|
||||
return new QueryStatement<Optional<DateObj<Integer>>>(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, serverUUID.toString());
|
||||
statement.setLong(2, afterDate);
|
||||
statement.setString(3, serverUUID.toString());
|
||||
statement.setLong(4, afterDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -146,6 +153,6 @@ public class TPSQueries {
|
||||
}
|
||||
|
||||
public static Query<Optional<DateObj<Integer>>> fetchAllTimePeakPlayerCount(UUID serverUUID) {
|
||||
return db -> db.query(fetchPeakPlayerCount(serverUUID, 0));
|
||||
return fetchPeakPlayerCount(serverUUID, 0);
|
||||
}
|
||||
}
|
@ -27,6 +27,7 @@ public class Sql {
|
||||
public static final String FROM = " FROM ";
|
||||
public static final String WHERE = " WHERE ";
|
||||
public static final String GROUP_BY = " GROUP BY ";
|
||||
public static final String ORDER_BY = " ORDER BY ";
|
||||
public static final String INNER_JOIN = " INNER JOIN ";
|
||||
public static final String AND = " AND ";
|
||||
|
||||
|
@ -72,6 +72,7 @@ import java.lang.management.OperatingSystemMXBean;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@ -994,4 +995,18 @@ public abstract class CommonDBTest {
|
||||
db.executeTransaction(new CreateIndexTransaction(db.getType()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void playerMaxPeakIsCorrect() {
|
||||
List<TPS> tpsData = RandomData.randomTPS();
|
||||
|
||||
for (TPS tps : tpsData) {
|
||||
db.executeTransaction(new TPSStoreTransaction(serverUUID, Collections.singletonList(tps)));
|
||||
}
|
||||
|
||||
tpsData.sort(Comparator.comparingInt(TPS::getPlayers));
|
||||
int expected = tpsData.get(tpsData.size() - 1).getPlayers();
|
||||
int actual = db.query(TPSQueries.fetchAllTimePeakPlayerCount(serverUUID)).map(DateObj::getValue).orElse(-1);
|
||||
assertEquals("Wrong return value. " + tpsData.stream().map(TPS::getPlayers).collect(Collectors.toList()).toString(), expected, actual);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ public class RandomData {
|
||||
List<TPS> test = new ArrayList<>();
|
||||
for (int i = 0; i < 20; i++) {
|
||||
int randInt = r.nextInt();
|
||||
long randLong = r.nextLong();
|
||||
long randLong = Math.abs(r.nextLong());
|
||||
test.add(new TPS(randLong, randLong, randInt, randLong, randLong, randInt, randInt, randLong));
|
||||
}
|
||||
return test;
|
||||
|
Loading…
Reference in New Issue
Block a user