Skip to content

feat(main.py): Add multiple iteration functionality and results summary and graph #495

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions scripts/Internet Speed Checker/Readme.md
Original file line number Diff line number Diff line change
@@ -5,9 +5,9 @@ This script will check your internet speed and with Download and Upload speed ,

## ```How to use```

1. Install the Speedtest Package using the following command:
1. Install dependencies (i.e., the Speedtest Package) using the following command:

`pip install speedtest`
'pip install -r requirements.txt'

Official Documentation: https://pypi.org/project/speedtest/

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()
2 changes: 2 additions & 0 deletions scripts/Internet Speed Checker/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
speedtest-cli==2.1.3
matplotlib