データトラフィックモニター ↓↑

サイトで受信および送信されたデータの量をリアルタイムで表示します。ただし、ファイルのアップロードの検出に制限があります。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @namespace    http://linkme.bio/jhonpergon/?userscript=redemonitor
// @version      0.2
// @author       Jhon Pérgon

// @name         Monitor de Tráfego de Dados ↓↑
// @name:pt         Monitor de Tráfego de Dados ↓↑
// @name:pt-BR         Monitor de Tráfego de Dados ↓↑
// @name:pt-PT         Monitor de Tráfego de Dados ↓↑
// @name:es         Monitor de Tráfico de Datos ↓↑
// @name:en         Monitor de Tráfego de Dados ↓↑
// @name:fr         Monitor de Trafic de Données ↓↑
// @name:ru         Мониторинг Трафика Данных ↓↑
// @name:ja         データトラフィックモニター ↓↑
// @name:ko         데이터 트래픽 모니터 ↓↑
// @name:zh-TW         數據流量監控 ↓↑
// @name:zh-CN         数据流量监控 ↓↑
// @name:id         Monitor Lalu Lintas Data ↓↑
// @name:ug         داتا ترافىك كونتروللىغۇچ ↓↑
// @name:ar         جهاز مراقبة حركة البيانات ↓↑
// @name:he         מוניטור תנועת נתונים ↓↑
// @name:hi         डेटा ट्रैफिक मॉनिटर ↓↑
// @name:th         ตัวเฝ้าระวังการจราจรข้อมูล ↓↑
// @name:bg         Монитор на Трафика на Данни ↓↑
// @name:ro         Monitor de Trafic de Date ↓↑
// @name:fi         Tietoliikenteen Monitori ↓↑
// @name:it         Monitor del Traffico Dati ↓↑
// @name:el         Παρακολούθηση της Κίνησης Δεδομένων ↓↑
// @name:eo         Datentrafikomonitoro ↓↑
// @name:hu         Adatforgalom Figyelő ↓↑
// @name:nb         Data Trafikkovervåker ↓↑
// @name:sk         Monitor Dátového Toku ↓↑
// @name:sv         Data Trafikövervakare ↓↑
// @name:sr         Монитор Саобраћаја Података ↓↑
// @name:pl         Monitor Ruchu Danych ↓↑
// @name:nl         Data Verkeer Monitor ↓↑
// @name:de         Datenverkehrsmonitor ↓↑
// @name:da         Data Trafikovervågning ↓↑
// @name:cs         Monitor Datového Toku ↓↑
// @name:uk         Монітор Трафіку Даних ↓↑
// @name:tr         Veri Trafik İzleyici ↓↑
// @name:vi         Giám Sát Lưu Lượng Dữ Liệu ↓↑
// @name:fr-CA         Monitor de Trafic de Données ↓↑

