Skip to content

Serve detailed reports through API #145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Sep 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 39 additions & 6 deletions backend/code_coverage_backend/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

from code_coverage_backend.config import COVERAGE_EXTENSIONS
from code_coverage_backend.gcp import load_cache
from code_coverage_backend.report import DEFAULT_FILTER

DEFAULT_REPOSITORY = "mozilla-central"
logger = structlog.get_logger(__name__)
Expand Down Expand Up @@ -39,7 +40,13 @@ def coverage_latest(repository=DEFAULT_REPOSITORY):
abort(404)


def coverage_for_path(path="", changeset=None, repository=DEFAULT_REPOSITORY):
def coverage_for_path(
path="",
changeset=None,
repository=DEFAULT_REPOSITORY,
platform=DEFAULT_FILTER,
suite=DEFAULT_FILTER,
):
"""
Aggregate coverage for a path, regardless of its type:
* file, gives its coverage percent
Expand All @@ -54,17 +61,17 @@ def coverage_for_path(path="", changeset=None, repository=DEFAULT_REPOSITORY):
try:
if changeset:
# Find closest report matching this changeset
changeset, _ = gcp.find_closest_report(repository, changeset)
report = gcp.find_closest_report(repository, changeset, platform, suite)
else:
# Fallback to latest report
changeset, _ = gcp.find_report(repository)
report = gcp.find_report(repository, platform, suite)
except Exception as e:
logger.warn("Failed to retrieve report: {}".format(e))
abort(404)

# Load tests data from GCP
try:
return gcp.get_coverage(repository, changeset, path)
return gcp.get_coverage(report, path)
except Exception as e:
logger.warn(
"Failed to load coverage",
Expand All @@ -76,7 +83,14 @@ def coverage_for_path(path="", changeset=None, repository=DEFAULT_REPOSITORY):
abort(400)


def coverage_history(repository=DEFAULT_REPOSITORY, path="", start=None, end=None):
def coverage_history(
repository=DEFAULT_REPOSITORY,
path="",
start=None,
end=None,
platform=DEFAULT_FILTER,
suite=DEFAULT_FILTER,
):
"""
List overall coverage from ingested reports over a period of time
"""
Expand All @@ -86,7 +100,7 @@ def coverage_history(repository=DEFAULT_REPOSITORY, path="", start=None, end=Non
abort(500)

try:
return gcp.get_history(repository, path=path, start=start, end=end)
return gcp.get_history(repository, path, start, end, platform, suite)
except Exception as e:
logger.warn(
"Failed to load history",
Expand All @@ -97,3 +111,22 @@ def coverage_history(repository=DEFAULT_REPOSITORY, path="", start=None, end=Non
error=str(e),
)
abort(400)


def coverage_filters(repository=DEFAULT_REPOSITORY):
"""
List all available filters for that repository
"""
gcp = load_cache()
if gcp is None:
logger.error("No GCP cache available")
abort(500)

try:
return {
"platforms": gcp.get_platforms(repository),
"suites": gcp.get_suites(repository),
}
except Exception as e:
logger.warn("Failed to load filters", repo=repository, error=str(e))
abort(400)
35 changes: 35 additions & 0 deletions backend/code_coverage_backend/api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ paths:
description: Mozilla repository for this changeset (default to mozilla-central)
required: false
type: string
- name: suite
in: query
description: Filter the coverage using this test suite
required: false
type: string
- name: platform
in: query
description: Filter the coverage using this platform
required: false
type: string
responses:
200:
description: Code coverage information for a given file or directory at a given changeset
Expand Down Expand Up @@ -72,6 +82,16 @@ paths:
description: Path of the repository folder to get coverage info on.
required: false
type: string
- name: suite
in: query
description: Filter the coverage using this test suite
required: false
type: string
- name: platform
in: query
description: Filter the coverage using this platform
required: false
type: string
responses:
200:
description: Overall coverage of specified path over a period of time
Expand All @@ -86,3 +106,18 @@ paths:
description: File extensions supported for code coverage
tags:
- v2

/v2/filters:
get:
operationId: "code_coverage_backend.api.coverage_filters"
parameters:
- name: repository
in: query
description: Mozilla repository for these reports (default to mozilla-central)
required: false
type: string
responses:
200:
description: Available filters on the endpoints
tags:
- v2
Loading