Skip to content

Commit

Permalink
fix(mergify): use new endpoint for metric (#2281)
Browse files Browse the repository at this point in the history
  • Loading branch information
lecrepont01 authored Feb 14, 2024
1 parent f11cf24 commit 53c77a5
Show file tree
Hide file tree
Showing 4 changed files with 222 additions and 168 deletions.
51 changes: 22 additions & 29 deletions mergify/datadog_checks/mergify/check.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ def check(self, _):

self.send_queues_metrics()
self.send_time_to_merge_metrics()
self.send_queue_failure_metrics()
self.send_merge_queue_checks_outcome_metrics()

self.service_check("can_connect", AgentCheck.OK)

def get_request(self, url):
def get_request(self, url, params=None):
try:
response = self.http.get(url, headers=self.headers)
response = self.http.get(url, headers=self.headers, params=params)
response.raise_for_status()
return response.json()
except Timeout as e:
Expand Down Expand Up @@ -121,30 +121,23 @@ def send_time_to_merge_metrics(self):
tags=queue_tags,
)

def send_queue_failure_metrics(self):
def send_merge_queue_checks_outcome_metrics(self):
for repository, branches in self.repositories.items():
for branch in branches:
default_tags = self.tags.copy()
default_tags.append(f"repository:{repository}")
default_tags.append(f"branch:{branch}")

url = f"{self.api_url}/v1/repos/{repository}/stats/queue_checks_outcome?branch={branch}"
response_json = self.get_request(url)

for partition_data in response_json:
partition_tags = default_tags.copy()
partition_tags.append(f"partition:{partition_data['partition_name']}")

for queue_data in partition_data["queues"]:
queue_tags = partition_tags.copy()
queue_tags.append(f"queue:{queue_data['queue_name']}")

for outcome_type, number_of_outcome in queue_data["queue_checks_outcome"].items():
if outcome_type == "SUCCESS":
continue

self.gauge(
"queue_checks_outcome",
number_of_outcome,
tags=queue_tags + [f"outcome_type:{outcome_type}"],
)
default_tags = self.tags.copy()
default_tags.append(f"repository:{repository}")

url = f"{self.api_url}/v1/repos/{repository}/stats/merge_queue_checks_outcome"
response_json = self.get_request(url, params={"base_ref": branches})

for group in response_json["groups"]:
group_tags = default_tags.copy()
group_tags.append(f"branch:{group['base_ref']}")
group_tags.append(f"partition:{group['partition_name']}")
group_tags.append(f"queue:{group['queue_name']}")

