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.")