41 lines
1.2 KiB
TypeScript
Raw Normal View History

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}`);
});