Skip to content

Commit 3483a72

Browse files
authored
backend: Serve detailed reports through API (#145)
1 parent 730f15c commit 3483a72

File tree

6 files changed

+490
-213
lines changed

6 files changed

+490
-213
lines changed

backend/code_coverage_backend/api.py

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from code_coverage_backend.config import COVERAGE_EXTENSIONS
1010
from code_coverage_backend.gcp import load_cache
11+
from code_coverage_backend.report import DEFAULT_FILTER
1112

1213
DEFAULT_REPOSITORY = "mozilla-central"
1314
logger = structlog.get_logger(__name__)
@@ -39,7 +40,13 @@ def coverage_latest(repository=DEFAULT_REPOSITORY):
3940
abort(404)
4041

4142

42-
def coverage_for_path(path="", changeset=None, repository=DEFAULT_REPOSITORY):
43+
def coverage_for_path(
44+
path="",
45+
changeset=None,
46+
repository=DEFAULT_REPOSITORY,
47+
platform=DEFAULT_FILTER,
48+
suite=DEFAULT_FILTER,
49+
):
4350
"""
4451
Aggregate coverage for a path, regardless of its type:
4552
* file, gives its coverage percent
@@ -54,17 +61,17 @@ def coverage_for_path(path="", changeset=None, repository=DEFAULT_REPOSITORY):
5461
try:
5562
if changeset:
5663
# Find closest report matching this changeset
57-
changeset, _ = gcp.find_closest_report(repository, changeset)
64+
report = gcp.find_closest_report(repository, changeset, platform, suite)
5865
else:
5966
# Fallback to latest report
60-
changeset, _ = gcp.find_report(repository)
67+
report = gcp.find_report(repository, platform, suite)
6168
except Exception as e:
6269
logger.warn("Failed to retrieve report: {}".format(e))
6370
abort(404)
6471

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

7885

79-
def coverage_history(repository=DEFAULT_REPOSITORY, path="", start=None, end=None):
86+
def coverage_history(
87+
repository=DEFAULT_REPOSITORY,
88+
path="",
89+
start=None,
90+
end=None,
91+
platform=DEFAULT_FILTER,
92+
suite=DEFAULT_FILTER,
93+
):
8094
"""
8195
List overall coverage from ingested reports over a period of time
8296
"""
@@ -86,7 +100,7 @@ def coverage_history(repository=DEFAULT_REPOSITORY, path="", start=None, end=Non
86100
abort(500)
87101

88102
try:
89-
return gcp.get_history(repository, path=path, start=start, end=end)
103+
return gcp.get_history(repository, path, start, end, platform, suite)
90104
except Exception as e:
91105
logger.warn(
92106
"Failed to load history",
@@ -97,3 +111,22 @@ def coverage_history(repository=DEFAULT_REPOSITORY, path="", start=None, end=Non
97111
error=str(e),
98112
)
99113
abort(400)
114+
115+
116+
def coverage_filters(repository=DEFAULT_REPOSITORY):
117+
"""
118+
List all available filters for that repository
119+
"""
120+
gcp = load_cache()
121+
if gcp is None:
122+
logger.error("No GCP cache available")
123+
abort(500)
124+
125+
try:
126+
return {
127+
"platforms": gcp.get_platforms(repository),
128+
"suites": gcp.get_suites(repository),
129+
}
130+
except Exception as e:
131+
logger.warn("Failed to load filters", repo=repository, error=str(e))
132+
abort(400)

backend/code_coverage_backend/api.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ paths:
4242
description: Mozilla repository for this changeset (default to mozilla-central)
4343
required: false
4444
type: string
45+
- name: suite
46+
in: query
47+
description: Filter the coverage using this test suite
48+
required: false
49+
type: string
50+
- name: platform
51+
in: query
52+
description: Filter the coverage using this platform
53+
required: false
54+
type: string
4555
responses:
4656
200:
4757
description: Code coverage information for a given file or directory at a given changeset
@@ -72,6 +82,16 @@ paths:
7282
description: Path of the repository folder to get coverage info on.
7383
required: false
7484
type: string
85+
- name: suite
86+
in: query
87+
description: Filter the coverage using this test suite
88+
required: false
89+
type: string
90+
- name: platform
91+
in: query
92+
description: Filter the coverage using this platform
93+
required: false
94+
type: string
7595
responses:
7696
200:
7797
description: Overall coverage of specified path over a period of time
@@ -86,3 +106,18 @@ paths:
86106
description: File extensions supported for code coverage
87107
tags:
88108
- v2
109+
110+
/v2/filters:
111+
get:
112+
operationId: "code_coverage_backend.api.coverage_filters"
113+
parameters:
114+
- name: repository
115+
in: query
116+
description: Mozilla repository for these reports (default to mozilla-central)
117+
required: false
118+
type: string
119+
responses:
120+
200:
121+
description: Available filters on the endpoints
122+
tags:
123+
- v2

0 commit comments

Comments
 (0)