|
1 | 1 | import datetime |
2 | | -from flask import render_template, blueprints |
| 2 | +from flask import render_template, Blueprint |
3 | 3 | from flask_login import login_required, current_user |
4 | 4 | from src.config import app, db |
5 | | -from src.models import UserCardSettings, NetworkSpeedTestResult |
| 5 | +from src.models import UserDashboardSettings, NetworkSpeedTestResult |
6 | 6 | from src.utils import run_speedtest, render_template_from_file |
7 | 7 | from src.scripts.email_me import send_smpt_email |
8 | 8 |
|
9 | | -speedtest_bp = blueprints.Blueprint("speedtest", __name__) |
| 9 | +speedtest_bp = Blueprint("speedtest", __name__) |
10 | 10 |
|
11 | 11 | @app.route("/speedtest") |
12 | 12 | @login_required |
13 | 13 | def speedtest(): |
14 | | - settings = UserCardSettings.query.first() |
15 | | - SPEEDTEST_COOLDOWN_IN_HOURS = settings.speedtest_cooldown |
16 | | - NUMBER_OF_SPEEDTESTS = settings.number_of_speedtests |
17 | | - n_hour_ago = datetime.datetime.now() - datetime.timedelta( |
18 | | - hours=SPEEDTEST_COOLDOWN_IN_HOURS |
| 14 | + user_dashboard_settings = UserDashboardSettings.query.first() |
| 15 | + speedtest_cooldown_duration = user_dashboard_settings.speedtest_cooldown |
| 16 | + required_speedtest_count = user_dashboard_settings.number_of_speedtests |
| 17 | + |
| 18 | + cooldown_threshold_time = datetime.datetime.now() - datetime.timedelta( |
| 19 | + minutes=speedtest_cooldown_duration |
19 | 20 | ) |
20 | | - recent_results = NetworkSpeedTestResult.query.filter( |
21 | | - NetworkSpeedTestResult.timestamp > n_hour_ago |
| 21 | + |
| 22 | + recent_speedtest_results = NetworkSpeedTestResult.query.filter( |
| 23 | + NetworkSpeedTestResult.timestamp > cooldown_threshold_time |
22 | 24 | ).all() |
23 | 25 |
|
24 | | - if len(recent_results) < NUMBER_OF_SPEEDTESTS: |
25 | | - speedtest_result = run_speedtest() |
26 | | - if speedtest_result["status"] == "Error": |
| 26 | + if len(recent_speedtest_results) < required_speedtest_count: |
| 27 | + current_speedtest_result = run_speedtest() |
| 28 | + |
| 29 | + if current_speedtest_result["status"] == "Error": |
27 | 30 | return render_template( |
28 | | - "error/speedtest_error.html", error=speedtest_result["message"] |
| 31 | + "error/speedtest_error.html", error=current_speedtest_result["message"] |
29 | 32 | ) |
30 | 33 |
|
31 | | - if speedtest_result: |
32 | | - new_result = NetworkSpeedTestResult( |
33 | | - download_speed=speedtest_result["download_speed"], |
34 | | - upload_speed=speedtest_result["upload_speed"], |
35 | | - ping=speedtest_result["ping"], |
| 34 | + if current_speedtest_result: |
| 35 | + new_speedtest_record = NetworkSpeedTestResult( |
| 36 | + download_speed=current_speedtest_result["download_speed"], |
| 37 | + upload_speed=current_speedtest_result["upload_speed"], |
| 38 | + ping=current_speedtest_result["ping"], |
36 | 39 | ) |
37 | | - db.session.add(new_result) |
| 40 | + db.session.add(new_speedtest_record) |
38 | 41 | db.session.commit() |
| 42 | + |
39 | 43 | receiver_email = current_user.email |
40 | 44 | subject = "Speedtest Result" |
41 | | - context = {"speedtest_result": speedtest_result} |
| 45 | + context = {"speedtest_result": current_speedtest_result} |
42 | 46 | body = render_template_from_file("src/templates/email_templates/speedtest_result.html", **context) |
43 | 47 | send_smpt_email(receiver_email, subject, body, is_html=True) |
| 48 | + |
44 | 49 | return render_template( |
45 | 50 | "speedtest_result.html", |
46 | | - speedtest_result=speedtest_result, |
| 51 | + speedtest_result=current_speedtest_result, |
47 | 52 | source="Actual Test", |
48 | 53 | ) |
49 | 54 | else: |
50 | | - latest_result = recent_results[-1] |
51 | | - next_test_time = latest_result.timestamp + datetime.timedelta( |
52 | | - hours=SPEEDTEST_COOLDOWN_IN_HOURS |
| 55 | + latest_speedtest_record = recent_speedtest_results[-1] |
| 56 | + next_test_time = latest_speedtest_record.timestamp + datetime.timedelta( |
| 57 | + minutes=speedtest_cooldown_duration |
53 | 58 | ) |
54 | 59 | remaining_time_for_next_test = round( |
55 | 60 | (next_test_time - datetime.datetime.now()).total_seconds() / 60 |
56 | 61 | ) |
| 62 | + |
57 | 63 | return render_template( |
58 | 64 | "speedtest_result.html", |
59 | | - speedtest_result=latest_result, |
| 65 | + speedtest_result=latest_speedtest_record, |
60 | 66 | source="Database", |
61 | 67 | next_test_time=next_test_time, |
62 | 68 | remaining_time_for_next_test=remaining_time_for_next_test, |
63 | 69 | ) |
64 | | - |
65 | | - |
|
0 commit comments