Permalink
Browse files

merged

  • Loading branch information...
2 parents b041065 + 2a1ed44 commit dd90b008ba251f93be2302a15c174e492c3c486e @jeads jeads committed Sep 7, 2012
Showing with 3,153 additions and 1,043 deletions.
  1. +3 −3 datazilla/controller/admin/management/commands/base.py
  2. +0 −1 datazilla/controller/admin/management/commands/create_pushlog.py
  3. +109 −0 datazilla/controller/admin/management/commands/objectstore_error_report.py
  4. +1 −1 datazilla/controller/admin/management/commands/populate_summary_cache.py
  5. +1 −1 datazilla/controller/admin/management/commands/populate_test_collections.py
  6. +1 −1 datazilla/controller/admin/management/commands/process_objects.py
  7. +83 −0 datazilla/controller/admin/management/commands/pushlog_check.py
  8. +1 −1 datazilla/controller/admin/management/commands/run_metrics.py
  9. +4 −7 datazilla/controller/admin/management/commands/update_pushlog.py
  10. 0 datazilla/controller/admin/stats/__init__.py
  11. +68 −0 datazilla/controller/admin/stats/objectstore_stats.py
  12. +102 −0 datazilla/controller/admin/stats/perftest_stats.py
  13. +68 −0 datazilla/controller/admin/stats/pushlog_stats.py
  14. +6 −4 datazilla/model/base.py
  15. +12 −1 datazilla/model/sql/generic.json
  16. +9 −1 datazilla/model/sql/hgmozilla.json
  17. +43 −0 datazilla/model/sql/objectstore.json
  18. +128 −87 datazilla/model/sql/perftest.json
  19. +432 −725 datazilla/model/sql/template_schema/schema_perftest.json
  20. +255 −0 datazilla/model/stats.py
  21. +14 −0 datazilla/model/utils.py
  22. 0 datazilla/webapp/apps/datazilla/stats/__init__.py
  23. +54 −0 datazilla/webapp/apps/datazilla/stats/objectstore_views.py
  24. +54 −0 datazilla/webapp/apps/datazilla/stats/perftest_views.py
  25. +49 −0 datazilla/webapp/apps/datazilla/stats/pushlog_views.py
  26. +25 −0 datazilla/webapp/apps/datazilla/stats/urls.py
  27. +11 −0 datazilla/webapp/apps/datazilla/stats/urls_no_project.py
  28. +24 −0 datazilla/webapp/apps/datazilla/stats/view_utils.py
  29. +8 −4 datazilla/webapp/apps/datazilla/urls.py
  30. +6 −2 datazilla/webapp/urls.py
  31. +2 −1 docs/conf.py
  32. +1 −0 docs/index.rst
  33. +377 −0 docs/statistics.rst
  34. +4 −0 requirements/dev.txt
  35. +2 −1 requirements/pure.txt
  36. +2 −2 tests/commands/test_process_objects.py
  37. +0 −41 tests/commands/test_run_metrics.py
  38. +10 −8 tests/commands/test_update_pushlog.py
  39. +29 −1 tests/conftest.py
  40. 0 tests/controller/__init__.py
  41. 0 tests/controller/stats/__init__.py
  42. +161 −0 tests/controller/stats/test_objectstore_stats.py
  43. +230 −0 tests/controller/stats/test_perftest_stats.py
  44. +134 −0 tests/controller/stats/test_pushlog_stats.py
  45. +2 −2 tests/model/test_metrics_test_model.py
  46. +10 −10 tests/model/test_pushlog_model.py
  47. +0 −98 tests/pushlog_test.json
  48. +60 −0 tests/sample_data.py
  49. +110 −16 tests/sample_pushlog.py
  50. +5 −0 tests/utils.py
  51. 0 tests/webapp/stats/__init__.py
  52. +171 −0 tests/webapp/stats/test_objectstore_views.py
  53. +76 −0 tests/webapp/stats/test_perftest_views.py
  54. +103 −0 tests/webapp/stats/test_pushlog_views.py
  55. +8 −7 vendor/datasource-0.5-py2.6.egg-info/installed-files.txt
  56. +11 −7 vendor/datasource/bases/RDBSHub.py
  57. +2 −0 vendor/datasource/bases/SQLHub.py
  58. +2 −2 vendor/datasource/data_sources.json
  59. +18 −6 vendor/datasource/hubs/MySQL.py
  60. +23 −1 vendor/datasource/procs/mysql_procs/test.json
  61. +29 −1 vendor/datasource/t/TestMySQLHub.py
