Files
NoIdle/backend/check_device_status.js

112 lines
4.7 KiB
JavaScript
Raw Permalink Normal View History

const { query } = require('./config/database');
(async () => {
try {
const deviceName = process.argv[2] || 'DESKTOP-BC16GDH';
console.log(`\n🔍 Verificando status do dispositivo: ${deviceName}\n`);
// Buscar informações do dispositivo
const deviceResult = await query(
`SELECT device_id, device_name, is_active, last_seen, created_at,
(SELECT name FROM users WHERE id = devices.user_id) as user_name
FROM devices
WHERE device_name = $1`,
[deviceName]
);
if (deviceResult.rows.length === 0) {
console.log(`❌ Dispositivo "${deviceName}" não encontrado no banco de dados\n`);
process.exit(1);
}
const device = deviceResult.rows[0];
console.log('📱 Informações do Dispositivo:');
console.log(` Nome: ${device.device_name}`);
console.log(` Device ID: ${device.device_id}`);
console.log(` Status (is_active): ${device.is_active ? '✅ Ativo' : '❌ Inativo'}`);
console.log(` Último Heartbeat: ${device.last_seen ? new Date(device.last_seen).toLocaleString('pt-BR') : '❌ Nunca'}`);
console.log(` Criado em: ${new Date(device.created_at).toLocaleString('pt-BR')}`);
console.log(` Usuário vinculado: ${device.user_name || 'Nenhum'}`);
// Calcular status real baseado em last_seen
let realStatus = false;
let statusMessage = '';
if (device.last_seen) {
const lastSeenDate = new Date(device.last_seen);
const now = new Date();
const diffMinutes = Math.floor((now - lastSeenDate) / 1000 / 60);
if (diffMinutes <= 5) {
realStatus = true;
statusMessage = `✅ ONLINE (último heartbeat há ${diffMinutes} minuto(s))`;
} else {
realStatus = false;
statusMessage = `❌ OFFLINE (último heartbeat há ${diffMinutes} minuto(s) - mais de 5 minutos)`;
}
} else {
realStatus = false;
statusMessage = '❌ OFFLINE (nunca recebeu heartbeat)';
}
console.log(`\n📊 Status Real: ${statusMessage}`);
// Verificar atividades recentes
const activitiesResult = await query(
`SELECT COUNT(*) as total,
MAX(timestamp) as ultima_atividade,
MIN(timestamp) as primeira_atividade
FROM activities
WHERE device_id = (SELECT id FROM devices WHERE device_name = $1)`,
[deviceName]
);
if (activitiesResult.rows[0].total > 0) {
const activities = activitiesResult.rows[0];
console.log(`\n📈 Atividades Registradas:`);
console.log(` Total: ${activities.total}`);
console.log(` Primeira: ${new Date(activities.primeira_atividade).toLocaleString('pt-BR')}`);
console.log(` Última: ${new Date(activities.ultima_atividade).toLocaleString('pt-BR')}`);
const lastActivityDate = new Date(activities.ultima_atividade);
const now = new Date();
const diffHours = Math.floor((now - lastActivityDate) / 1000 / 60 / 60);
const diffMinutes = Math.floor((now - lastActivityDate) / 1000 / 60) % 60;
if (diffHours > 0) {
console.log(` ⚠️ Última atividade há ${diffHours}h ${diffMinutes}min`);
} else {
console.log(` ✅ Última atividade há ${diffMinutes}min`);
}
} else {
console.log(`\n⚠️ Nenhuma atividade registrada para este dispositivo`);
}
// Verificar últimas 5 atividades
const recentActivities = await query(
`SELECT timestamp, application_name, window_title, idle_time_seconds
FROM activities
WHERE device_id = (SELECT id FROM devices WHERE device_name = $1)
ORDER BY timestamp DESC
LIMIT 5`,
[deviceName]
);
if (recentActivities.rows.length > 0) {
console.log(`\n📋 Últimas 5 Atividades:`);
recentActivities.rows.forEach((activity, index) => {
console.log(` ${index + 1}. ${new Date(activity.timestamp).toLocaleString('pt-BR')} - ${activity.application_name} - ${activity.window_title.substring(0, 50)}`);
});
}
console.log('\n');
process.exit(0);
} catch (error) {
console.error('❌ Erro:', error.message);
process.exit(1);
}
})();