diff --git a/.gitignore b/.gitignore index 5bbbf22..d545316 100644 --- a/.gitignore +++ b/.gitignore @@ -141,3 +141,4 @@ speeds.txt test3.py test4.py speeds.txt +*.png diff --git a/config/config.yaml b/config/config.yaml index 7ecc3f4..499400c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,5 +1,5 @@ database_migrate: False -output_image_path: /var/www/downloads/speedgraph.png +output_image_path: /var/www/downloads/speedgraph_{}.png output_txt_path: /var/www/downloads/speeds.txt ros_dynamic_speed: True ros_ip: 192.168.88.1 diff --git a/speeds.txt b/speeds.txt index 0962f16..20aa2c8 100644 --- a/speeds.txt +++ b/speeds.txt @@ -1,4 +1,3 @@ Date: Down; Up; -2020-06-24 02:37:11.363969: 6.29 Mbps; 4.16 Mbps -2020-06-24 02:38:12.903694: 5.52 Mbps; 3.8 Mbps -2020-06-24 02:39:31.212599: 12.07 Mbps; 5.08 Mbps +2020-06-26 18:16:13.262120: None Mbps; None Mbps +2020-06-28 16:10:56.596781: 0.88 Mbps; 1.09 Mbps diff --git a/speedtester.py b/speedtester.py index 2dd573e..35b31f1 100644 --- a/speedtester.py +++ b/speedtester.py @@ -34,20 +34,89 @@ def gather_data(): dates.append(entry.date_created) return dates, downloads, uploads +import matplotlib +import matplotlib.pyplot as plt + +@catch_errors +def generate_plot_image(dates, downloads, uploads, name="speed", description="Speed Graph"): + log.debug("Genering image output for {}...".format(name)) + + + dates = matplotlib.dates.date2num(dates) + fig = plt.figure(figsize=(len(dates / 10), 3)) + plt.plot_date(dates, downloads, fmt="b-") + plt.ylabel(description + " (Mbps)") + plt.tight_layout() + plt.savefig(read_config()['output_image_path'].format(name)) @catch_errors -def generate_plot_image(dates, downloads, uploads): - log.debug("Genering image output...") - import matplotlib - import matplotlib.pyplot as plt +def generate_diff(dates, downloads, uploads): + dl = [] + up = [] + for i, date in enumerate(dates): + curr = downloads[i] if downloads[i] else 0 + prev = downloads[i-1] if downloads[i-1] and i > 0 else 0 + dl.append(curr - prev) + curr = downloads[i] if downloads[i] else 0 + prev = downloads[i - 1] if downloads[i - 1] and i > 0 else 0 + up.append(curr - prev) + generate_plot_image(dates, dl, up, "diff", "Difference Graph") - dates = matplotlib.dates.date2num(dates) - fig = plt.figure(figsize=(12, 3)) - plt.plot_date(dates, downloads, fmt="b-") - plt.ylabel('Download Speed Mbps') + +def generate_updown_plot_simple(downloads, uploads, name, description): + fig = plt.figure(figsize=(10, 3)) + plt.plot(downloads, linestyle='dashed', color="red") + plt.plot(uploads, linestyle='dashed', color="green") + plt.ylabel(description + " (Mbps)") plt.tight_layout() - plt.savefig(read_config()['output_image_path']) + plt.savefig(read_config()['output_image_path'].format(name)) + +@catch_errors +def gather_week_median_data(dates, downloads, uploads): + log.debug("Gather week median data...") + dl = [] + up = [] + + for hour in range(24): + dl.append([]) + up.append([]) + + for i, date in enumerate(dates): + hour = date.hour + dl[hour].append(downloads[i] if downloads[i] else 0) + up[hour].append(uploads[i] if downloads[i] else 0) + + for i, hour in enumerate(dl): + dl[i] = median(dl[i]) if len(dl[i]) > 0 else 0 + + for i, hour in enumerate(up): + up[i] = median(up[i]) if len(up[i]) > 0 else 0 + + return dl, up + +@catch_errors +def generate_week_median(dates, downloads, uploads): + dl, up = gather_week_median_data(dates, downloads, uploads) + + generate_updown_plot_simple(dl, up, "week_median", "Week median") + +@catch_errors +def generate_week_median_diff(dates, downloads, uploads): + dl, up = gather_week_median_data(dates, downloads, uploads) + + downs = [] + ups = [] + + for i, down in enumerate(dl): + if i > 0: + downs.append(dl[i]-dl[i-1]) + ups.append(up[i]-up[i-1]) + else: + downs.append(down) + ups.append(up[i]) + + generate_updown_plot_simple(downs, ups, "week_median_diff", "Week median diff") @catch_errors @@ -234,6 +303,12 @@ def generate_database_reports(): generate_plot_image(dates, downloads, uploads) + generate_week_median(dates, downloads, uploads) + + generate_week_median_diff(dates, downloads, uploads) + + generate_diff(dates, downloads, uploads) + import sys from netutils import test_intertnet_connection @@ -266,8 +341,6 @@ if __name__ == "__main__": try: log.debug("Test internet connection...") - # if not test_intertnet_connection(): - # no_internet() if config["ros_dynamic_speed"]: ros_fastrack_enable(True)