;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Facebook enviou equipe para reiniciar manualmente seus servidores, diz NYT

Facebook logo rede social - Thomas Ulrich/ Pixabay
Facebook logo rede social Imagem: Thomas Ulrich/ Pixabay

Colaboração para Tilt, em Florianópolis*

04/10/2021 20h22Atualizada em 05/10/2021 09h53

Diante da gravidade pane geral que afetou as plataformas do Facebook, Instagram e WhatsApp, uma equipe de funcionários foi enviada ao centro de dados da empresa, em Santa Clara, na Califórnia, para tentar reinicializar manualmente o sistema dos servidores. A informação foi publicada pelo jornal New York Times, que disse ter recebido de uma fonte anônima um memorando interno do conglomerado.

Os aplicativos do WhatsApp, Facebook e Instagram começaram a ficar fora do ar globalmente perto do meio-dia (de Brasília). Ninguém conseguia enviar mensagens no WhatsApp ou carregar novos posts no Instagram e Facebook.

Por volta de 19h, o Instagram e o Facebook começaram a dar sinal de vida. O WhatsApp ameaçou retorno. Contudo, a conexão ficou oscilando por em torno de 1h depois disso. Aparentemente, o serviço de mensagens está funcionando agora.

Falha não envolveu hacker

De acordo com o jornal norte-americano, os especialistas do Facebook ainda tentam descobrir a causa da instabilidade nos aplicativos. Sob condição de anonimato, dois funcionários relataram à reportagem do New York Times que é improvável o "apagão" ter sido resultado de um ataque cibernético, pois uma ação de hacker seria incapaz de afetar os aplicativos de maneira global.

Os mesmos funcionários ainda disseram ao jornal que nem mesmo a rede interna usada entre os colaboradores da empresa estavam funcionando, paralisando diversos segmentos da gigante de tecnologia. Eles tiveram que usar aplicativos concorrentes da empresa, como LinkedIn e Zoom para manter a comunicação.

Por meio de sua conta oficial no Twitter, o Facebook —que também é dono do WhatsApp e Instagram— confirmou o problema no mundo todo, mas não deu detalhes sobre a falha.

"Estamos cientes de que algumas pessoas estão tendo problemas para ar nossos aplicativos e produtos. Estamos trabalhando para voltar ao normal o mais rápido possível e pedimos desculpas por qualquer inconveniente", disse a empresa.

O blecaute atingiu tanto os aplicativos para Android e iOS quanto os sites íveis pelo navegador no celular e no PC. Quem tentava ar o WhatsApp Web ou o Facebook e o Instagram pelo navegador encontrava uma tela de página fora do ar.

Falhas nos serviços do Facebook não são inéditas: só este ano, os apps tiveram instabilidade pelo menos três vezes, em março, junho e setembro. Geralmente, as redes sociais voltam a funcionar em menos de duas horas. No blecaute desta segunda, foram quase sete horas sem retorno, o que não é comum.

Dane Knecht, vice-presidente da empresa de servidores Cloudflare, disse em seu perfil no Twitter que a queda global do Facebook tem a ver com DNS e que "as rotas BGP" da empresa "foram retiradas da internet".

*Com informações de Lucas Carvalho, de Tilt, em São Paulo.