Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 1890296

Browse files
committed
Bundle Analysis: Add metric label for upload result
1 parent c3ff910 commit 1890296

2 files changed

Lines changed: 71 additions & 26 deletions

File tree

upload/tests/views/test_bundle_analysis.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -810,3 +810,35 @@ def test_upload_bundle_analysis_tokenless_mismatched_branch(
810810
assert res.status_code == 401
811811
assert res.json() == {"detail": "Not valid tokenless upload"}
812812
assert not upload.called
813+
814+
815+
def test_bundle_analysis_view_exception_handling(db, client, mocker, mock_redis):
816+
with patch(
817+
"upload.views.bundle_analysis.BundleAnalysisView._handle_upload",
818+
side_effect=Exception("Test Exception"),
819+
):
820+
client = APIClient()
821+
repository = RepositoryFactory.create()
822+
client.credentials(HTTP_AUTHORIZATION=f"token {repository.upload_token}")
823+
824+
mock_inc_counter = mocker.patch("upload.views.bundle_analysis.inc_counter")
825+
826+
res = client.post(
827+
reverse("upload-bundle-analysis"),
828+
{
829+
"commit": "6fd5b89357fc8cdf34d6197549ac7c6d7e5977ef",
830+
"slug": f"{repository.author.username}::::{repository.name}",
831+
},
832+
format="json",
833+
)
834+
835+
assert res.status_code == 201
836+
assert res.json()["url"] is None
837+
838+
# Check that the labels["result"] is "error"
839+
mock_inc_counter.assert_any_call(
840+
ANY,
841+
labels=mocker.ANY,
842+
)
843+
labels = mock_inc_counter.call_args[1]["labels"]
844+
assert labels["result"] == "error"

upload/views/bundle_analysis.py

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"endpoint",
4949
"is_using_shelter",
5050
"position",
51+
"result",
5152
],
5253
)
5354

@@ -85,20 +86,7 @@ class BundleAnalysisView(APIView, ShelterMixin):
8586
def get_exception_handler(self) -> Callable:
8687
return repo_auth_custom_exception_handler
8788

88-
def post(self, request: HttpRequest) -> Response:
89-
labels = generate_upload_prometheus_metrics_labels(
90-
action="bundle_analysis",
91-
endpoint="bundle_analysis",
92-
request=self.request,
93-
is_shelter_request=self.is_shelter_request(),
94-
position="start",
95-
include_empty_labels=False,
96-
)
97-
inc_counter(
98-
BUNDLE_ANALYSIS_UPLOAD_VIEWS_COUNTER,
99-
labels=labels,
100-
)
101-
89+
def _handle_upload(self, request: HttpRequest) -> str | None:
10290
serializer = UploadSerializer(data=request.data)
10391
if not serializer.is_valid():
10492
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@@ -191,18 +179,6 @@ def post(self, request: HttpRequest) -> Response:
191179
task_arguments=task_arguments,
192180
),
193181
)
194-
labels = generate_upload_prometheus_metrics_labels(
195-
action="bundle_analysis",
196-
endpoint="bundle_analysis",
197-
request=self.request,
198-
is_shelter_request=self.is_shelter_request(),
199-
position="end",
200-
include_empty_labels=False,
201-
)
202-
inc_counter(
203-
BUNDLE_ANALYSIS_UPLOAD_VIEWS_COUNTER,
204-
labels=labels,
205-
)
206182

207183
dispatch_upload_task(
208184
task_arguments,
@@ -235,4 +211,41 @@ def post(self, request: HttpRequest) -> Response:
235211
),
236212
)
237213

214+
return url
215+
216+
def post(self, request: HttpRequest) -> Response:
217+
labels = generate_upload_prometheus_metrics_labels(
218+
action="bundle_analysis",
219+
endpoint="bundle_analysis",
220+
request=self.request,
221+
is_shelter_request=self.is_shelter_request(),
222+
position="start",
223+
include_empty_labels=False,
224+
)
225+
labels["result"] = "pending"
226+
url = None
227+
inc_counter(
228+
BUNDLE_ANALYSIS_UPLOAD_VIEWS_COUNTER,
229+
labels=labels,
230+
)
231+
232+
upload_result = "success"
233+
try:
234+
url = self._handle_upload(request)
235+
except Exception as e:
236+
log.error(
237+
"Error handling bundle analysis upload",
238+
extra=dict(
239+
error=e,
240+
),
241+
exc_info=True,
242+
)
243+
upload_result = "error"
244+
245+
labels["position"] = "end"
246+
labels["result"] = upload_result
247+
inc_counter(
248+
BUNDLE_ANALYSIS_UPLOAD_VIEWS_COUNTER,
249+
labels=labels,
250+
)
238251
return Response({"url": url}, status=201)

0 commit comments

Comments
 (0)