From 4de658f18dc1d6a35e2bc0b2e4685c36bf7eb843 Mon Sep 17 00:00:00 2001 From: Vincent Vatelot Date: Thu, 23 Jun 2022 14:44:06 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(report):=20Add=20global=20medi?= =?UTF-8?q?an=20stat=20(#145)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecoindex_cli/cli/app.py | 4 ++- ecoindex_cli/enums.py | 12 +++++-- ecoindex_cli/report/report.py | 47 +++++++++++++++++-------- ecoindex_cli/report/translations/en.yml | 5 +-- ecoindex_cli/report/translations/fr.yml | 1 + 5 files changed, 49 insertions(+), 20 deletions(-) diff --git a/ecoindex_cli/cli/app.py b/ecoindex_cli/cli/app.py index a554ed7..8468604 100644 --- a/ecoindex_cli/cli/app.py +++ b/ecoindex_cli/cli/app.py @@ -143,6 +143,8 @@ def analyze( with progressbar( length=len(urls) * len(window_sizes), label="Processing", + show_percent=True, + show_pos=True, ) as progress: error_found = False with ThreadPoolExecutor(max_workers=max_workers) as executor: @@ -159,7 +161,7 @@ def analyze( results.append(future.result()) except Exception as e: error_found = True - log.error(" -- " + url + " -- " + e.msg) + log.error(f" -- {url} -- {e.msg if hasattr(e, 'msg') else e}") progress.update(1) diff --git a/ecoindex_cli/enums.py b/ecoindex_cli/enums.py index c7948dd..85d0302 100644 --- a/ecoindex_cli/enums.py +++ b/ecoindex_cli/enums.py @@ -12,6 +12,12 @@ class Language(Enum): class Target(Enum): - nodes = 878 # Arbitrary value, must be evaluated later - requests = 69 # Based on https://almanac.httparchive.org/en/2021/page-weight#requests (Mobile) - size = 1923 # Based on https://almanac.httparchive.org/en/2021/page-weight#page-weight-by-the-numbers (Mobile) + nodes = 500 + requests = 27 + size = 900 + + +class GlobalMedian(Enum): + nodes = 693 + requests = 78 + size = 2410 diff --git a/ecoindex_cli/report/report.py b/ecoindex_cli/report/report.py index 7d91164..d15c81f 100644 --- a/ecoindex_cli/report/report.py +++ b/ecoindex_cli/report/report.py @@ -1,7 +1,7 @@ from datetime import datetime from pathlib import Path -from ecoindex_cli.enums import Language, Target +from ecoindex_cli.enums import GlobalMedian, Language, Target from ecoindex_cli.files import get_translations from jinja2 import Environment, FileSystemLoader from matplotlib import pyplot @@ -26,9 +26,21 @@ def __init__( self.translations = get_translations(language=language) def create_report(self) -> None: - self.create_histogram(property="requests", target=Target.requests.value) - self.create_histogram(property="size", target=Target.size.value) - self.create_histogram(property="nodes", target=Target.nodes.value) + self.create_histogram( + property="requests", + target=Target.requests.value, + global_median=GlobalMedian.requests.value, + ) + self.create_histogram( + property="size", + target=Target.size.value, + global_median=GlobalMedian.size.value, + ) + self.create_histogram( + property="nodes", + target=Target.nodes.value, + global_median=GlobalMedian.nodes.value, + ) self.create_grade_chart() self.create_report_file() @@ -42,6 +54,7 @@ def create_histogram( self, property: str, target: int, + global_median: int, ) -> None: median = round(self.dataframe[property].median()) self.prepare_graph(property=property) @@ -50,11 +63,17 @@ def create_histogram( median, color="blue", label=f"{self.translations['my_median']}: {median}" ) ax.axvline( - target, + x=target, color="red", - linestyle="--", + linestyle=":", label=f"{self.translations['target_median']}: {target}", ) + ax.axvline( + x=global_median, + color="black", + linestyle=":", + label=f"{self.translations['global_median']}: {global_median}", + ) pyplot.legend() fig = ax.get_figure() fig.savefig(f"{self.output_path}/{property}.svg") @@ -86,16 +105,16 @@ def create_grade_chart(self) -> None: fig = ax.get_figure() fig.savefig(f"{self.output_path}/grade.svg") - def get_property_comment(self, target: int, property: str) -> str: - if self.dataframe[property].median() <= target: + def get_property_comment(self, global_median: int, property: str) -> str: + if self.dataframe[property].median() <= global_median: return ( f"{self.translations['good_result']} {round(self.dataframe[property].median(), 2)} " - f"{self.translations['better_than']} {target}" + f"{self.translations['better_than']} {global_median}" ) return ( f"{self.translations['bad_result']} {round(self.dataframe[property].median(), 2)} " - f"{self.translations['worse_than']} {target}" + f"{self.translations['worse_than']} {global_median}" ) def create_report_file(self) -> None: @@ -120,7 +139,7 @@ def create_report_file(self) -> None: ["score", "size", "nodes", "requests", "ges", "water"] ] .describe(percentiles=[0.5]) - .loc[["median", "50%", "min", "max"]] + .loc[["mean", "50%", "min", "max"]] .round(2) .to_html(classes="table is-hoverable is-fullwidth is-bordered"), "best": self.dataframe.nlargest(n=10, columns="score")[ @@ -130,15 +149,15 @@ def create_report_file(self) -> None: ["url", "score", "size", "nodes", "requests"] ].to_html(classes="table is-hoverable is-fullwidth is-bordered"), "size_comment": self.get_property_comment( - target=Target.size.value, + global_median=GlobalMedian.size.value, property="size", ), "nodes_comment": self.get_property_comment( - target=Target.nodes.value, + global_median=GlobalMedian.nodes.value, property="nodes", ), "requests_comment": self.get_property_comment( - target=Target.requests.value, + global_median=GlobalMedian.requests.value, property="requests", ), } diff --git a/ecoindex_cli/report/translations/en.yml b/ecoindex_cli/report/translations/en.yml index dafc5f4..a109ecf 100644 --- a/ecoindex_cli/report/translations/en.yml +++ b/ecoindex_cli/report/translations/en.yml @@ -58,7 +58,8 @@ footer: Ecoindex_cli good_result: 😃 Your result is great! bad_result: 😞 You could do better on this... -better_than: is better than the target -worse_than: is worse than the target +better_than: is better than +worse_than: is worse than my_median: My median target_median: Target median +global_median: Global median diff --git a/ecoindex_cli/report/translations/fr.yml b/ecoindex_cli/report/translations/fr.yml index b34c8d0..1eb93ab 100644 --- a/ecoindex_cli/report/translations/fr.yml +++ b/ecoindex_cli/report/translations/fr.yml @@ -62,3 +62,4 @@ better_than: ", c'est mieux que" worse_than: ", c'est moins bien que" my_median: Ma valeur médiane target_median: Valeur médiane cible +global_median: Valeur médiane globale