
İnternet hızınız yavaş mı? Arka planda hangi program ne kadar bant genişliği kullanıyor? İndirme ve yükleme hızlarınız gerçekten internet sağlayıcınızın vaat ettiği kadar mı? Bu soruları soran milyonlarca kullanıcı, cevap bulmak için genellikle speedtest.net gibi sitelere başvurur. Ancak bu siteler sadece anlık bir ölçüm yapar ve size sürekli izleme imkânı sunmaz.
Peki ya kendi ağ izleme aracınızı yazsanız? Hem ücretsiz, hem tamamen sizin kontrolünüzde, hem de istediğiniz özellikleri ekleyebileceğiniz bir araç. İşte bu yazıda tam olarak bunu yapacağız.
Python programlama dilini kullanarak sıfırdan bir download ve upload hız monitörü geliştireceğiz. Bu araç size anlık hızları, grafiksel gösterimi, istatistikleri ve çok daha fazlasını renkli bir terminal arayüzünde sunacak.
Hazır mısınız? Hadi başlayalım.
İÇİNDEKİLER
- Python ile Ağ İzleme Neden Mantıklı?
- Gerekli Kütüphaneler ve Kurulum
- Temel Kavramlar: Download, Upload, Bant Genişliği
- psutil Kütüphanesi ile Ağ Verisi Okuma
- curses ile Terminal Arayüzü Oluşturma
- Grafiksel Gösterim: Blok Grafik Nasıl Çizilir?
- Renk Sistemi ve Uyarı Mekanizması
- Kodun Tamamı ve Açıklaması
- Programı Çalıştırma ve Kullanım
- Geliştirme Fikirleri
- Sık Karşılaşılan Sorunlar ve Çözümleri
- Sonuç
- PYTHON İLE AĞ İZLEME NEDEN MANTIKLI?
Piyasada onlarca ağ izleme programı bulunuyor. Wireshark, NetBalancer, GlassWire gibi araçlar oldukça güçlüdür. Peki neden Python ile kendiniz yazasınız ki?
- Tamamen ücretsiz: Ticari ağ izleme araçları aylık abonelik ücretleri alabilir. Python ve kullandığımız kütüphaneler tamamen ücretsizdir.
- Tam kontrol: Neyin izlendiğini, nasıl gösterildiğini ve hangi verilerin saklandığını tamamen siz belirlersiniz.
- Öğrenme fırsatı: Ağ programlaması, terminal arayüzü tasarımı ve veri görselleştirme gibi konuları pratik olarak öğrenirsiniz.
- Özelleştirilebilir: Kendi ihtiyaçlarınıza göre kolayca değiştirebilirsiniz. Alarm eklemek, log dosyasına kaydetmek veya e-posta göndermek gibi özellikler ekleyebilirsiniz.
- Hafif: Büyük uygulamalar yüklemeden sadece birkaç Python dosyasıyla çalışır.
- Gizlilik: Verileriniz üçüncü taraf sunuculara gönderilmez, tamamen yerel çalışır.
- GEREKLİ KÜTÜPHANELER VE KURULUM
Bu projeyi çalıştırmak için iki ana kütüphaneye ihtiyacınız var:
- psutil — Sistem ve ağ bilgilerini okuyan güçlü bir kütüphane
- windows-curses — Terminal ekranını sabit ve renkli tutan kütüphane (sadece Windows için)
Adım 1: Python Kurulumu
Öncelikle bilgisayarınızda Python kurulu olmalıdır. Eğer kurulu değilse python.org adresinden indirin. Kurulum sırasında dikkat etmeniz gereken tek şey şudur: “Add Python to PATH” seçeneğini mutlaka işaretleyin. Bu seçenek işaretli olmazsa Python komutlarını terminalden çalıştıramazsınız.
Kurulumu doğrulamak için:
CMD veya PowerShell açın ve şunu yazın:
python –version
Python 3.x.x gibi bir çıktı görüyorsanız kurulum başarılıdır.
Adım 2: Kütüphaneleri Kurma
CMD veya PowerShell’i yönetici olarak açın ve şu komutu çalıştırın:
python -m pip install psutil windows-curses
Bu komut iki kütüphaneyi de aynı anda kurar. Kurulum birkaç saniye sürer.
Kurulumu doğrulamak için:
python -m pip list
Listede psutil ve windows-curses görünüyorsa her şey hazır demektir.
- TEMEL KAVRAMLAR: DOWNLOAD, UPLOAD, BANT GENİŞLİĞİ
Koda geçmeden önce bazı temel kavramları açıklayalım:
Download (İndirme) Nedir?
Download, internetten bilgisayarınıza veri gelişini ifade eder. Bir web sayfası açtığınızda, YouTube’dan video izlediğinizde veya bir dosya indirdiğinizde download kullanırsınız. İnternet paketlerinin çoğu download hızına odaklanır çünkü kullanıcılar genellikle daha çok veri alır.
Upload (Yükleme) Nedir?
Upload, bilgisayarınızdan internete veri gönderiminizi ifade eder. E-posta gönderdiğinizde, bulut depolama servisine dosya yüklediğinizde veya video konferans yaptığınızda upload kullanırsınız. Asimetrik internet bağlantılarında upload hızı genellikle download hızından düşüktür.
Bant Genişliği Nedir?
Bant genişliği, internet bağlantınızın maksimum veri transfer kapasitesidir. Örneğin 100 Mb/s bant genişliği, teorik olarak saniyede 100 Megabit veri taşıyabileceğiniz anlamına gelir. Ancak gerçek hızlar her zaman bu değerin altında kalır.
Bit ve Byte Farkı:
İnternet hız testlerinde genellikle Mb/s (Megabit/saniye) kullanılır.
Dosya boyutlarında ise MB (Megabyte) kullanılır.
1 Byte = 8 Bit olduğundan, 100 Mb/s bağlantı teorik olarak yaklaşık 12.5 MB/s indirme hızı sağlar.
Bizim aracımız Byte cinsinden ölçüm yapar ve Mb olarak gösterir.
- PSUTIL KÜTÜPHANESİ İLE AĞ VERİSİ OKUMA
psutil (Process and System Utilities), Python’un en güçlü sistem izleme kütüphanelerinden biridir. CPU, RAM, disk, ağ ve süreç bilgilerini okuyabilir.
Ağ verilerini okumak için net_io_counters() fonksiyonunu kullanıyoruz:
import psutil
veri = psutil.net_io_counters()
print(f"Alınan byte: {veri.bytes_recv}")
print(f"Gönderilen byte: {veri.bytes_sent}")
print(f"Alınan paket: {veri.packets_recv}")
print(f"Gönderilen paket: {veri.packets_sent}")
Bu fonksiyon sistem açıldığından beri toplam transfer edilen veri miktarını döndürür. Anlık hızı hesaplamak için iki ölçüm arasındaki farkı kullanırız:
import psutil, time
olcum1 = psutil.net_io_counters()
time.sleep(1)
olcum2 = psutil.net_io_counters()
download_hizi = olcum2.bytes_recv - olcum1.bytes_recv
upload_hizi = olcum2.bytes_sent - olcum1.bytes_sent
print(f"Download: {download_hizi} byte/s")
print(f"Upload: {upload_hizi} byte/s")
Bu çok basit ama etkili bir yöntemdir. 1 saniye ara ile iki ölçüm alır, farkı hesaplarız. Bu bize saniyedeki byte miktarını verir.
psutil’in Diğer Yetenekleri:
- psutil.cpu_percent() — CPU kullanım yüzdesi
- psutil.virtual_memory() — RAM kullanımı
- psutil.disk_io_counters() — Disk okuma/yazma hızı
- psutil.net_connections() — Aktif ağ bağlantıları
- psutil.net_if_stats() — Ağ arayüzü istatistikleri
- CURSES İLE TERMİNAL ARAYÜZİ OLUŞTURMA
Normalde Python’da print() kullanarak ekrana yazdırırsınız. Ancak bu yöntemde her yeni veri bir öncekinin altına eklenir ve ekran sürekli aşağı kayar. Gerçek zamanlı izleme için ekranın sabit kalması gerekir.
İşte burada curses kütüphanesi devreye girer.
curses Nedir?
curses, terminal ekranını tam kontrol etmenizi sağlayan bir kütüphanedir. Ekranın herhangi bir satır ve sütununa yazabilir, renk ekleyebilir ve ekranı temizleyip yeniden çizebilirsiniz. Bu sayede ekran hiç kaymaz ve içerik yerli yerinde güncellenir.
Windows’ta curses:
Python’un standart curses kütüphanesi Windows’ta çalışmaz. Bu nedenle windows-curses paketini kuruyoruz. Bu paket standart curses ile birebir uyumludur, sadece kurulum aşamasında farklılık gösterir.
Temel curses Kullanımı:
import curses
def main(stdscr):
curses.curs_set(0) # İmleci gizle
stdscr.clear() # Ekranı temizle
stdscr.addstr(0, 0, "Merhaba!") # Satır 0, sütun 0'a yaz
stdscr.refresh() # Ekranı güncelle
stdscr.getch() # Tuş bekle
curses.wrapper(main)
Renk Sistemi:
import curses
def main(stdscr):
curses.start_color()
curses.init_pair(1, curses.COLOR_GREEN, -1) # Yeşil metin
curses.init_pair(2, curses.COLOR_RED, -1) # Kırmızı metin
curses.init_pair(3, curses.COLOR_YELLOW, -1) # Sarı metin
stdscr.addstr(0, 0, "Bu yeşil!", curses.color_pair(1))
stdscr.addstr(1, 0, "Bu kırmızı!", curses.color_pair(2))
stdscr.addstr(2, 0, "Bu sarı!", curses.color_pair(3))
stdscr.refresh()
stdscr.getch()
curses.wrapper(main)
curses.wrapper() fonksiyonu, programı güvenli bir ortamda çalıştırır. Program hata verse bile terminali düzgün şekilde eski haline getirir.
- GRAFİKSEL GÖSTERİM: BLOK GRAFİK NASIL ÇİZİLİR?
Aracımızın en görsel özelliği, son 50 saniyelik download ve upload verilerini blok grafik olarak göstermesidir. Peki bu grafik nasıl çiziliyor?
Temel Mantık:
Her saniye bir ölçüm alıyoruz ve bu değerleri bir deque (çift uçlu kuyruk) içinde saklıyoruz. deque’nin maxlen özelliği sayesinde en eski değer otomatik olarak siliniyor ve hep son 50 saniye gösteriliyor.
from collections import deque
dl_gecmis = deque(maxlen=50)
Grafik Çizimi:
Her değer için maksimum değere göre bir oran hesaplıyoruz. Bu oranı grafik yüksekliğiyle çarparak kaç blok çizileceğini buluyoruz:
def grafik_ciz(stdscr, baslangic_row, baslangic_col, veriler, genislik, yukseklik, renk):
max_val = max(veriler) if max(veriler) > 0 else 1
for x, val in enumerate(list(veriler)[-genislik:]):
bar = int((val / max_val) * yukseklik)
for y in range(yukseklik):
ekran_row = baslangic_row + (yukseklik - 1 - y)
ekran_col = baslangic_col + x
if y < bar:
stdscr.addstr(ekran_row, ekran_col, "▌", curses.color_pair(renk))
else:
stdscr.addstr(ekran_row, ekran_col, " ")
Y Ekseni Etiketleri:
Grafiğin soluna maksimum değere göre oransal etiketler ekliyoruz. Bu sayede grafiği okumak çok daha kolay hale geliyor.
X Ekseni:
Grafiğin altına “└───Simdi▶” şeklinde bir eksen çiziyoruz. Bu, grafiğin soldan sağa doğru okunduğunu ve en sağdaki değerin şu anki değer olduğunu gösteriyor.
- RENK SİSTEMİ VE UYARI MEKANİZMASI
Aracımız akıllı bir renk sistemi kullanıyor. Bu sistem, hızın ne kadar yüksek olduğuna göre otomatik olarak renk değiştiriyor:
Download/Upload Hızı için Renk Sistemi:
- Yeşil (Normal): 0 – 1 Mb/s arası — Düşük trafik, her şey normal
- Sarı (Dikkat): 1 – 10 Mb/s arası — Yüksek trafik, dikkat edin
- Kırmızı (Kritik): 10 Mb/s üzeri — Çok yüksek trafik
Bu renk kodlaması sayesinde tek bakışta sistemin durumunu anlayabilirsiniz. Kırmızı gördüğünüzde bir şeylerin yoğun veri indirdiğini veya yüklediğini anlarsınız.
Renk kodu Python’da şöyle uygulanıyor:
dl_renk = 2 if dl < 110241024 else (3 if dl < 1010241024 else 4)
Bu tek satır kod şunu yapıyor:
- 1 MB/s’den küçükse renk 2 (Yeşil)
- 1-10 MB/s arasıysa renk 3 (Sarı)
- 10 MB/s’den büyükse renk 4 (Kırmızı)
- KODUN TAMAMI VE AÇIKLAMASI
İşte aracın tam kaynak kodu. Bu kodu download_upload.py adıyla kaydedin:
import psutil
import time
import curses
from datetime import datetime
from collections import deque
GECMIS = 50
def bytes_to_human(n):
if n < 1024:
return f"{n:.0f} b"
elif n < 1024 * 1024:
return f"{n/1024:.1f} Kb"
elif n < 1024 * 1024 * 1024:
return f"{n/1024/1024:.2f} Mb"
else:
return f"{n/1024/1024/1024:.2f} Gb"
def hiz_cubugu(val, max_val, genislik=20):
if max_val == 0:
dolu = 0
else:
dolu = int((val / max_val) * genislik)
dolu = min(dolu, genislik)
return "█" * dolu + "░" * (genislik - dolu)
def grafik_ciz(stdscr, baslangic_row, baslangic_col, veriler, genislik, yukseklik, renk):
if not veriler:
return
max_val = max(veriler) if max(veriler) > 0 else 1
satirlar = list(veriler)[-genislik:]
for x, val in enumerate(satirlar):
bar = int((val / max_val) * yukseklik)
for y in range(yukseklik):
ekran_row = baslangic_row + (yukseklik - 1 - y)
ekran_col = baslangic_col + x
try:
if y < bar:
stdscr.addstr(ekran_row, ekran_col, "▌", curses.color_pair(renk) | curses.A_BOLD)
else:
stdscr.addstr(ekran_row, ekran_col, " ", curses.color_pair(5))
except:
pass
def draw(stdscr):
curses.start_color()
curses.use_default_colors()
curses.init_pair(1, curses.COLOR_CYAN, -1)
curses.init_pair(2, curses.COLOR_GREEN, -1)
curses.init_pair(3, curses.COLOR_YELLOW, -1)
curses.init_pair(4, curses.COLOR_RED, -1)
curses.init_pair(5, curses.COLOR_WHITE, -1)
curses.init_pair(6, curses.COLOR_MAGENTA, -1)
curses.init_pair(7, curses.COLOR_BLUE, -1)
curses.curs_set(0)
stdscr.nodelay(True)
dl_gecmis = deque(maxlen=GECMIS)
ul_gecmis = deque(maxlen=GECMIS)
toplam_dl = 0
toplam_ul = 0
max_dl = 1
max_ul = 1
baslangic = time.time()
net1 = psutil.net_io_counters()
while True:
time.sleep(1)
net2 = psutil.net_io_counters()
dl = net2.bytes_recv - net1.bytes_recv
ul = net2.bytes_sent - net1.bytes_sent
net1 = net2
dl_gecmis.append(dl)
ul_gecmis.append(ul)
toplam_dl += dl
toplam_ul += ul
if dl > max_dl: max_dl = dl
if ul > max_ul: max_ul = ul
gecen = int(time.time() - baslangic)
ort_dl = toplam_dl // max(1, gecen)
ort_ul = toplam_ul // max(1, gecen)
stdscr.erase()
h, w = stdscr.getmaxyx()
row = 0
def yaz(metin, renk=5, bold=False, col=0):
nonlocal row
if row >= h - 1:
return
attr = curses.color_pair(renk)
if bold:
attr |= curses.A_BOLD
try:
stdscr.addstr(row, col, str(metin)[:w-1-col], attr)
except:
pass
row += 1
def bos():
yaz("")
def baslik_cizgi():
yaz("╔" + "═" * (min(w-2, 76)) + "╗", 1, bold=True)
def alt_cizgi():
yaz("╚" + "═" * (min(w-2, 76)) + "╝", 1, bold=True)
def orta_cizgi():
yaz("╠" + "═" * (min(w-2, 76)) + "╣", 1, bold=True)
def ince_cizgi():
yaz(" " + "─" * (min(w-4, 74)), 1)
# ══ BASLIK ══
baslik_cizgi()
baslik = f" ▶ DOWNLOAD / UPLOAD IZLEYICI ◀ {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}"
yaz(baslik, 1, bold=True)
orta_cizgi()
# ══ ANLIK HIZ ══
dl_renk = 2 if dl < 1*1024*1024 else (3 if dl < 10*1024*1024 else 4)
ul_renk = 2 if ul < 1*1024*1024 else (3 if ul < 10*1024*1024 else 4)
yaz(f" 📥 DOWNLOAD {bytes_to_human(dl):>10}/s [{hiz_cubugu(dl, max_dl, 25)}] Maks: {bytes_to_human(max_dl)}/s", dl_renk, bold=True)
yaz(f" 📤 UPLOAD {bytes_to_human(ul):>10}/s [{hiz_cubugu(ul, max_ul, 25)}] Maks: {bytes_to_human(max_ul)}/s", ul_renk, bold=True)
ince_cizgi()
# ══ ISTATISTIK ══
dakika = gecen // 60
saniye = gecen % 60
yaz(f" ⏱ Calisma Suresi : {dakika} dakika {saniye} saniye", 5)
yaz(f" ⬇ Toplam Alinan : {bytes_to_human(toplam_dl)}", 2)
yaz(f" ⬆ Toplam Gonderilen : {bytes_to_human(toplam_ul)}", 3)
yaz(f" ∅ Ort. Download : {bytes_to_human(ort_dl)}/s", 2)
yaz(f" ∅ Ort. Upload : {bytes_to_human(ort_ul)}/s", 3)
orta_cizgi()
# ══ GRAFiKLER ══
grafik_y = 8
grafik_x = min(GECMIS, w - 30)
sol_bosluk = 4
# Download grafigi baslik
yaz(f" 📊 DOWNLOAD GRAFiGi (Son {grafik_x} saniye)", 2, bold=True)
# Y ekseni etiketleri + grafik
dl_grafik_row = row
for i in range(grafik_y):
try:
oran = 1 - (i / (grafik_y - 1))
etiket = bytes_to_human(max_dl * oran)
stdscr.addstr(row + i, 0, f"{etiket:>10}", curses.color_pair(2))
except:
pass
grafik_ciz(stdscr, dl_grafik_row, sol_bosluk + 10, dl_gecmis, grafik_x, grafik_y, 2)
row += grafik_y
# X ekseni
try:
stdscr.addstr(row, sol_bosluk + 10, "└" + "─" * grafik_x, curses.color_pair(1))
stdscr.addstr(row, sol_bosluk + 10 + grafik_x - 6, "Simdi▶", curses.color_pair(1))
except:
pass
row += 1
bos()
# Upload grafigi baslik
yaz(f" 📊 UPLOAD GRAFiGi (Son {grafik_x} saniye)", 3, bold=True)
ul_grafik_row = row
for i in range(grafik_y):
try:
oran = 1 - (i / (grafik_y - 1))
etiket = bytes_to_human(max_ul * oran)
stdscr.addstr(row + i, 0, f"{etiket:>10}", curses.color_pair(3))
except:
pass
grafik_ciz(stdscr, ul_grafik_row, sol_bosluk + 10, ul_gecmis, grafik_x, grafik_y, 3)
row += grafik_y
try:
stdscr.addstr(row, sol_bosluk + 10, "└" + "─" * grafik_x, curses.color_pair(1))
stdscr.addstr(row, sol_bosluk + 10 + grafik_x - 6, "Simdi▶", curses.color_pair(1))
except:
pass
row += 1
# Alt bilgi
bos()
alt_cizgi()
yaz(" [Q] Cikis | Her saniye guncellenir | Yesil=Normal Sari=Yuksek Kirmizi=Cok Yuksek", 3)
alt_cizgi()
stdscr.refresh()
key = stdscr.getch()
if key in [ord('q'), ord('Q')]:
break
def main():
try:
curses.wrapper(draw)
except KeyboardInterrupt:
pass
print("\nKapatildi.")
if __name__ == "__main__":
main()
- KODUN BÖLÜM BÖLÜM AÇIKLAMASI
- bytes_to_human() fonksiyonu
- Ham byte değerini okunabilir hale çevirir
- 1024’ten küçükse “b” (bit), 1024’ten büyükse “Kb”, 1 milyondan büyükse “Mb” olarak gösterir
- Örnek: 1.572.864 → 1.50 Mb
- hiz_cubugu() fonksiyonu
- Anlık hızı maksimum hıza oranlar ve dolum çubuğu oluşturur
- Dolup kısım için █ karakteri, boş kısım için ░ karakteri kullanır
- Örnek çıktı: [████████░░░░░░░░░░░░░░░░░]
- grafik_ciz() fonksiyonu
- Son 50 saniyelik veriyi dikey blok grafik olarak çizer
- Her değer için maksimuma göre oran hesaplar
- ▌ karakteri ile ince ve şık bloklar oluşturur
- Ekran sınırlarını aşmamak için try/except kullanır
- draw() fonksiyonu
- Ana döngüyü içerir, her saniye çalışır
- Renk çiftlerini tanımlar (yeşil, sarı, kırmızı, cyan, magenta)
- Net io counters ile anlık hız ölçer
- deque yapısıyla son 50 saniyeyi hafızada tutar
- Toplam, ortalama ve maksimum değerleri hesaplar
- Ekranı erase() ile temizler ve yeniden çizer
- main() fonksiyonu
- curses.wrapper() ile programı güvenli başlatır
- Ctrl+C veya Q tuşuyla düzgün kapatmayı sağlar
- PROGRAMI ÇALIŞTIRMA VE KULLANIM
Kurulum ve çalıştırma adımları:
- Python’u kurun — python.org’dan indirin, PATH seçeneğini işaretleyin
- Kütüphaneleri kurun:
- python -m pip install psutil windows-curses
- Kodu kaydedin — download_upload.py olarak kaydedin
- Çalıştırın:
- CMD veya PowerShell’i yönetici olarak açın
- python download_upload.py yazın
- Çıkmak için Q tuşuna basın
Ekranda Neler Görürsünüz?
Üst bölüm — Başlık ve tarih/saat bilgisi
İkinci bölüm — Anlık download ve upload hızları + dolum çubuğu
Üçüncü bölüm — İstatistikler (toplam, ortalama, maksimum, süre)
Dördüncü bölüm — Download blok grafiği (yeşil, Y ve X ekseniyle)
Beşinci bölüm — Upload blok grafiği (sarı, Y ve X ekseniyle)
Alt bölüm — Kısayol bilgisi ve renk kılavuzu
- SIK KARŞILAŞILAN SORUNLAR VE ÇÖZÜMLERİ
- “ModuleNotFoundError: No module named ‘_curses'” hatası
- windows-curses paketi kurulmamış veya Python sürümüyle uyumsuz
- Çözüm: python -m pip install windows-curses komutunu çalıştırın
- Hâlâ olmazsa Python’u güncelleyin
- “pip tanınmıyor” hatası
- Python PATH’e eklenmemiş
- Çözüm: pip yerine python -m pip kullanın
- Ya da Python’u kaldırıp “Add to PATH” seçeneğiyle yeniden kurun
- Ekran bozuk görünüyor veya karakterler yanlış
- Terminal penceresi çok küçük olabilir
- Çözüm: Terminal penceresini büyütün veya tam ekran yapın
- Yazı tipini “Consolas” veya “Courier New” olarak değiştirin
- Hız her zaman 0 gösteriyor
- Ağ arayüzü yanlış seçilmiş olabilir
- Çözüm: psutil.net_io_counters(pernic=True) ile tüm arayüzleri listeleyin
- Program çok yavaş veya donuyor
- Nadiren gerçekleşir ama psutil bazen yavaş yanıt verebilir
- Çözüm: time.sleep(1) değerini 2’ye çıkarın
- GELİŞTİRME FİKİRLERİ
Bu aracı daha da güçlü hale getirmek için şu özellikler eklenebilir:
- Hız alarmı: Belirli bir hızın üzerine çıkıldığında sesli veya görsel uyarı
- Log dosyası: Tüm hız verilerini CSV dosyasına kaydetme, Excel’de analiz
- Ağ arayüzü seçimi: Ethernet veya Wi-Fi’yi ayrı ayrı izleme
- Program bazlı izleme: Hangi programın ne kadar bant genişliği kullandığını gösterme
- Günlük rapor: Gün sonunda toplam kullanımı e-posta ile gönderme
- Web arayüzü: Flask ile tarayıcıdan erişilebilen grafiksel arayüz
- Disk hızı: İnternet hızına ek olarak disk okuma/yazma hızını da gösterme
- Ping izleme: Ağ gecikmesini (ping) de ölçüp gösterme
- Bildirim: Windows bildirim sistemi ile uyarı gönderme
- Çoklu grafik: Download ve upload’ı aynı grafikte farklı renklerle gösterme
SONUÇ
Python ile kendi download/upload izleme aracınızı yazmak hem eğlenceli hem de öğreticidir. Bu proje sayesinde:
- psutil ile sistem kaynaklarını nasıl okuyacağınızı öğrendiniz
- curses ile terminal tabanlı arayüz nasıl oluşturulur gördünüz
- Gerçek zamanlı veri görselleştirmenin temellerini kavradınız
- Renk sistemi ve uyarı mekanizması nasıl tasarlanır öğrendiniz
- deque ile kayan pencere (sliding window) mantığını anladınız
Bu araç, sadece bir başlangıç noktasıdır. Kendi ihtiyaçlarınıza göre özelleştirebilir, yeni özellikler ekleyebilir ve tamamen kendinize özgü bir sistem izleme aracı haline getirebilirsiniz.
Kodu indirin, çalıştırın ve internetinizin gerçek yüzünü görün. Belki de arka planda fark etmediğiniz bir şeyler olduğunu keşfedeceksiniz.
İyi kodlamalar!