Convertido código para classe
This commit is contained in:
		
							parent
							
								
									eead1cca3d
								
							
						
					
					
						commit
						0c55cc3a27
					
				
							
								
								
									
										85
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								index.js
									
									
									
									
									
								
							@ -1,49 +1,56 @@
 | 
				
			|||||||
const axios = require('axios');
 | 
					const axios = require('axios');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function checkSiteStatus(site) {
 | 
					class InstanceChecker {
 | 
				
			||||||
  return Promise.race([
 | 
					  constructor() {
 | 
				
			||||||
    axios.get(`https://${site}/api/v1/instance`),
 | 
					    this.axiosInstance = axios.create();
 | 
				
			||||||
    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 = [];
 | 
					  async checkInstanceStatus(instance) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
  for (const site of sites) {
 | 
					 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      const result = await checkSiteStatus(site);
 | 
					      const response = await Promise.race([
 | 
				
			||||||
      console.log(`${result.site} está ${result.status}.`);
 | 
					        this.axiosInstance.get(`https://${instance}/api/v1/instance`),
 | 
				
			||||||
      results.push(result);
 | 
					        new Promise((resolve, reject) => {
 | 
				
			||||||
 | 
					          setTimeout(() => reject(new Error('Tempo de espera excedido')), 6000);
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return { instance, status: true };
 | 
				
			||||||
    } catch (error) {
 | 
					    } catch (error) {
 | 
				
			||||||
      console.error(`Erro ao verificar o status de ${site}:`, error.message);
 | 
					      return { instance, status: false };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async fetchPeersFromAPI() {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      const response = await this.axiosInstance.get('https://mastodon.social/api/v1/instance/peers');
 | 
				
			||||||
 | 
					      return response.data;
 | 
				
			||||||
 | 
					    } catch (error) {
 | 
				
			||||||
 | 
					      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);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
checkAllSitesStatus();
 | 
					const instanceChecker = new InstanceChecker();
 | 
				
			||||||
 | 
					instanceChecker.checkPeersStatus();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user