blob: 7c009516ce13513c07310651d4b72cffc353112f [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import os
import os.path
import sys
import loading_model
import loading_trace
def SitesFromDir(directory):
"""Extract sites from a data directory.
Based on ./analyze.py fetch file name conventions. We assume each site
corresponds to two files, <site>.json and <site>.json.cold, and that no other
kind of file appears in the data directory.
Args:
directory: the directory to process.
Returns:
A list of sites as strings.
"""
files = set(os.listdir(directory))
assert files
sites = []
for f in files:
if f.endswith('.png'):
continue
assert f.endswith('.json') or f.endswith('.json.cold'), f
if f.endswith('.json'):
assert f + '.cold' in files
sites.append(f[:f.rfind('.json')])
elif f.endswith('.cold'):
assert f[:f.rfind('.cold')] in files
sites.sort()
return sites
def WarmGraph(datadir, site):
"""Return a loading model graph for the warm pull of site.
Based on ./analyze.py fetch file name conventions.
Args:
datadir: the directory containing site JSON data.
site: a site string.
Returns:
A loading model object.
"""
with file(os.path.join(datadir, site + '.json')) as f:
return loading_model.ResourceGraph(loading_trace.LoadingTrace.FromJsonDict(
json.load(f)))
def ColdGraph(datadir, site):
"""Return a loading model graph for the cold pull of site.
Based on ./analyze.py fetch file name conventions.
Args:
datadir: the directory containing site JSON data.
site: a site string.
Returns:
A loading model object.
"""
with file(os.path.join(datadir, site + '.json.cold')) as f:
return loading_model.ResourceGraph(loading_trace.LoadingTrace.FromJsonDict(
json.load(f)))