check-online-instance/index.js

57 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

2023-06-12 15:16:15 +00:00
const axios = require('axios');
2023-06-13 19:17:12 +00:00
class InstanceChecker {
constructor() {
this.axiosInstance = axios.create();
2023-06-12 15:16:15 +00:00
}
2023-06-13 19:17:12 +00:00
async checkInstanceStatus(instance) {
try {
const response = await Promise.race([
this.axiosInstance.get(`https://${instance}/api/v1/instance`),
new Promise((resolve, reject) => {
setTimeout(() => reject(new Error('Tempo de espera excedido')), 6000);
})
]);
2023-06-12 15:16:15 +00:00
2023-06-13 19:17:12 +00:00
return { instance, status: true };
} catch (error) {
return { instance, status: false };
}
2023-06-12 15:16:15 +00:00
}
2023-06-13 19:17:12 +00:00
async fetchPeersFromAPI() {
2023-06-12 15:16:15 +00:00
try {
2023-06-13 19:17:12 +00:00
const response = await this.axiosInstance.get('https://mastodon.social/api/v1/instance/peers');
return response.data;
2023-06-12 15:16:15 +00:00
} catch (error) {
2023-06-13 19:17:12 +00:00
console.error('Erro ao buscar peers da API:', error.message);
return [];
}
}
async checkPeersStatus() {
const peers = await this.fetchPeersFromAPI();
if (peers.length === 0) {
console.log('Nenhum peer encontrado na API.');
return;
}
const results = [];
for (const peer of peers) {
try {
const result = await this.checkInstanceStatus(peer);
console.log(`${result.instance} está ${result.status}.`);
results.push(result);
} catch (error) {
console.error(`Erro ao verificar o status de ${peer}:`, error.message);
}
2023-06-12 15:16:15 +00:00
}
}
}
2023-06-13 19:17:12 +00:00
const instanceChecker = new InstanceChecker();
instanceChecker.checkPeersStatus();