View
6 datazilla/controller/admin/management/commands/base.py
@@ -93,8 +93,8 @@ class ProjectBatchCommand(ProjectCommand):
def handle_noargs(self, **options):
"""Handle working on a single project or looping over several."""
-
project = options.get("project")
+ del options["project"]
cron_batches = options.get("cron_batches")
if options.get("view_batches"):
@@ -134,7 +134,7 @@ def handle_noargs(self, **options):
"Starting for projects: {0}\n".format(", ".join(projects)))
for p in projects:
- self.handle_project(p, options)
+ self.handle_project(p, **options)
self.stdout.write(
"Completed for {0} project(s).\n".format(len(projects)))
@@ -147,4 +147,4 @@ def handle_noargs(self, **options):
@abstractmethod
- def handle_project(self, project, options): pass
+ def handle_project(self, project, **options): pass
View
1 datazilla/controller/admin/management/commands/create_pushlog.py
@@ -1,7 +1,6 @@
from optparse import make_option
from django.core.management.base import BaseCommand
from datazilla.model import PushLogModel
-from django.conf import settings
class Command(BaseCommand):
"""Management command to create the pushlog database for known repos."""
View
109 datazilla/controller/admin/management/commands/objectstore_error_report.py
@@ -0,0 +1,109 @@
+import json
+from optparse import make_option
+
+from django.core.management.base import CommandError
+
+from datazilla.model import utils
+from datazilla.controller.admin.stats import objectstore_stats
+from base import ProjectCommand
+
+class Command(ProjectCommand):
+ """Display a report of which objectstore entries had an error."""
+
+ help = (
+ "Generate a report of all the JSON data that had an error "
+ "and could, therefore, not be processed."
+ )
+
+ option_list = ProjectCommand.option_list + (
+
+ make_option(
+ '-l',
+ '--list',
+ action='store_true',
+ dest='show_list',
+ default=False,
+ type=None,
+ help="Show a list of errors."
+ ),
+
+ make_option(
+ '--simple_count',
+ action='store_true',
+ dest='show_simple_count',
+ default=False,
+ type=None,
+ help="Show a simple count of error types."
+ ),
+
+ make_option(
+ '--detail_count',
+ action='store_true',
+ dest='show_detail_count',
+ default=False,
+ type=None,
+ help="Show a detailed count of error types broken down by name, "
+ "branch and version. This requires inspecting the JSON blob "
+ "and a chunking query, so it can take quite a while based on"
+ "the date range."
+ ),
+
+ make_option(
+ "--days_ago",
+ action="store",
+ dest="days_ago",
+ default=None,
+ help="The number of days prior to today to use as the starting"
+ "date range.",
+ ),
+
+ make_option(
+ "--numdays",
+ action="store",
+ dest="numdays",
+ default=None,
+ help="Number of days since days_ago to use as the end date for"
+ "the date range.",
+ ),
+
+ )
+
+
+ def handle_project(self, project, **options):
+ """Count errors of the project grouped by name, branch and version."""
+
+ self.stdout.write("Processing project {0}\n".format(project))
+
+ days_ago = options.get("days_ago")
+ if not days_ago:
+ raise CommandError(
+ "You must supply days_ago."
+ )
+ numdays = options.get("numdays")
+
+ range = utils.get_day_range(days_ago, numdays)
+ if options.get("show_list"):
+ err_list = objectstore_stats.get_error_list(
+ project,
+ range["start"],
+ range["stop"],
+ )
+ self.stdout.write(json.dumps(err_list, indent=4))
+
+ if options.get("show_simple_count"):
+ err_count = objectstore_stats.get_error_count(
+ project,
+ range["start"],
+ range["stop"],
+ )
+ self.stdout.write(json.dumps(err_count, indent=4))
+
+
+ if options.get("show_detail_count"):
+ err_count = objectstore_stats.get_error_detail_count(
+ project,
+ range["start"],
+ range["stop"],
+ )
+ ptm.disconnect()
+ self.stdout.write(json.dumps(err_count, indent=4))
View
2 datazilla/controller/admin/management/commands/populate_summary_cache.py
@@ -44,7 +44,7 @@ class Command(ProjectBatchCommand):
)
- def handle_project(self, project, options):
+ def handle_project(self, project, **options):
self.stdout.write("Processing project {0}\n".format(project))
if options.get("build"):
View
2 datazilla/controller/admin/management/commands/populate_test_collections.py
@@ -26,7 +26,7 @@ class Command(ProjectBatchCommand):
)
- def handle_project(self, project, options):
+ def handle_project(self, project, **options):
self.stdout.write("Processing project {0}\n".format(project))
if options.get("load"):
View
2 datazilla/controller/admin/management/commands/process_objects.py
@@ -41,7 +41,7 @@ class Command(ProjectBatchCommand):
)
- def handle_project(self, project, options):
+ def handle_project(self, project, **options):
self.stdout.write("Processing project {0}\n".format(project))
pushlog_project = options.get("pushlog_project", 'pushlog')
View
83 datazilla/controller/admin/management/commands/pushlog_check.py
@@ -0,0 +1,83 @@
+import json
+from optparse import make_option
+
+from django.core.management.base import CommandError
+
+from datazilla.model import PerformanceTestModel, PushLogModel, utils
+from datazilla.controller.admin.stats import pushlog_stats
+from base import ProjectCommand
+
+
+
+class Command(ProjectCommand):
+ """
+ Find pushlog entries without matching test results.
+
+ Compare perftest test_run.revision field with pushlog revision field
+ for a project. Anything in one and not in the other for the date range
+ will be reported.
+
+ """
+ help = (
+ "Check each pushlog entry for a project and report any changeset"
+ "that doesn't have test data for it."
+ )
+
+ option_list = ProjectCommand.option_list + (
+
+
+ make_option("--days_ago",
+ action="store",
+ dest="days_ago",
+ default=None,
+ help="The number of days prior to today to use as the starting"
+ "date range.",
+ ),
+
+ make_option("--numdays",
+ action="store",
+ dest="numdays",
+ default=None,
+ help="Number of days since days_ago to use as the end date for"
+ "the date range.",
+ ),
+
+ make_option("--branches",
+ action="store",
+ dest="branches",
+ default=None,
+ help="Comma separated list of branches to check. "
+ "Default to all branches.",
+ ),
+
+ )
+
+
+ def handle_project(self, project, **options):
+ """Report pushlogs not referenced with tests in the project."""
+
+ self.stdout.write("Processing project {0}\n".format(project))
+
+ days_ago = options.get("days_ago")
+ if not days_ago:
+ raise CommandError(
+ "You must supply days_ago."
+ )
+ numdays = options.get("numdays")
+ branches = options.get("branches")
+
+ range = utils.get_day_range(days_ago, numdays)
+ if branches:
+ branches = branches.split(",")
+ else:
+ branches = pushlog_stats.get_all_branches()
+
+
+ stats = pushlog_stats.get_not_referenced(
+ project,
+ range["start"],
+ range["stop"],
+ branches,
+ )
+ print json.dumps(stats, indent=4)
+ return
View
2 datazilla/controller/admin/management/commands/run_metrics.py
@@ -34,7 +34,7 @@ class Command(ProjectBatchCommand):
)
- def handle_project(self, project, options):
+ def handle_project(self, project, **options):
self.stdout.write("Processing project {0}\n".format(project))
View
11 datazilla/controller/admin/management/commands/update_pushlog.py
@@ -1,7 +1,7 @@
from optparse import make_option
from lockfile import FileLock, AlreadyLocked
-from django.core.management.base import BaseCommand
+from django.core.management.base import BaseCommand, CommandError
from datazilla.model import PushLogModel
@@ -73,19 +73,16 @@ def handle(self, *args, **options):
project = options.get("project")
if not repo_host:
- self.println("You must supply a host name for the repo pushlogs " +
+ raise CommandError("You must supply a host name for the repo pushlogs " +
"to store: --repo_host hostname")
- return
if not numdays:
- self.println("You must supply the number of days data.")
- return
+ raise CommandError("You must supply the number of days data.")
else:
try:
numdays = int(numdays)
except ValueError:
- self.println("numdays must be an integer.")
- return
+ raise CommandError("numdays must be an integer.")
lock = FileLock(self.LOCK_FILE)
try:
View
0 datazilla/controller/admin/stats/__init__.py
No changes.
View
68 datazilla/controller/admin/stats/objectstore_stats.py
@@ -0,0 +1,68 @@
+import json
+
+from datazilla.model.stats import PerformanceTestStatsModel
+
+
+def get_error_count(project, startdate, enddate):
+ """Return a count of all objectstore entries with error"""
+ ptm = PerformanceTestStatsModel(project)
+ err_counts = ptm.get_object_error_counts(startdate, enddate)
+ ptm.disconnect()
+
+ return err_counts
+
+
+def get_error_list(project, startdate, enddate):
+ """Return a list of all objectstore entries with errors in a date range"""
+ ptm = PerformanceTestStatsModel(project)
+ err_list = ptm.get_object_error_metadata(startdate, enddate)
+ ptm.disconnect()
+ return err_list
+
+
+def get_json_blob(project, id):
+ """Based on the ID passed in, return the JSON blob"""
+ ptm = PerformanceTestStatsModel(project)
+ blob = ptm.get_object_json_blob(id)
+ ptm.disconnect()
+ if blob:
+ return blob[0]["json_blob"]
+ else:
+ return None
+
+
+def get_error_detail_count(project, startdate, enddate):
+ """Return counts attempting to parse some of the bad JSON to extract details."""
+ ptm = PerformanceTestStatsModel(project)
+ err_data = ptm.get_parsed_object_error_data(startdate, enddate)
+ ptm.disconnect()
+
+ counts = {}
+ for item in err_data:
+ tb = item["test_build"]
+ counts[result_key(tb)] = counts.get(result_key(tb), 0) + 1
+ return counts
+
+
+def result_key(tb):
+ """Build a key based on the fields of tb."""
+ try:
+ key = "{0} - {1} - {2}".format(
+ tb["name"],
+ tb["branch"],
+ tb["version"],
+ )
+
+ except KeyError:
+ key = "unknown"
+
+ return key
+
+
+def get_db_size(project):
+ """Return the size of the objectstore database on disk in MB."""
+ ptm = PerformanceTestStatsModel(project)
+ size = ptm.get_db_size(source="objectstore")
+ ptm.disconnect()
+ return size
+
View
102 datazilla/controller/admin/stats/perftest_stats.py
@@ -0,0 +1,102 @@
+from django.core.exceptions import FieldError
+
+from datazilla.model.stats import PerformanceTestStatsModel
+from datazilla.model.base import PerformanceTestModel, PushLogModel
+from pushlog_stats import get_all_branches
+
+
+def get_ptsm(project):
+ """
+ Shortcut to return the PerformanceTestStatsModel.
+
+ Allows the unit tests to override this to give the test version of the
+ model.
+ """
+ return PerformanceTestStatsModel(project)
+
+
+def get_ptm(project):
+ """
+ Shortcut to return the PerformanceTestModel.
+
+ Allows the unit tests to override this to give the test version of the
+ model.
+ """
+ return PerformanceTestModel(project)
+
+
+def get_plm():
+ """
+ Hook to return a pushlog model.
+
+ Handy for tests to mock out.
+ """
+ return PushLogModel()
+
+
+def get_runs_by_branch(project, startdate, enddate):
+ """Return a list of test runs by branch in date range"""
+ ptsm = get_ptsm(project)
+ branches = [x["name"] for x in get_plm().get_all_branches()]
+ result = {}
+ for branch in branches:
+ test_runs = ptsm.get_run_lists_by_branch(startdate, enddate, branch)
+ if test_runs["count"] > 0:
+ result[branch] = test_runs
+
+ ptsm.disconnect()
+ return result
+
+
+def get_run_counts_by_branch(project, startdate, enddate):
+ """Return a count of test runs by branch in date range"""
+ ptsm = get_ptsm(project)
+ test_runs = ptsm.get_run_counts_by_branch(startdate, enddate)
+ ptsm.disconnect()
+
+ #now form the data the way we want it
+ result = {}
+ for tr in test_runs:
+ branch = result.setdefault(tr["branch"], {})
+ branch["count"] = tr.get("count")
+
+ return result
+
+
+def get_ref_data(project, table):
+ """Return a simple list of data from ``table`` for ``project``."""
+ ptm = get_ptm(project)
+ result = get_ref_data_method(ptm, table)()
+ ptm.disconnect()
+
+ return result
+
+
+def get_db_size(project):
+ """Return the size of the database on disk in megabytes"""
+ ptm = get_ptsm(project)
+ pt_size = ptm.get_db_size()
+ ptm.disconnect()
+
+ return pt_size
+
+
+def get_ref_data_method(ptm, table):
+ """Return the matching model method for the ``table``."""
+ methods = {
+ "machines": ptm.get_machines,
+ "operating_systems": ptm.get_operating_systems,
+ "options": ptm.get_options,
+ "tests": ptm.get_tests,
+ "pages": ptm.get_pages,
+ "products": ptm.get_products
+ }
+ try:
+ return methods[table]
+
+ except KeyError:
+ raise FieldError(
+ "Not a supported ref_data table. Must be in: {0}".format(
+ methods.keys()))
+
+
View
68 datazilla/controller/admin/stats/pushlog_stats.py
@@ -0,0 +1,68 @@
+
+from datazilla.model.stats import PushLogStatsModel, PerformanceTestStatsModel
+from datazilla.model.base import PushLogModel
+
+def get_plm():
+ return PushLogModel()
+
+
+def get_plsm():
+ return PushLogStatsModel()
+
+
+def get_not_referenced(project, startdate, enddate, branches=None):
+ """
+ Return a list of test runs by in pushlogs not in Datazilla
+
+ ``project`` The PerformanceTestModel project. Note: NOT the
+ PushLogModel project.
+ """
+
+ branches = branches or get_all_branches()
+
+ ptm = PerformanceTestStatsModel(project)
+ tr_set = ptm.get_distinct_test_run_revisions()
+ ptm.disconnect()
+
+ plsm = get_plsm()
+ pl_dict = plsm.get_pushlog_dict(startdate, enddate, branches)
+ plsm.disconnect()
+
+ # gather matching and non-matching sets
+ branch_wo_match = {}
+ branch_w_match = {}
+ for pl, data in pl_dict.iteritems():
+ rev_list = data["revisions"]
+
+ if not len(tr_set.intersection(set(rev_list))):
+ bucket = branch_wo_match
+ else:
+ bucket = branch_w_match
+
+ br_list = bucket.setdefault(data["branch_name"], {})
+ pushlog_list = br_list.setdefault("pushlogs", [])
+ pushlog_list.append({
+ "push_id": pl,
+ "revisions": rev_list,
+ })
+
+ return {
+ "with_matching_test_run": branch_w_match,
+ "without_matching_test_run": branch_wo_match,
+ }
+
+
+def get_all_branches():
+ """Return a list of all the branch names our pushlogs know about"""
+ plm = get_plm()
+ branches = [x["name"] for x in plm.get_all_branches()]
+ plm.disconnect()
+ return branches
+
+
+def get_db_size():
+ """Return the database size, on disk in MB"""
+ plsm = get_plsm()
+ size = plsm.get_db_size()
+ plsm.disconnect()
+ return size
View
10 datazilla/model/base.py
@@ -277,7 +277,7 @@ def store_pushlogs(self, repo_host, numdays, enddate=None, branch=None):
pushlog_dict = json.loads(json_data)
self._insert_branch_pushlogs(br["id"], pushlog_dict)
- self.branch_count = self.branch_count + 1
+ self.branch_count += 1
except ValueError as e:
self.println("--Skip branch {0}: push data not valid JSON: {1}".format(
@@ -686,6 +686,7 @@ def get_test_reference_data(self, cache_key_str='reference_data'):
return json_data
+
def cache_ref_data(self, cache_key_str='reference_data'):
#retrieve ref data
ref_data = dict(
@@ -713,6 +714,7 @@ def cache_default_project(self, cache_key_str='default_product'):
cache_key = self.get_project_cache_key(cache_key_str)
cache.set(cache_key, default_project)
+
def get_test_run_summary(self,
start,
end,
@@ -883,7 +885,7 @@ def set_test_collection_map(self, test_collection_id, product_id):
def store_test_data(self, json_data, error=None):
"""Write the JSON to the objectstore to be queued for processing."""
- date_loaded = int( time.time() )
+ date_loaded = utils.get_now_timestamp()
error_flag = "N" if error is None else "Y"
error_msg = error or ""
@@ -1163,7 +1165,7 @@ def _set_build_data(self, data, product_id):
# TODO: Need to get the build type into the json
'opt',
# TODO: need to get the build date into the json
- int(time.time()),
+ utils.get_now_timestamp(),
build['id']
],
debug_show=self.DEBUG
@@ -1237,7 +1239,7 @@ def _get_or_create_machine_id(self, data, os_id):
machine = data['test_machine']
# Insert the the machine name and timestamp if it doesn't exist
- date_added = int(time.time())
+ date_added = utils.get_now_timestamp()
self.sources["perftest"].dhub.execute(
proc='perftest.inserts.set_machine_ref_data',
placeholders=[
View
13 datazilla/model/sql/generic.json
@@ -2,9 +2,20 @@
"selects":{
"get_last_insert_id":{
- "sql":"SELECT LAST_INSERT_ID() AS 'id'",
+ "sql":"SELECT LAST_INSERT_ID() AS `id`",
"host":"master_host"
+ },
+
+ "get_db_size":{
+ "sql":"SELECT table_schema as db_name,
+ round(sum( data_length + index_length ) / 1024 / 1024, 2) as size_mb
+ FROM information_schema.TABLES
+ WHERE TABLE_SCHEMA like ?
+ GROUP BY TABLE_SCHEMA
+ ",
+
+ "host":"read_host"
}
}
}
View
10 datazilla/model/sql/hgmozilla.json
@@ -25,13 +25,21 @@
"host":"master_host"
},
"get_pushlog":{
- "sql":"SELECT * FROM pushlogs where push_id = ?",
+ "sql":"SELECT * FROM pushlogs WHERE push_id = ?",
"host":"master_host"
},
"get_all_changesets":{
"sql":"SELECT * FROM changesets",
"host":"master_host"
},
+ "get_changeset_nodes_since_date":{
+ "sql":"SELECT cs.node, pl.date, pl.push_id, br.name as 'branch_name'
+ FROM changesets as cs
+ LEFT JOIN pushlogs as pl ON cs.pushlog_id = pl.id
+ LEFT JOIN branches as br ON pl.branch_id = br.id
+ WHERE pl.date > ? AND pl.date < ? AND br.name IN (REP0)",
+ "host":"master_host"
+ },
"get_changesets":{
"sql":"SELECT * FROM changesets where pushlog_id = ?",
"host":"master_host"
View
43 datazilla/model/sql/objectstore.json
@@ -34,6 +34,49 @@
LIMIT ?",
"host":"master_host"
+ },
+
+ "get_all_errors":{
+
+ "sql":"SELECT `json_blob`, `id`
+ FROM `objectstore`
+ WHERE `error_flag` = 'Y'
+ AND date_loaded BETWEEN ? AND ?",
+
+ "host":"read_host"
+ },
+
+ "get_error_metadata":{
+
+ "sql":"SELECT `id`, test_run_id, date_loaded, processed_flag, error_msg, worker_id
+ FROM `objectstore`
+ WHERE `error_flag` = 'Y'
+ AND date_loaded BETWEEN ? AND ?",
+
+ "host":"read_host"
+ },
+
+ "get_json_blob":{
+
+ "sql":"SELECT `json_blob` FROM `objectstore` WHERE `id` = ?",
+
+ "host":"read_host"
+ },
+
+ "get_error_counts":{
+
+ "sql":"SELECT
+ (CASE
+ WHEN error_msg LIKE 'Malformed JSON%'
+ THEN 'Malformed JSON'
+ ELSE 'Other'
+ END) AS message, count(id) AS count
+ FROM `objectstore`
+ WHERE `error_flag` = 'Y'
+ AND date_loaded BETWEEN REP0 AND REP1
+ GROUP BY message",
+
+ "host":"read_host"
}
},
View
215 datazilla/model/sql/perftest.json
@@ -1,8 +1,8 @@
{
- "views":{
- "test_runs":{
+ "views":{
+ "test_runs":{
- "sql":"SELECT tr.id AS 'test_run_id',
+ "sql":"SELECT tr.id AS 'test_run_id',
tr.build_id,
tr.revision,
tr.date_run,
@@ -26,12 +26,12 @@
ORDER BY tr.id DESC
LIMIT 1000",
- "host":"read_host"
+ "host":"read_host"
- },
- "test_run":{
+ },
+ "test_run":{
- "sql":"SELECT tr.id AS 'test_run_id',
+ "sql":"SELECT tr.id AS 'test_run_id',
tr.build_id,
tr.revision,
tr.date_run,
@@ -55,12 +55,12 @@
ORDER BY tr.id DESC
LIMIT 1000",
- "host":"read_host"
+ "host":"read_host"
- },
- "test_value":{
+ },
+ "test_value":{
- "sql":"SELECT tv.test_run_id,
+ "sql":"SELECT tv.test_run_id,
tv.run_id,
p.url,
v.name,
@@ -341,7 +341,6 @@
"host":"read_host"
},
-
"get_all_test_runs":{
"sql":"SELECT tr.id AS 'test_run_id',
@@ -364,6 +363,47 @@
"host":"read_host"
},
+ "get_test_runs":{
+
+ "sql":"SELECT SQL_CALC_FOUND_ROWS
+ tr.revision, tr.date_run, tr.status,
+ p.branch, p.product, p.version
+ FROM test_run as tr
+ LEFT JOIN build as b ON tr.build_id = b.id
+ LEFT JOIN product as p ON b.product_id = p.id
+ WHERE tr.date_run BETWEEN ? AND ?
+ AND p.branch = ?
+ ORDER BY tr.date_run DESC
+ LIMIT 0, 80",
+
+ "host":"read_host"
+
+ },
+ "get_found_rows":{
+
+ "sql":"SELECT FOUND_ROWS()",
+
+ "host":"read_host"
+ },
+ "get_test_run_counts":{
+
+ "sql":"SELECT COUNT(tr.id) as count, p.branch
+ FROM test_run as tr
+ LEFT JOIN build as b ON tr.build_id = b.id
+ LEFT JOIN product as p ON b.product_id = p.id
+ WHERE tr.date_run BETWEEN ? AND ?
+ GROUP BY p.branch",
+
+ "host":"read_host"
+
+ },
+ "get_distinct_test_run_revisions":{
+
+ "sql":"SELECT distinct revision FROM test_run",
+
+ "host":"master_host"
+
+ },
"get_test_run_values":{
"sql":"SELECT tv.test_run_id,
@@ -386,12 +426,12 @@
WHERE tv.test_run_id = ?
ORDER BY p.url, tv.value ASC",
- "host":"read_host"
+ "host":"read_host"
- },
- "get_test_run_value_summary":{
+ },
+ "get_test_run_value_summary":{
- "sql":"SELECT tv.test_run_id,
+ "sql":"SELECT tv.test_run_id,
tv.page_id,
tv.run_id,
tr.revision,
@@ -417,10 +457,10 @@
"host":"read_host"
- },
- "get_page_values":{
+ },
+ "get_page_values":{
- "sql":"SELECT tv.id AS test_value_id,
+ "sql":"SELECT tv.id AS test_value_id,
tv.test_run_id,
tv.page_id,
tv.run_id,
@@ -443,10 +483,10 @@
"host":"read_host"
- },
- "get_product_test_os_map":{
+ },
+ "get_product_test_os_map":{
- "sql":"SELECT b.product_id, tr.test_id, m.operating_system_id
+ "sql":"SELECT b.product_id, tr.test_id, m.operating_system_id
FROM test_run AS tr
LEFT JOIN machine AS m ON tr.machine_id = m.id
LEFT JOIN build AS b ON tr.build_id = b.id
@@ -455,84 +495,84 @@
FROM product )
GROUP BY b.product_id, tr.test_id, m.operating_system_id",
- "host":"read_host"
- },
- "get_tests":{
+ "host":"read_host"
+ },
+ "get_tests":{
- "sql":"SELECT `id`, `name`, `version` FROM `test`",
+ "sql":"SELECT `id`, `name`, `version` FROM `test`",
- "host":"read_host"
+ "host":"read_host"
- },
- "get_operating_systems":{
+ },
+ "get_operating_systems":{
- "sql":"SELECT `id`, `name`, `version` FROM operating_system",
+ "sql":"SELECT `id`, `name`, `version` FROM operating_system",
- "host":"read_host"
- },
- "get_aux_data":{
+ "host":"read_host"
+ },
+ "get_aux_data":{
- "sql":"SELECT `id`, `test_id`, `name` FROM `aux_data`",
+ "sql":"SELECT `id`, `test_id`, `name` FROM `aux_data`",
- "host":"read_host"
- },
- "get_product_data":{
+ "host":"read_host"
+ },
+ "get_product_data":{
- "sql":"SELECT `id`, `product`, `branch`, `version`, `default_product` FROM `product`",
+ "sql":"SELECT `id`, `product`, `branch`, `version`, `default_product` FROM `product`",
- "host":"read_host"
- },
- "get_default_product":{
+ "host":"read_host"
+ },
+ "get_default_product":{
- "sql":"SELECT `id`, `product`, `branch`, `version`, `default_product`
+ "sql":"SELECT `id`, `product`, `branch`, `version`, `default_product`
FROM `product`
WHERE `default_product` = 1",
- "host":"read_host"
- },
- "get_machines":{
+ "host":"read_host"
+ },
+ "get_machines":{
- "sql":"SELECT `id`, `name` FROM `machine`",
+ "sql":"SELECT `id`, `name` FROM `machine`",
- "host":"read_host"
+ "host":"read_host"
- },
- "get_options":{
+ },
+ "get_options":{
- "sql":"SELECT `id`, `name` FROM `option`",
+ "sql":"SELECT `id`, `name` FROM `option`",
- "host":"read_host"
- },
- "get_aux_data":{
+ "host":"read_host"
+ },
+ "get_aux_data":{
- "sql":"SELECT `id`, `test_id`, `name` FROM `aux_data`",
+ "sql":"SELECT `id`, `test_id`, `name` FROM `aux_data`",
- "host":"read_host"
- },
- "get_pages":{
+ "host":"read_host"
+ },
+ "get_pages":{
- "sql":"SELECT `id`, `test_id`, `url` FROM `pages`",
+ "sql":"SELECT `id`, `test_id`, `url` FROM `pages`",
- "host":"read_host"
- },
- "get_summary_cache":{
+ "host":"read_host"
+ },
+ "get_summary_cache":{
- "sql":"SELECT `item_id`, `item_data`, `value`, `date`
+ "sql":"SELECT `item_id`, `item_data`, `value`, `date`
FROM `summary_cache`
WHERE `item_id` = ? AND `item_data` = ?",
- "host":"read_host"
- },
- "get_all_summary_cache_data":{
+ "host":"read_host"
+ },
+ "get_all_summary_cache_data":{
- "sql":"SELECT `item_id`, `item_data`, `value`, `date`
+ "sql":"SELECT `item_id`, `item_data`, `value`, `date`
FROM `summary_cache`",
- "host":"read_host"
- },
- "get_test_collections":{
+ "host":"read_host"
+ },
+ "get_test_collections":{
- "sql":"SELECT tc.id,
+ "sql":"SELECT tc.id,
tc.name,
tc.description,
tcm.test_id,
@@ -543,71 +583,72 @@
LEFT JOIN test AS t ON tcm.test_id = t.id
ORDER BY tc.name",
- "host":"read_host"
- },
- "get_build_id":{
+ "host":"read_host"
+ },
+ "get_build_id":{
"sql":"SELECT `id`
FROM `build`
WHERE `test_build_id` = ?",
"host":"read_host"
- },
- "get_test_id":{
+ },
+ "get_test_id":{
"sql":"SELECT `id`
FROM `test`
WHERE `name` = ? AND `version` = ?",
"host":"read_host"
- },
- "get_option_id":{
+ },
+ "get_option_id":{
"sql":"SELECT `id`
FROM `option`
WHERE `name` = ?",
"host":"read_host"
- },
- "get_os_id":{
+ },
+ "get_os_id":{
"sql":"SELECT `id`
FROM `operating_system`
WHERE `name` = ? AND `version` = ?",
"host":"read_host"
- },
- "get_product_id":{
+ },
+ "get_product_id":{
"sql":"SELECT `id`
FROM `product`
WHERE `product` = ? AND `branch` = ? AND `version` = ?",
"host":"read_host"
- },
- "get_machine_id":{
+ },
+ "get_machine_id":{
"sql":"SELECT `id`
FROM `machine`
WHERE `name` = ? AND `operating_system_id` = ?",
"host":"read_host"
- },
- "get_page_id":{
+ },
+ "get_page_id":{
"sql":"SELECT `id`
FROM `pages`
WHERE `test_id` = ? AND `url` = ?",
"host":"read_host"
- },
- "get_aux_data_id":{
+ },
+ "get_aux_data_id":{
"sql":"SELECT `id`
FROM `aux_data`
WHERE `test_id` = ? AND `name` = ?",
"host":"read_host"
+
},
"get_metric_collection":{
View
1,157 datazilla/model/sql/template_schema/schema_perftest.json
@@ -1,842 +1,549 @@
{
"results": {
"163.com": [
- "666.0",
- "587.0",
- "626.0"
- ],
+ 666.0,
+ 587.0,
+ 626.0
+ ],
"56.com": [
- "789.0",
- "705.0",
- "739.0"
- ],
+ 789.0,
+ 705.0,
+ 739.0
+ ],
"alibaba.com": [
- "103.0",
- "95.0",
- "105.0"
- ],
- "alipay.com": [
- "1704.0",
- "1054.0",
- "1097.0"
- ],
+ 103.0,
+ 95.0,
+ 105.0
+ ],
+ alipay.com: [
+ 1704.0,
+ 1054.0,
+ 1097.0
+ ],
"aljazeera.net": [
- "333.0",
- "334.0",
- "333.0"
- ],
+ 333.0,
+ 334.0,
+ 333.0
+ ],
"amazon.com": [
- "874.0",
- "745.0",
- "763.0"
- ],
+ 874.0,
+ 745.0,
+ 763.0
+ ],
"ameblo.jp": [
- "144.0",
- "123.0",
- "122.0"
- ],
+ 144.0,
+ 123.0,
+ 122.0
+ ],
"ask.com": [
- "36.0",
- "24.0",
- "30.0"
- ],
+ 36.0,
+ 24.0,
+ 30.0
+ ],
"baidu.com": [
- "1058.0",
- "66.0",
- "63.0"
- ],
+ 1058.0,
+ 66.0,
+ 63.0
+ ],
"bbc.co.uk": [
- "320.0",
- "783.0",
- "320.0"
- ],
+ 320.0,
+ 783.0,
+ 320.0
+ ],
"beatonna.livejournal.com": [
- "312.0",
- "402.0",
- "391.0"
- ],
+ 312.0,
+ 402.0,
+ 391.0
+ ],
"bild.de": [
- "1576.0",
- "1425.0",
- "1410.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"bing.com": [
- "68.0",
- "65.0",
- "64.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"blogfa.com": [
- "92.0",
- "82.0",
- "73.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"cakewrecks.blogspot.com": [
- "280.0",
- "303.0",
- "288.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"cgi.ebay.com": [
- "373.0",
- "374.0",
- "346.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"chemistry.about.com": [
- "224.0",
- "136.0",
- "143.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"chinaz.com": [
- "270.0",
- "224.0",
- "237.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"cnet.com": [
- "431.0",
- "395.0",
- "404.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"cnn.com": [
- "1076.0",
- "966.0",
- "923.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"csdn.net": [
- "229.0",
- "197.0",
- "165.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"dailymail.co.uk": [
- "1424.0",
- "1246.0",
- "1219.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"dailymotion.com": [
- "257.0",
- "271.0",
- "250.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"deviantart.com": [
- "288.0",
- "258.0",
- "258.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"digg.com": [
- "213.0",
- "195.0",
- "186.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"douban.com": [
- "247.0",
- "209.0",
- "195.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"ehow.com": [
- "180.0",
- "171.0",
- "180.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"en.wikipedia.org": [
- "437.0",
- "438.0",
- "412.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"etsy.com": [
- "224.0",
- "231.0",
- "236.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"ezinearticles.com": [
- "154.0",
- "132.0",
- "163.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"facebook.com": [
- "82.0",
- "77.0",
- "75.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"filestube.com": [
- "178.0",
- "183.0",
- "183.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"foxnews.com": [
- "450.0",
- "417.0",
- "379.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"globo.com": [
- "848.0",
- "796.0",
- "887.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"gmx.net": [
- "266.0",
- "244.0",
- "240.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"goo.ne.jp": [
- "143.0",
- "122.0",
- "155.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"google.com": [
- "89.0",
- "82.0",
- "83.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"guardian.co.uk": [
- "409.0",
- "360.0",
- "390.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"hao123.com": [
- "391.0",
- "108.0",
- "104.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"hatena.ne.jp": [
- "262.0",
- "215.0",
- "215.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"homeway.com.cn": [
- "564.0",
- "473.0",
- "481.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"huffingtonpost.com": [
- "1080.0",
- "1077.0",
- "1064.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"icanhascheezburger.com": [
- "419.0",
- "424.0",
- "422.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"icious.com": [
- "186.0",
- "169.0",
- "177.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"ifeng.com": [
- "595.0",
- "641.0",
- "450.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"imdb.com": [
- "586.0",
- "526.0",
- "503.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"imgur.com": [
- "346.0",
- "230.0",
- "221.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"indiatimes.com": [
- "295.0",
- "267.0",
- "300.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"linkedin.com": [
- "31.0",
- "27.0",
- "27.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"mail.ru": [
- "329.0",
- "295.0",
- "292.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"mashable.com": [
- "591.0",
- "541.0",
- "538.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"media.photobucket.com": [
- "22.0",
- "28.0",
- "28.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"mozilla.com": [
- "406.0",
- "371.0",
- "378.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"msn.com": [
- "266.0",
- "268.0",
- "248.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"myparentswereawesome.tumblr.com": [
- "182.0",
- "206.0",
- "211.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"myspace.com": [
- "683.0",
- "561.0",
- "555.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"naver.com": [
- "387.0",
- "386.0",
- "381.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"nicovideo.jp": [
- "212.0",
- "203.0",
- "214.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"noimpactman.typepad.com": [
- "373.0",
- "371.0",
- "340.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"orange.fr": [
- "109.0",
- "117.0",
- "100.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"page.renren.com": [
- "241.0",
- "207.0",
- "219.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"people.com.cn": [
- "540.0",
- "468.0",
- "468.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ,
"php.net": [
- "88.0",
- "86.0",
- "80.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"rakuten.co.jp": [
- "490.0",
- "471.0",
- "356.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"rambler.ru": [
- "279.0",
- "242.0",
- "255.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"reddit.com": [
- "180.0",
- "213.0",
- "240.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"repubblica.it": [
- "451.0",
- "368.0",
- "395.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"reuters.com": [
- "376.0",
- "299.0",
- "302.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"seesaa.net": [
- "266.0",
- "245.0",
- "228.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"slideshare.net": [
- "218.0",
- "204.0",
- "169.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"sohu.com": [
- "642.0",
- "566.0",
- "592.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"spiegel.de": [
- "444.0",
- "395.0",
- "440.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"stackoverflow.com": [
- "319.0",
- "294.0",
- "323.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"store.apple.com": [
- "592.0",
- "447.0",
- "452.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"taringa.net": [
- "247.0",
- "232.0",
- "235.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"telegraph.co.uk": [
- "328.0",
- "299.0",
- "286.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"terra.com.br": [
- "367.0",
- "371.0",
- "377.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"thepiratebay.org": [
- "206.0",
- "182.0",
- "189.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"thesartorialist.blogspot.com": [
- "739.0",
- "782.0",
- "792.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"tmall.com": [
- "432.0",
- "322.0",
- "335.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"torrentz.eu": [
- "1050.0",
- "110.0",
- "113.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"tudou.com": [
- "357.0",
- "307.0",
- "310.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"twitter.com": [
- "216.0",
- "207.0",
- "196.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"ucoz.ru": [
- "153.0",
- "127.0",
- "116.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"uol.com.br": [
- "461.0",
- "453.0",
- "451.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"vkontakte.ru": [
- "103.0",
- "83.0",
- "88.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"w3.org": [
- "125.0",
- "120.0",
- "126.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"w3schools.com": [
- "139.0",
- "128.0",
- "115.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"web.de": [
- "274.0",
- "230.0",
- "235.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"whois.domaintools.com": [
- "164.0",
- "83.0",
- "103.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"wp.pl": [
- "265.0",
- "214.0",
- "249.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"wsj.com": [
- "617.0",
- "558.0",
- "585.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"xinhuanet.com": [
- "854.0",
- "865.0",
- "755.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"xunlei.com": [
- "933.0",
- "909.0",
- "894.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"yahoo.co.jp": [
- "93.0",
- "69.0",
- "86.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"yandex.ru": [
- "245.0",
- "237.0",
- "244.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"yelp.com": [
- "462.0",
- "410.0",
- "405.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"youku.com": [
- "580.0",
- "530.0",
- "530.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"youtube.com": [
- "354.0",
- "274.0",
- "319.0"
- ],
+ 1576.0,
+ 1425.0,
+ 1410.0
+ ],
"zol.com.cn": [
- "652.0",
- "572.0",
- "580.0"
+ 1576.0,
+ 1425.0,
+ 1410.0
]
- },
+ },
"results_aux": {
"main_rss": [
- "72122368",
- "89206784",
- "90710016",
- "93384704",
- "98676736",
- "102776832",
- "104378368",
- "107352064",
- "118648832",
- "116051968",
- "114241536",
- "119185408",
- "111882240",
- "115748864",
- "136167424",
- "133001216",
- "135909376",
- "141484032",
- "136798208",
- "136601600",
- "135417856",
- "152686592",
- "143863808",
- "140906496",
- "144883712",
- "142585856",
- "141848576",
- "139915264",
- "141393920",
- "136826880",
- "135618560",
- "139444224",
- "140664832",
- "138887168",
- "135860224",
- "137482240",
- "134184960",
- "135983104",
- "136122368",
- "138465280",
- "140492800",
- "142610432",
- "142323712",
- "141565952",
- "140443648",
- "139108352",
- "136720384",
- "135901184",
- "135589888",
- "140107776",
- "136724480",
- "136388608",
- "135663616",
- "134983680",
- "135331840",
- "132050944",
- "132956160",
- "133623808",
- "140271616",
- "138436608",
- "138723328",
- "139350016",
- "134299648",
- "134926336",
- "134578176",
- "142462976",
- "148357120",
- "172298240",
- "172904448",
- "167161856",
- "165482496",
- "157765632",
- "151285760",
- "149712896",
- "150904832",
- "152748032",
- "154136576",
- "161161216",
- "158474240",
- "153616384",
- "153759744",
- "159219712",
- "159309824",
- "159223808",
- "159318016",
- "157437952",
- "162385920",
- "161898496",
- "163717120",
- "163323904",
- "160092160",
- "155025408",
- "156364800",
- "154722304",
- "153915392",
- "154660864",
- "152289280",
- "159399936",
- "152625152",
- "151363584",
- "162496512",
- "162648064",
- "164470784",
- "155590656",
- "154185728",
- "152379392",
- "150921216",
- "151949312",
- "152285184",
- "159297536",
- "156372992",
- "156557312",
- "161239040",
- "155205632",
- "158298112",
- "167124992",
- "162471936",
- "161673216",
- "164835328",
- "161984512",
- "160825344",
- "158281728",
- "164982784",