diff --git a/server/src/inactive_rooms.js b/server/src/inactive_rooms.js new file mode 100644 index 0000000..5783c5d --- /dev/null +++ b/server/src/inactive_rooms.js @@ -0,0 +1,21 @@ +import { getRedis } from './index' + +export async function pollForInactiveRooms() { + const redis = getRedis(); + + console.log('Checking for inactive rooms...'); + const rooms = await redis.hgetallAsync('rooms') || {}; + console.log(`${Object.keys(rooms).length} rooms found`); + + Object.keys(rooms).forEach(async roomId => { + const room = JSON.parse(rooms[roomId]); + const timeSinceUpdatedInSeconds = (Date.now() - room.updatedAt) / 1000; + const timeSinceUpdatedInDays = Math.round(timeSinceUpdatedInSeconds / 60 / 60 / 24); + if (timeSinceUpdatedInDays > 7) { + console.log(`Deleting roomId ${roomId} which hasn't been used in ${timeSinceUpdatedInDays} days`); + await redis.hdelAsync('rooms', roomId); + } + }) + + setTimeout(pollForInactiveRooms, (1000 * 60 * 60 * 12)); // every 12 hours +} diff --git a/server/src/index.js b/server/src/index.js index 3f55596..e2be6d9 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -14,6 +14,7 @@ import crypto from 'crypto' import mailer from './utils/mailer'; import koaStatic from 'koa-static'; import koaSend from 'koa-send'; +import {pollForInactiveRooms} from './inactive_rooms'; bluebird.promisifyAll(Redis.RedisClient.prototype); bluebird.promisifyAll(Redis.Multi.prototype); @@ -146,6 +147,8 @@ const init = async () => { server.listen(PORT, () => { console.log(`Darkwire is online at port ${PORT}`); }) + + pollForInactiveRooms(); } init()