for outcome_type, number_of_outcome in group["stats"].items():
self.gauge(
"queue_checks_outcome",
number_of_outcome,
tags=group_tags + [f"outcome_type:{outcome_type}"],
)
115 changes: 66 additions & 49 deletions mergify/tests/fixtures/queue_checks_outcome_empty.json
Original file line number Diff line number Diff line change
@@ -1,49 +1,66 @@
[
{
"partition_name": "__default__",
"queues": [
{
"queue_name": "default",
"queue_checks_outcome": {
"PR_DEQUEUED": 0,
"PR_AHEAD_DEQUEUED": 0,
"PR_AHEAD_FAILED_TO_MERGE": 0,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 0,
"PR_QUEUED_TWICE": 0,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 0,
"CHECKS_TIMEOUT": 0,
"CHECKS_FAILED": 0,
"QUEUE_RULE_MISSING": 0,
"UNEXPECTED_QUEUE_CHANGE": 0,
"PR_FROZEN_NO_CASCADING": 0,
"SUCCESS": 0,
"TARGET_BRANCH_CHANGED": 0,
"TARGET_BRANCH_MISSING": 0,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 0,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 0
}
},
{
"queue_name": "hotfix",
"queue_checks_outcome": {
"PR_DEQUEUED": 0,
"PR_AHEAD_DEQUEUED": 0,
"PR_AHEAD_FAILED_TO_MERGE": 0,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 0,
"PR_QUEUED_TWICE": 0,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 0,
"CHECKS_TIMEOUT": 0,
"CHECKS_FAILED": 0,
"QUEUE_RULE_MISSING": 0,
"UNEXPECTED_QUEUE_CHANGE": 0,
"PR_FROZEN_NO_CASCADING": 0,
"SUCCESS": 0,
"TARGET_BRANCH_CHANGED": 0,
"TARGET_BRANCH_MISSING": 0,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 0,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 0
}
}
]
}
]
{
"groups": [
{
"base_ref": "main",
"partition_name": "__default__",
"queue_name": "default",
"stats": {
"BASE_BRANCH_CHANGED": 0,
"BASE_BRANCH_MISSING": 0,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 0,
"BRANCH_UPDATE_FAILED": 0,
"CHECKS_FAILED": 0,
"CHECKS_TIMEOUT": 0,
"CONFLICT_WITH_BASE_BRANCH": 0,
"CONFLICT_WITH_PULL_AHEAD": 0,
"DRAFT_PULL_REQUEST_CHANGED": 0,
"INCOMPATIBILITY_WITH_BRANCH_PROTECTIONS": 0,
"MERGE_QUEUE_RESET": 0,
"PR_AHEAD_DEQUEUED": 0,
"PR_AHEAD_FAILED_TO_MERGE": 0,
"PR_CHECKS_STOPPED_BECAUSE_MERGE_QUEUE_PAUSE": 0,
"PR_DEQUEUED": 0,
"PR_FROZEN_NO_CASCADING": 0,
"PR_QUEUED_TWICE": 0,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 0,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 0,
"PULL_REQUEST_UPDATED": 0,
"QUEUE_RULE_MISSING": 0,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 0,
"SUCCESS": 0,
"UNEXPECTED_QUEUE_CHANGE": 0
}
},
{
"base_ref": "main",
"partition_name": "__default__",
"queue_name": "hotfix",
"stats": {
"BASE_BRANCH_CHANGED": 0,
"BASE_BRANCH_MISSING": 0,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 0,
"BRANCH_UPDATE_FAILED": 0,
"CHECKS_FAILED": 0,
"CHECKS_TIMEOUT": 0,
"CONFLICT_WITH_BASE_BRANCH": 0,
"CONFLICT_WITH_PULL_AHEAD": 0,
"DRAFT_PULL_REQUEST_CHANGED": 0,
"INCOMPATIBILITY_WITH_BRANCH_PROTECTIONS": 0,
"MERGE_QUEUE_RESET": 0,
"PR_AHEAD_DEQUEUED": 0,
"PR_AHEAD_FAILED_TO_MERGE": 0,
"PR_CHECKS_STOPPED_BECAUSE_MERGE_QUEUE_PAUSE": 0,
"PR_DEQUEUED": 0,
"PR_FROZEN_NO_CASCADING": 0,
"PR_QUEUED_TWICE": 0,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 0,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 0,
"PULL_REQUEST_UPDATED": 0,
"QUEUE_RULE_MISSING": 0,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 0,
"SUCCESS": 0,
"UNEXPECTED_QUEUE_CHANGE": 0
}
}
]
}
115 changes: 66 additions & 49 deletions mergify/tests/fixtures/queue_checks_outcome_main.json
Original file line number Diff line number Diff line change
@@ -1,49 +1,66 @@
[
{
"partition_name": "__default__",
"queues": [
{
"queue_name": "default",
"queue_checks_outcome": {
"PR_DEQUEUED": 16,
"PR_AHEAD_DEQUEUED": 15,
"PR_AHEAD_FAILED_TO_MERGE": 14,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 13,
"PR_QUEUED_TWICE": 12,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 11,
"CHECKS_TIMEOUT": 10,
"CHECKS_FAILED": 9,
"QUEUE_RULE_MISSING": 8,
"UNEXPECTED_QUEUE_CHANGE": 7,
"PR_FROZEN_NO_CASCADING": 6,
"SUCCESS": 5,
"TARGET_BRANCH_CHANGED": 4,
"TARGET_BRANCH_MISSING": 3,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 2,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 1
}
},
{
"queue_name": "hotfix",
"queue_checks_outcome": {
"PR_DEQUEUED": 1,
"PR_AHEAD_DEQUEUED": 2,
"PR_AHEAD_FAILED_TO_MERGE": 3,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 4,
"PR_QUEUED_TWICE": 5,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 6,
"CHECKS_TIMEOUT": 7,
"CHECKS_FAILED": 8,
"QUEUE_RULE_MISSING": 9,
"UNEXPECTED_QUEUE_CHANGE": 10,
"PR_FROZEN_NO_CASCADING": 11,
"SUCCESS": 12,
"TARGET_BRANCH_CHANGED": 13,
"TARGET_BRANCH_MISSING": 14,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 15,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 16
}
}
]
}
]
{
"groups": [
{
"base_ref": "main",
"partition_name": "__default__",
"queue_name": "default",
"stats": {
"BASE_BRANCH_CHANGED": 12,
"BASE_BRANCH_MISSING": 9,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 5,
"BRANCH_UPDATE_FAILED": 4,
"CHECKS_FAILED": 1,
"CHECKS_TIMEOUT": 7,
"CONFLICT_WITH_BASE_BRANCH": 8,
"CONFLICT_WITH_PULL_AHEAD": 2,
"DRAFT_PULL_REQUEST_CHANGED": 9,
"INCOMPATIBILITY_WITH_BRANCH_PROTECTIONS": 11,
"MERGE_QUEUE_RESET": 5,
"PR_AHEAD_DEQUEUED": 0,
"PR_AHEAD_FAILED_TO_MERGE": 2,
"PR_CHECKS_STOPPED_BECAUSE_MERGE_QUEUE_PAUSE": 7,
"PR_DEQUEUED": 12,
"PR_FROZEN_NO_CASCADING": 6,
"PR_QUEUED_TWICE": 1,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 3,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 7,
"PULL_REQUEST_UPDATED": 10,
"QUEUE_RULE_MISSING": 0,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 4,
"SUCCESS": 4,
"UNEXPECTED_QUEUE_CHANGE": 30
}
},
{
"base_ref": "main",
"partition_name": "__default__",
"queue_name": "hotfix",
"stats": {
"BASE_BRANCH_CHANGED": 1,
"BASE_BRANCH_MISSING": 2,
"BATCH_MAX_FAILURE_RESOLUTION_ATTEMPTS": 3,
"BRANCH_UPDATE_FAILED": 4,
"CHECKS_FAILED": 5,
"CHECKS_TIMEOUT": 6,
"CONFLICT_WITH_BASE_BRANCH": 7,
"CONFLICT_WITH_PULL_AHEAD": 8,
"DRAFT_PULL_REQUEST_CHANGED": 9,
"INCOMPATIBILITY_WITH_BRANCH_PROTECTIONS": 10,
"MERGE_QUEUE_RESET": 11,
"PR_AHEAD_DEQUEUED": 12,
"PR_AHEAD_FAILED_TO_MERGE": 13,
"PR_CHECKS_STOPPED_BECAUSE_MERGE_QUEUE_PAUSE": 14,
"PR_DEQUEUED": 15,
"PR_FROZEN_NO_CASCADING": 16,
"PR_QUEUED_TWICE": 17,
"PR_UNEXPECTEDLY_FAILED_TO_MERGE": 18,
"PR_WITH_HIGHER_PRIORITY_QUEUED": 19,
"PULL_REQUEST_UPDATED": 20,
"QUEUE_RULE_MISSING": 21,
"SPECULATIVE_CHECK_NUMBER_REDUCED": 22,
"SUCCESS": 23,
"UNEXPECTED_QUEUE_CHANGE": 24
}
}
]
}
Loading

0 comments on commit 53c77a5

Please sign in to comment.