Skip to content

Commit

Permalink
Merge f63aff2 into fcfd7b2
Browse files Browse the repository at this point in the history
  • Loading branch information
max0xff committed Nov 13, 2017
2 parents fcfd7b2 + f63aff2 commit 697befd
Show file tree
Hide file tree
Showing 4 changed files with 42,833 additions and 4 deletions.
9 changes: 9 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@ file (see example above) with `har_data=har_data`::
# prints 733488
# We could do this with 'css', 'js', 'html', 'audio', or 'video'

# Get the transferred sizes (works only with HAR files, generated with Chrome)
har_page.page_size_trans
har_page.image_size_trans
har_page.css_size_trans
har_page.text_size_trans
har_page.js_size_trans
har_page.audio_size_trans
har_page.video_size_trans


MultiHarParser
++++++++++++++
Expand Down
81 changes: 77 additions & 4 deletions haralyzer/assets.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,16 @@ def _get_asset_files(self, asset_type):
"""
return self.filter_entries(content_type=self.asset_types[asset_type])

def _get_asset_size_trans(self, asset_type):
"""
Helper function to dynamically create *_size properties.
"""
if asset_type == 'page':
assets = self.entries
else:
assets = getattr(self, '{0}_files'.format(asset_type), None)
return self.get_total_size_trans(assets)

def _get_asset_size(self, asset_type):
"""
Helper function to dynamically create *_size properties.
Expand Down Expand Up @@ -371,6 +381,35 @@ def get_total_size(self, entries):
size += entry['response']['bodySize']
return size

def get_total_size_content(self, entries):
"""
Returns the total size of a collection of entries - uncompressed.
NOTE: use with har file generated with chrome-har-capturer
NOTE: not used at the moment
:param entries: ``list`` of entries to calculate the total size of.
"""
size = 0
for entry in entries:
if entry['response']['content']['size'] > 0:
size += entry['response']['content']['size']
return size

def get_total_size_trans(self, entries):
"""
Returns the total size of a collection of entries - transferred.
NOTE: use with har file generated with chrome-har-capturer
:param entries: ``list`` of entries to calculate the total size of.
"""
size = 0
for entry in entries:
if entry['response']['_transferSize'] > 0:
size += entry['response']['_transferSize']
return size

# BEGIN PROPERTIES #

@cached_property
Expand Down Expand Up @@ -404,11 +443,17 @@ def time_to_first_byte(self):
"""
Time to first byte of the page request in ms
"""
initial_entry = self.entries[0]
ttfb = 0
for k, v in iteritems(initial_entry['timings']):
if k != 'receive':
ttfb += v
for entry in self.entries:
if entry['response']['status'] == 200:
for k, v in iteritems(entry['timings']):
if k != 'receive':
if v > 0:
ttfb += v
break
else:
ttfb += entry['time']

return ttfb

@cached_property
Expand Down Expand Up @@ -496,6 +541,34 @@ def audio_size(self):
def video_size(self):
return self._get_asset_size('video')

@cached_property
def page_size_trans(self):
return self._get_asset_size_trans('page')

@cached_property
def image_size_trans(self):
return self._get_asset_size_trans('image')

@cached_property
def css_size_trans(self):
return self._get_asset_size_trans('css')

@cached_property
def text_size_trans(self):
return self._get_asset_size_trans('text')

@cached_property
def js_size_trans(self):
return self._get_asset_size_trans('js')

@cached_property
def audio_size_trans(self):
return self._get_asset_size_trans('audio')

@cached_property
def video_size_trans(self):
return self._get_asset_size_trans('video')

@cached_property
def initial_load_time(self):
return self._get_asset_load('initial')
Expand Down

0 comments on commit 697befd

Please sign in to comment.