← back to Dear Bubbe Admin
check-active-users.js
94 lines
#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
// Read the last 500 lines of logs
const logsPath = path.join(__dirname, 'logs/combined.log')
const logs = fs.readFileSync(logsPath, 'utf-8').split('\n').slice(-500)
// Track active users from the last 5 minutes
const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000)
const activeUsers = new Map()
logs.forEach(line => {
if (line.includes('user_message') || line.includes('live-chat-update')) {
try {
const parsed = JSON.parse(line)
const timestamp = new Date(parsed.timestamp)
if (timestamp > fiveMinutesAgo) {
const key = parsed.ip || parsed.userId || 'unknown'
// Extract user info
if (!activeUsers.has(key) || timestamp > new Date(activeUsers.get(key).lastSeen)) {
activeUsers.set(key, {
userName: parsed.userName || 'Anonymous',
ip: parsed.ip || 'Unknown',
location: parsed.location || 'Unknown',
mode: parsed.mode || 'bubbe',
lastSeen: parsed.timestamp,
lastMessage: parsed.message || parsed.userMessage || ''
})
}
}
} catch (e) {
// Not a JSON line, skip
}
}
})
console.log('=== ACTIVE USERS (Last 5 Minutes) ===\n')
console.log(`Total Active: ${activeUsers.size}\n`)
let count = 1
activeUsers.forEach((user, key) => {
console.log(`${count}. ${user.userName}`)
console.log(` IP: ${user.ip}`)
console.log(` Location: ${user.location}`)
console.log(` Mode: ${user.mode}`)
console.log(` Last Seen: ${new Date(user.lastSeen).toLocaleTimeString()}`)
if (user.lastMessage) {
console.log(` Last Message: "${user.lastMessage.substring(0, 50)}${user.lastMessage.length > 50 ? '...' : ''}"`)
}
console.log('')
count++
})
if (activeUsers.size === 0) {
console.log('No active users found in the last 5 minutes.')
console.log('\nChecking for any users in last hour...')
const oneHourAgo = new Date(Date.now() - 60 * 60 * 1000)
const recentUsers = new Map()
logs.forEach(line => {
if (line.includes('user_message')) {
try {
const parsed = JSON.parse(line)
const timestamp = new Date(parsed.timestamp)
if (timestamp > oneHourAgo) {
const key = parsed.ip || parsed.userId || 'unknown'
if (!recentUsers.has(key)) {
recentUsers.set(key, {
userName: parsed.userName || 'Anonymous',
ip: parsed.ip || 'Unknown',
location: parsed.location || 'Unknown',
timestamp: parsed.timestamp
})
}
}
} catch (e) {
// Skip non-JSON lines
}
}
})
if (recentUsers.size > 0) {
console.log(`\nFound ${recentUsers.size} users in the last hour:`)
recentUsers.forEach(user => {
console.log(`- ${user.userName} | ${user.ip} | ${user.location} | ${new Date(user.timestamp).toLocaleTimeString()}`)
})
}
}