2023-10-27 15:54:11 +01:00
|
|
|
import express from "express";
|
|
|
|
import { INFLUXDB_BUCKET, InfluxQueryAPI } from "../index";
|
|
|
|
|
|
|
|
const app = express();
|
|
|
|
const port = process.env.PORT || 3000;
|
|
|
|
|
|
|
|
// Query to get the player count history for tge last 24 hours in 1 hour intervals
|
|
|
|
const getPlayerHistoryQuery = `from(bucket: "${INFLUXDB_BUCKET}")
|
|
|
|
|> range(start: -24h)
|
|
|
|
|> filter(fn: (r) => r["_measurement"] == "scoresaber")
|
|
|
|
|> filter(fn: (r) => r["_field"] == "value")
|
|
|
|
|> filter(fn: (r) => r["type"] == "player_count")
|
|
|
|
|> aggregateWindow(every: 1h, fn: mean)
|
|
|
|
|> yield()
|
|
|
|
`;
|
|
|
|
|
|
|
|
app.get("/", (req, res) => {
|
|
|
|
res.send("Hello!");
|
|
|
|
});
|
|
|
|
|
|
|
|
app.get("/analytics", async (req, res) => {
|
|
|
|
const before = new Date().getTime();
|
|
|
|
const rows = await InfluxQueryAPI.collectRows(getPlayerHistoryQuery);
|
|
|
|
let history = rows.map((row: any) => ({
|
|
|
|
time: row._time,
|
2023-10-27 15:56:42 +01:00
|
|
|
value: row._value !== null ? row._value.toFixed(0) : null,
|
2023-10-27 15:54:11 +01:00
|
|
|
}));
|
|
|
|
history = history.sort(
|
|
|
|
(a: any, b: any) => new Date(a.time).getTime() - new Date(b.time).getTime()
|
|
|
|
);
|
|
|
|
|
|
|
|
return res.json({
|
2023-10-27 15:56:42 +01:00
|
|
|
serverTimeTaken: new Date().getTime() - before + "ms",
|
2023-10-27 15:54:11 +01:00
|
|
|
history: history,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
app.listen(port, () => {
|
|
|
|
console.log(`API Server is running on http://localhost:${port}`);
|
|
|
|
});
|