// @description         Exibe em tempo real a quantidade de dados recebidos e enviados no site. No entanto possui limitações na detecção de upload de arquivos.
// @description:pt         Mostra em tempo real a quantidade de dados recebidos e enviados no site. No entanto, tem limitações na detecção de upload de arquivos.
// @description:pt-BR         Exibe em tempo real a quantidade de dados recebidos e enviados no site. No entanto, tem limitações na detecção de upload de arquivos.
// @description:pt-PT         Mostra em tempo real a quantidade de dados recebidos e enviados no site. No entanto, tem limitações na detecção de upload de arquivos.
// @description:en         Displays in real time the amount of data received and sent on the website. However, it has limitations in detecting file uploads.
// @description:es         Muestra en tiempo real la cantidad de datos recibidos y enviados en el sitio. Sin embargo, tiene limitaciones en la detección de la carga de archivos.
// @description:fr         Affiche en temps réel la quantité de données reçues et envoyées sur le site. Cependant, il présente des limitations dans la détection du téléchargement de fichiers.
// @description:ru         Показывает в реальном времени количество данных, полученных и отправленных на сайте. Однако есть ограничения в обнаружении загрузки файлов.
// @description:ja         サイトで受信および送信されたデータの量をリアルタイムで表示します。ただし、ファイルのアップロードの検出に制限があります。
// @description:ko         사이트에서 수신 및 송신된 데이터 양을 실시간으로 표시합니다. 그러나 파일 업로드 감지에는 제한 사항이 있습니다.
// @description:zh-TW         實時顯示網站接收和發送的數據量。但是,在檔案上傳檢測方面存在限制。
// @description:zh-CN         实时显示网站接收和发送的数据量。但是,在文件上传检测方面存在限制。
// @description:id         Menampilkan jumlah data yang diterima dan dikirim secara real-time di situs web. Namun, memiliki keterbatasan dalam mendeteksi unggahan berkas.
// @description:ug         ئاپتا سىتادا يوللىنىپ كېتىپ بولغان ئۇچۇر سانىنى تەھرىرلىۋاتىدۇ. بىراق، ھۆججەت يۈكلەشنى تەكشۈرۈش ۋەجۇدىيەتلەرى بار.
// @description:ar         يعرض في الوقت الحقيقي كمية البيانات التي تم استلامها وإرسالها على الموقع. ومع ذلك، يوجد قيود في الكشف عن تحميل الملفات.
// @description:he         מציג בזמן אמת כמות של נתונים שנשלחו והתקבלו באתר. אך יש לו הגבלות בזיהוי העלאת קבצים.
// @description:hi         साइट पर प्राप्त और भेजे गए डेटा की मात्रा को वास्तविक समय में प्रदर्शित करता है। हालांकि, फ़ाइल अपलोड की पहचान में कुछ सीमाएं हैं.
// @description:th         แสดงปริมาณข้อมูลที่รับและส่งในเวลาจริงบนเว็บไซต์ แต่มีข้อจำกัดในการตรวจจับการอัปโหลดไฟล์.
// @description:bg         Показва в реално време количеството данни, получавани и изпращани на сайта. Въпреки това има ограничения при откриването на качването на файлове.
// @description:ro         Afișează în timp real cantitatea de date primite și trimise pe site. Cu toate acestea, există limitări în detectarea încărcării de fișiere.
// @description:fi         Näyttää reaaliajassa sivustolle saapuneen ja lähetetyn datan määrän. Huomaa kuitenkin, että se on rajoitettu tiedoston lataamisen havaitsemisessa.
// @description:it         Mostra in tempo reale la quantità di dati ricevuti e inviati sul sito. Tuttavia, presenta limitazioni nella rilevazione dell'upload dei file.
// @description:el         Εμφανίζει σε πραγματικό χρόνο τον όγκο των δεδομένων που λαμβάνονται και αποστέλλονται στον ιστότοπο. Ωστόσο, υπάρχουν περιορισμοί στην ανίχνευση της μεταφόρτωσης αρχείων.
// @description:eo         Montras en tempo realan la kvanton de datumoj ricevitaj kaj senditaj sur la retejo. Tamen, ĝi havas limigojn en la detekto de alŝuto de dosieroj.
// @description:hu         Valós időben mutatja be az oldalon kapott és elküldött adatok mennyiségét. Azonban korlátozásokkal jár a fájlfeltöltés érzékelésében.
// @description:nb         Viser i sanntid mengden data som mottas og sendes på nettstedet. Det har imidlertid begrensninger i deteksjonen av opplasting av filer.
// @description:sk         Zobrazuje v reálnom čase množstvo dát prijatých a odoslaných na webovej stránke. Má však obmedzenia pri detekcii nahrávania súborov.
// @description:sv         Visar i realtid mängden data som tas emot och skickas på webbplatsen. Det har dock begränsningar i upptäckten av filuppladdning.
// @description:sr         Приказује у реалном времену количину података који су примљени и послати на веб-сајту. Међутим, постоје ограничења у откривању учитавања фајлова.
// @description:pl         Wyświetla w czasie rzeczywistym ilość danych otrzymanych i wysłanych na stronie internetowej. Jednak ma ograniczenia w wykrywaniu przesyłania plików.
// @description:nl         Toont in realtime de hoeveelheid ontvangen en verzonden gegevens op de website. Het heeft echter beperkingen bij het detecteren van het uploaden van bestanden.
// @description:de         Zeigt in Echtzeit die Menge der auf der Website empfangenen und gesendeten Daten an. Es gibt jedoch Einschränkungen bei der Erkennung von Datei-Uploads.
// @description:da         Viser i realtid mængden af data, der er modtaget og sendt på webstedet. Det har dog begrænsninger i opdagelsen af filoverførsel.
// @description:cs         Zobrazuje v reálném čase množství dat přijatých a odeslaných na webu. Má však omezení ve sledování nahrávání souborů.
// @description:uk         Показує в реальному часі кількість даних, отриманих і відправлених на сайті. Проте є обмеження в виявленні завантаження файлів.
// @description:tr         Sitede alınan ve gönderilen veri miktarını gerçek zamanlı olarak gösterir. Ancak dosya yükleme tespitinde sınırlamaları vardır.
// @description:vi         Hiển thị số lượng dữ liệu nhận và gửi trên trang web trong thời gian thực. Tuy nhiên, có hạn chế trong việc phát hiện tải lên tệp.
// @description:fr-CA         Affiche en temps réel la quantité de données reçues et envoyées sur le site. Cependant, il présente des limites dans la détection du téléchargement de fichiers.

