← 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()}`)
    })
  }
}