this post was submitted on 12 Jun 2023
22 points (100.0% liked)

Lemmy

12576 readers
2 users here now

Everything about Lemmy; bugs, gripes, praises, and advocacy.

For discussion about the lemmy.ml instance, go to !meta@lemmy.ml.

founded 4 years ago
MODERATORS
22
submitted 1 year ago* (last edited 1 year ago) by Veritas@lemmy.ml to c/lemmy@lemmy.ml
 

Just save this in a file like sort_websites_latency.py and run it with python sort_websites_latency.py.

import time
import requests

TIME_BETWEEN_REQUESTS = 5 # 10 * 60 = 10 minutes
TIME_TOTAL = 60 # 8 * 60 * 60 = 8 hours

def get_latency(url):
    start = time.time()
    requests.get(url)
    end = time.time()
    return end - start

def measure_latencies(urls, duration):
    latencies = {}
    start_time = time.time()
    end_time = start_time + duration
    while time.time() < end_time:
        latencies = measure_latencies_for_urls(urls, latencies)
        time.sleep(TIME_BETWEEN_REQUESTS)
    return latencies

def measure_latencies_for_urls(urls, latencies):
    for url in urls:
        latency = get_latency(url)
        latencies = add_latency_to_url(url, latency, latencies)
    return latencies

def add_latency_to_url(url, latency, latencies):
    if url not in latencies:
        latencies[url] = []
    latencies[url].append(latency)
    return latencies

def average_latencies(latencies):
    averages = []
    for url, latency_list in latencies.items():
        avg_latency = sum(latency_list) / len(latency_list)
        averages.append((url, avg_latency))
    return averages

def sort_latencies(averages):
    return sorted(averages, key=lambda x: x[1])

def get_latency_report(urls, duration):
    latencies = measure_latencies(urls, duration)
    averages = average_latencies(latencies)
    return sort_latencies(averages)

# Example usage
urls = [
    'https://discuss.tchncs.de',
    'https://vlemmy.net',
    'https://lemmy.fmhy.ml',
    'https://sopuli.xyz',
    'https://lemmy.world',
    'https://sh.itjust.works',
    'https://beehaw.org',
    'https://feddit.de',
    'https://lemmygrad.ml',
    'https://lemmy.one',
    'https://lemmy.ca',
    'https://feddit.it',
    'https://lemmy.sdf.org',
    'https://bakchodi.org',
    'https://lemm.ee',
    'https://feddit.dk',
    'https://pawb.social',
    'https://burggit.moe',
    'https://lemmy.burger.rodeo',
    'https://lemmy.nz',
    'https://feddit.nl',
    'https://szmer.info',
    'https://infosec.pub',
    'https://slrpnk.net',
    'https://programming.dev',
    'https://feddit.uk',
    'https://aussie.zone',
    'https://mander.xyz',
    'https://exploding-heads.com',
    'https://reddthat.com',
    'https://lemmynsfw.com',
    'https://sub.wetshaving.social',
    'https://latte.isnot.coffee',
    'https://lemmy.pt',
    'https://monero.house',
    'https://partizle.com',
    'https://dormi.zone',
    'https://yiffit.net',
    'https://waveform.social',
    'https://lemmy.click',
    'https://lemmy.eus',
    'https://lemmy.film',
    'https://iusearchlinux.fyi',
    'https://dataterm.digital',
    'https://pathofexile-discuss.com',
    'https://lemmyrs.org',
    'https://lemmy.studio',
    'https://lemmy.perthchat.org',
    'https://lemmy.podycust.co.uk',
    'https://possumpat.io',
    'https://compuverse.uk',
    'https://lemmy.zip',
    'https://lemmy.villa-straylight.social',
    'https://lemmy.spacestation14.com',
    'https://terefere.eu',
]

report = get_latency_report(urls, TIME_TOTAL)
for url, avg_latency in report:
    print(f'{url}: {avg_latency:.2f} seconds')
you are viewing a single comment's thread
view the rest of the comments
[–] sparky@lemmy.pt 1 points 1 year ago

Is doing this actually necessary? In practice, it seems like latency is not going to significantly affect your usage of Lemmy. 50ms versus 300ms matters in gaming but not so much in a web browser. It feels like downtime and error rates are the actual data you want, but on the other hand, too many people hammering Lemmies to get this information would have the reverse effect of pushing some of them over load.