// @icon         data:image/png;base64,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
// @match        *://*/*
// @grant        none
// @license      MIT
// @grant        GM_addStyle
// ==/UserScript==

(function() {
    'use strict';

    GM_addStyle('@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.3/font/bootstrap-icons.css");');

    let addOne = false;
    // Crie um elemento de div para exibir o tráfego de rede
    const trafficDiv = document.createElement('div');
    trafficDiv.style.position = 'fixed';
    trafficDiv.style.zIndex = '999999';
    trafficDiv.style.left = '0';
    trafficDiv.style.bottom = '0';
    trafficDiv.style.fontSize = '11px';
    trafficDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
    trafficDiv.style.color = 'white';
    trafficDiv.style.padding = '5px';

    if(addOne == false){
      document.body.appendChild(trafficDiv);
      addOne = true;
    }

    // Variável para rastrear o tamanho total dos recursos recebidos no último segundo
    let totalReceivedSize = 0;
    let receivedLastSecond = 0;
    let totalUploadedSize = 0;
    let uploadedLastSecond = 0;

    // Função para formatar bytes em KB ou MB
    function formatBytes(bytes) {
        if (bytes < 1024) {
            return bytes.toFixed(2) + ' Kb';
        } else if (bytes < 1024 * 1024) {
            return (bytes / 1024).toFixed(1) + ' Kb';
        } else {
            return (bytes / (1024 * 1024)).toFixed(1) + ' Mb';
        }
    }

    // Função para atualizar o tráfego de rede
    function updateTraffic() {
        // Obtenha os dados de tráfego de rede
        const resources = window.performance.getEntriesByType('resource');

        // Calcule o tamanho dos recursos recebidos nos últimos segundos
        const now = performance.now();
        const receivedThisSecond = resources.reduce((acc, entry) => {
            if (now - entry.responseEnd < 1000) { // dentro do último segundo
                return acc + entry.transferSize;
            } else {
                return acc;
            }
        }, 0);

        // Calcule a velocidade de download no último segundo
        const downloadSpeed = (receivedThisSecond - receivedLastSecond) / 1024; // em KB/s
        receivedLastSecond = receivedThisSecond;
        totalReceivedSize += receivedThisSecond;

        // Calcule a velocidade de upload no último segundo
        const uploadedThisSecond = totalUploadedSize - uploadedLastSecond;
        const uploadSpeed = uploadedThisSecond / 1024; // em KB/s
        uploadedLastSecond = totalUploadedSize;

        // Atualize o conteúdo da div com os dados de tráfego formatados
        trafficDiv.innerHTML = `<b><i class="bi bi-arrow-down"></i> ${formatBytes(totalReceivedSize)} • <i class="bi bi-speedometer"></i> ${formatBytes(receivedThisSecond)} | <i class="bi bi-arrow-up"></i> ${formatBytes(uploadedThisSecond)}</b>`;
    }

    // Adicione um ouvinte de eventos para elementos de input type=file para rastrear o tamanho dos arquivos enviados
    document.body.addEventListener('change', function(event) {
        if (event.target && event.target.tagName === 'INPUT' && event.target.type === 'file') {
            const files = event.target.files;
            for (let i = 0; i < files.length; i++) {
                totalUploadedSize += files[i].size;
            }
            updateTraffic();
        }
    });

    // Chame a função de atualização a cada segundo
    setInterval(updateTraffic, 1000);
})();