You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by kn...@apache.org on 2021/05/19 08:07:51 UTC
[flink-jira-bot] branch master updated: [FLINK-22570] combine jira
client calls and reduce number of notifications to one per ticket per rule
This is an automated email from the ASF dual-hosted git repository.
knaufk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-jira-bot.git
The following commit(s) were added to refs/heads/master by this push:
new 7cccb04 [FLINK-22570] combine jira client calls and reduce number of notifications to one per ticket per rule
new a43b94f Merge pull request #14 from knaufk/FLINK-22570
7cccb04 is described below
commit 7cccb045fb9a53d1e8d5b72a644099b0a90bc08d
Author: Konstantin Knauf <kn...@gmail.com>
AuthorDate: Tue May 18 19:03:50 2021 +0200
[FLINK-22570] combine jira client calls and reduce number of notifications to one per ticket per rule
---
flink_jira_rule.py | 65 +++++++-------------------------------------
stale_assigned_rule.py | 25 +++++++++++++++--
stale_major_or_above_rule.py | 20 ++++++++++++--
stale_minor_rule.py | 22 +++++++++++++--
4 files changed, 69 insertions(+), 63 deletions(-)
diff --git a/flink_jira_rule.py b/flink_jira_rule.py
index a98ca71..3f784d7 100644
--- a/flink_jira_rule.py
+++ b/flink_jira_rule.py
@@ -60,58 +60,14 @@ class FlinkJiraRule:
issues = self.get_issues(find_subtasks_updated_within)
return len(issues) > 0
- def add_label(self, issue, label):
- labels = issue["fields"]["labels"] + [label]
- fields = {"labels": labels}
- key = issue["key"]
-
- if not self.is_dry_run:
- self.jira_client.update_issue_field(key, fields)
- else:
- logging.info(f'DRY RUN ({key}): Adding label "{label}".')
-
- def replace_label(self, issue, old_label, new_label):
- labels = issue["fields"]["labels"] + [new_label]
- labels.remove(old_label)
- fields = {"labels": labels}
- key = issue["key"]
-
- if not self.is_dry_run:
- self.jira_client.update_issue_field(key, fields)
- else:
- logging.info(
- f'DRY RUN ({key}): Replace label "{old_label}" for "{new_label}".'
- )
-
- def add_comment(self, key, comment):
+ def add_label_with_comment(self, key, label, comment):
if not self.is_dry_run:
- self.jira_client.issue_add_comment(key, comment)
- else:
- logging.info(f'DRY_RUN ({key}): Adding comment "{comment}".')
-
- def close_issue(self, key):
- if not self.is_dry_run:
- self.jira_client.set_issue_status(
- key, "Closed", fields={"resolution": {"name": "Auto Closed"}}
+ self.jira_client.edit_issue(
+ key,
+ {"labels": [{"add": label}], "comment": [{"add": {"body": comment}}]},
)
else:
- logging.info(f"DRY_RUN (({key})): Closing.")
-
- def unassign(self, key):
- if not self.is_dry_run:
- if self.jira_client.get_issue_status(key) == "In Progress":
- self.jira_client.assign_issue(key, self.jira_client.username)
- self.jira_client.set_issue_status(key, "Open")
- self.jira_client.assign_issue(key, None)
- else:
- logging.info(f"DRY_RUN (({key})): Unassigning.")
-
- def set_priority(self, key, priority):
- if not self.is_dry_run:
- fields = {"priority": {"name": priority}}
- self.jira_client.update_issue_field(key, fields)
- else:
- logging.info(f"DRY_RUN (({key})): Setting to {priority}")
+ logging.info(f'DRY RUN ({key}): Adding label "{label}".')
@abc.abstractmethod
def run(self):
@@ -140,12 +96,11 @@ class FlinkJiraRule:
warning_label=self.warning_label,
)
- self.add_label(issue, self.warning_label)
- self.add_comment(key, formatted_comment)
+ self.add_label_with_comment(key, self.warning_label, formatted_comment)
else:
logging.info(
- f"Found https://issues.apache.org/jira/browse/{key}, but is has recently updated Subtasks. "
+ f"Found https://issues.apache.org/jira/browse/{key}, but is has recently updated Subtasks."
f"Ignoring for now."
)
@@ -165,6 +120,6 @@ class FlinkJiraRule:
done_label=self.done_label,
)
- self.add_comment(key, formatted_comment)
- self.replace_label(issue, self.warning_label, self.done_label)
- self.handle_stale_ticket(key)
+ self.handle_stale_ticket(
+ key, self.warning_label, self.done_label, formatted_comment
+ )
diff --git a/stale_assigned_rule.py b/stale_assigned_rule.py
index 26c7b00..d5cb41c 100644
--- a/stale_assigned_rule.py
+++ b/stale_assigned_rule.py
@@ -41,5 +41,26 @@ class StaleAssignedRule(FlinkJiraRule):
f"AND updated < startOfDay(-{self.stale_days}d)"
)
- def handle_stale_ticket(self, key):
- self.unassign(key)
+ def handle_stale_ticket(self, key, warning_label, done_label, comment):
+ self.unassign(key, warning_label, done_label, comment)
+
+ def unassign(self, key, warning_label, done_label, comment):
+ if not self.is_dry_run:
+ if self.jira_client.get_issue_status(key) == "In Progress":
+ self.jira_client.edit_issue(
+ key,
+ {"assignee": [{"set": {"name": self.jira_client.username}}]},
+ notify_users=False,
+ )
+ self.jira_client.set_issue_status(key, "Open")
+ self.jira_client.edit_issue(
+ key,
+ {
+ "labels": [{"add": done_label}, {"remove": warning_label}],
+ "comment": [{"add": {"body": comment}}],
+ "assignee": [{"set": {"name": None}}],
+ },
+ notify_users=False,
+ )
+ else:
+ logging.info(f"DRY_RUN (({key})): Unassigning.")
diff --git a/stale_major_or_above_rule.py b/stale_major_or_above_rule.py
index dd256b2..52aa2ad 100644
--- a/stale_major_or_above_rule.py
+++ b/stale_major_or_above_rule.py
@@ -17,6 +17,7 @@
################################################################################
from flink_jira_rule import FlinkJiraRule
+import logging
class StaleMajorOrAboveRule(FlinkJiraRule):
@@ -42,8 +43,21 @@ class StaleMajorOrAboveRule(FlinkJiraRule):
)
self.mark_stale_tickets_stale(
f'project=FLINK AND type != "Sub-Task" AND priority = {self.priority} AND resolution = Unresolved '
- f'AND assignee is empty AND updated < startOfDay(-{self.stale_days}d)'
+ f"AND assignee is empty AND updated < startOfDay(-{self.stale_days}d)"
)
- def handle_stale_ticket(self, key):
- self.set_priority(key, self.lower_priority)
+ def handle_stale_ticket(self, key, warning_label, done_label, comment):
+ self.set_priority(key, warning_label, done_label, self.lower_priority, comment)
+
+ def set_priority(self, key, warning_label, done_label, priority, comment):
+ if not self.is_dry_run:
+ self.jira_client.edit_issue(
+ key,
+ {
+ "labels": [{"add": done_label}, {"remove": warning_label}],
+ "comment": [{"add": {"body": comment}}],
+ "priority": [{"set": {"name": priority}}],
+ },
+ )
+ else:
+ logging.info(f"DRY_RUN (({key})): Setting to {priority}")
diff --git a/stale_minor_rule.py b/stale_minor_rule.py
index ae54dac..15bc2cf 100644
--- a/stale_minor_rule.py
+++ b/stale_minor_rule.py
@@ -39,8 +39,24 @@ class StaleMinorRule(FlinkJiraRule):
)
self.mark_stale_tickets_stale(
f'project = FLINK AND type != "Sub-Task" AND Priority = Minor AND resolution = Unresolved '
- f'AND updated < startOfDay(-{self.stale_days}d)'
+ f"AND updated < startOfDay(-{self.stale_days}d)"
)
- def handle_stale_ticket(self, key):
- self.close_issue(key)
+ def handle_stale_ticket(self, key, warning_label, done_label, comment):
+ self.close_issue(key, warning_label, done_label, comment)
+
+ def close_issue(self, key, warning_label, done_label, comment):
+ if not self.is_dry_run:
+ self.jira_client.edit_issue(
+ key,
+ {"labels": [{"add": done_label}, {"remove": warning_label}]},
+ notify_users=False,
+ )
+ self.jira_client.set_issue_status(
+ key,
+ "Closed",
+ fields={"resolution": {"name": "Auto Closed"}},
+ update={"comment": [{"add": {"body": comment}}]},
+ )
+ else:
+ logging.info(f"DRY_RUN (({key})): Closing.")