check-online-instance/index.js

50 lines
1.2 KiB
JavaScript

const axios = require('axios');
function checkSiteStatus(site) {
return Promise.race([
axios.get(`https://${site}/api/v1/instance`),
new Promise((resolve, reject) => {
setTimeout(() => reject(new Error('Tempo de espera excedido')), 30000);
})
])
.then(response => {
return { site, status: 'online' };
})
.catch(error => {
return { site, status: 'offline' };
});
}
async function fetchSitesFromAPI() {
try {
const response = await axios.get('https://mastodon.social/api/v1/instance/peers');
return response.data;
} catch (error) {
console.error('Erro ao buscar sites da API:', error.message);
return [];
}
}
async function checkAllSitesStatus() {
const sites = await fetchSitesFromAPI();
if (sites.length === 0) {
console.log('Nenhum site encontrado na API.');
return;
}
const results = [];
for (const site of sites) {
try {
const result = await checkSiteStatus(site);
console.log(`${result.site} está ${result.status}.`);
results.push(result);
} catch (error) {
console.error(`Erro ao verificar o status de ${site}:`, error.message);
}
}
}
checkAllSitesStatus();