Skip to content

Commit

Permalink
feat<main.py>: enable multiple iterations and summary stats/graph of …
Browse files Browse the repository at this point in the history
…results
  • Loading branch information
williamjsobczak committed Feb 4, 2024
1 parent 169bf77 commit 0090f95
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 26 deletions.
91 changes: 65 additions & 26 deletions scripts/Internet Speed Checker/main.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,76 @@
# Internet Speed Checker

import speedtest
import time
import os
import matplotlib.pyplot as plt
import pandas as pd


def run_speed_test():

download_speeds = []
upload_speeds = []
ping_values = []

# Run the speedtest while the user wants to continue running iterations
while True:
print('Internet Speed Checker')

# Get the speed
s = speedtest.Speedtest()
s.get_best_server()
s.download()
s.upload()
results_dict = s.results.dict()

# Append speeds and ping
download_speeds.append(results_dict['download'] / 1024 / 1024)
upload_speeds.append(results_dict['upload'] / 1024 / 1024)
ping_values.append(results_dict['ping'])

# Print the results
print(f"Iteration {len(download_speeds)}:")
print(f" Download Speed: {download_speeds[-1]:.2f} Mbit/s")
print(f" Upload Speed: {upload_speeds[-1]:.2f} Mbit/s")
print(f" Ping: {ping_values[-1]:.2f} ms")
print(f" ISP: {results_dict['client']['isp']}")

def main():
# Ask the user whether they want to run another iteration
user_input = input("Do you want to run another iteration? (yes/no): ").lower()
if user_input != 'yes':
break

# Clear the screen
os.system('cls' if os.name == 'nt' else 'clear')
avg_download_speed = sum(download_speeds) / len(download_speeds)
avg_upload_speed = sum(upload_speeds) / len(upload_speeds)
avg_ping = sum(ping_values) / len(ping_values)

# Print the title
print('Internet Speed Checker')
# Print the current time
print(time.strftime('%H:%M:%S'))
print("Connecting to server...")
max_download_iteration = download_speeds.index(max(download_speeds)) + 1
max_upload_iteration = upload_speeds.index(max(upload_speeds)) + 1
min_ping_iteration = ping_values.index(min(ping_values)) + 1

# Get the speed
s = speedtest.Speedtest()
s.get_best_server()
s.download()
s.upload()
results_dict = s.results.dict()
# Storing results
df = pd.DataFrame({
'Iteration': [i for i in range(1, len(download_speeds) + 1)],
'Download Speed': download_speeds,
'Upload Speed': upload_speeds,
'Ping': ping_values
})

# Print the results
print(f"Download: {results_dict['download'] / 1024 / 1024:.2f} Mbit/s")
print(f"Upload: {results_dict['upload'] / 1024 / 1024:.2f} Mbit/s")
print(f"Ping: {results_dict['ping']:.2f} ms")
print(f"ISP: {results_dict['client']['isp']}")
print("\nSummary:")
print(f" Average Download Speed: {avg_download_speed:.2f} Mbit/s")
print(f" Average Upload Speed: {avg_upload_speed:.2f} Mbit/s")
print(f" Average Ping: {avg_ping:.2f} ms")
print(f" Iteration with Highest Download Speed: Iteration {max_download_iteration}")
print(f" Iteration with Highest Upload Speed: Iteration {max_upload_iteration}")
print(f" Iteration with Lowest Ping: Iteration {min_ping_iteration}")

# Wait 5 seconds
time.sleep(5)
# Plot the results with integer x-axis labels
plt.plot(df['Iteration'], df['Download Speed'], label='Download Speed')
plt.plot(df['Iteration'], df['Upload Speed'], label='Upload Speed')
plt.plot(df['Iteration'], df['Ping'], label='Ping')
plt.xlabel('Iteration Number')
plt.ylabel('Speed/Ping (Mbit/s)')
plt.title('Internet Speed Test Results')
plt.legend()
plt.show()


if __name__ == "__main__":
main()
run_speed_test()
1 change: 1 addition & 0 deletions scripts/Internet Speed Checker/requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
speedtest-cli==2.1.3
matplotlib

0 comments on commit 0090f95

Please sign in to comment.