green-spider/rating/network_requests.py

58 lines
1.7 KiB
Python

"""
This rater evaluates the number of network requests made.
Currently no score is given. The plan is however to reward site that
use only few requests.
The rater uses Chrome performance log messages of type
'Network.requestWillBeSent'.
"""
from rating.abstract_rater import AbstractRater
class Rater(AbstractRater):
rating_type = 'number'
default_value = 0
depends_on_checks = ['load_in_browser']
max_score = 1.0
def __init__(self, check_results):
super().__init__(check_results)
def rate(self):
value = self.default_value
score = 0
num_requests_for_urls = []
for url in self.check_results['load_in_browser']:
num_requests = 0
if (self.check_results['load_in_browser'][url]['performance_log'] == [] or
self.check_results['load_in_browser'][url]['performance_log'] is None):
continue
for lentry in self.check_results['load_in_browser'][url]['performance_log']:
if lentry['message']['method'] == 'Network.requestWillBeSent':
num_requests += 1
num_requests_for_urls.append(num_requests)
# Calculate score based on the largest value found for a URL.
# See https://github.com/netzbegruenung/green-spider/issues/11#issuecomment-600307544
# for details.
if len(num_requests_for_urls) > 0:
value = max(num_requests_for_urls)
if value <= 28:
score = 1.0
elif value <= 38:
score = 0.5
return {
'type': self.rating_type,
'value': value,
'score': score,
'max_score': self.max_score,
}