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:09:51 UTC

[flink-jira-bot] 29/47: [hotfix] pull up logic to handle stale tickets

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

commit a6002490ef50be5f4b3c103ba80db0d90d307c97
Author: Konstantin Knauf <kn...@gmail.com>
AuthorDate: Wed Apr 21 14:42:06 2021 +0200

    [hotfix] pull up logic to handle stale tickets
---
 flink_jira_rule.py           | 24 ++++++++++++++++++++++++
 stale_assigned_rule.py       | 33 ++++++---------------------------
 stale_major_or_above_rule.py | 34 +++++++---------------------------
 stale_minor_rule.py          | 34 +++++++---------------------------
 4 files changed, 44 insertions(+), 81 deletions(-)

diff --git a/flink_jira_rule.py b/flink_jira_rule.py
index ff32a1e..f11f275 100644
--- a/flink_jira_rule.py
+++ b/flink_jira_rule.py
@@ -114,6 +114,10 @@ class FlinkJiraRule:
     def run(self):
         return
 
+    @abc.abstractmethod
+    def handle_stale_ticket(self, key):
+        return
+
     def mark_stale_tickets_stale(self, jql_query):
 
         logging.info(f"Looking for stale tickets.")
@@ -141,3 +145,23 @@ class FlinkJiraRule:
                     f"Found https://issues.apache.org/jira/browse/{key}, but is has recently updated Subtasks. "
                     f"Ignoring for now."
                 )
+
+    def handle_tickets_marked_stale(self, jql_query):
+        logging.info(f"Looking for ticket previously marked as {self.warning_label}.")
+        issues = self.get_issues(jql_query)
+
+        for issue in issues:
+            key = issue["key"]
+            logging.info(
+                f"Found https://issues.apache.org/jira/browse/{key}. It is now processed as stale."
+            )
+
+            formatted_comment = self.done_comment.format(
+                warning_days=self.warning_days,
+                warning_label=self.warning_label,
+                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)
diff --git a/stale_assigned_rule.py b/stale_assigned_rule.py
index cb672d4..26c7b00 100644
--- a/stale_assigned_rule.py
+++ b/stale_assigned_rule.py
@@ -32,35 +32,14 @@ class StaleAssignedRule(FlinkJiraRule):
         super().__init__(jira_client, config, is_dry_run)
 
     def run(self):
-        self.unassign_tickets_marked_stale()
-        self.mark_stale_tickets_stale(
-            f"project = FLINK AND resolution = Unresolved AND assignee is not EMPTY "
-            f"AND updated < startOfDay(-{self.stale_days}d)"
-        )
-
-    def unassign_tickets_marked_stale(self):
-
-        assigned_tickets_marked_stale = (
+        self.handle_tickets_marked_stale(
             f"project=FLINK AND resolution = Unresolved AND labels in "
             f'("{self.warning_label}") AND updated < startOfDay(-{self.warning_days}d)'
         )
-        logging.info(
-            f"Looking for assigned tickets, which were previously marked as {self.warning_label}."
+        self.mark_stale_tickets_stale(
+            f"project = FLINK AND resolution = Unresolved AND assignee is not EMPTY "
+            f"AND updated < startOfDay(-{self.stale_days}d)"
         )
-        issues = self.get_issues(assigned_tickets_marked_stale)
-
-        for issue in issues:
-            key = issue["key"]
-            logging.info(
-                f"Found https://issues.apache.org/jira/browse/{key}. It is now unassigned due to inactivity."
-            )
-
-            formatted_comment = self.done_comment.format(
-                warning_days=self.warning_days,
-                warning_label=self.warning_label,
-                done_label=self.done_label,
-            )
 
-            self.add_comment(key, formatted_comment)
-            self.replace_label(issue, self.warning_label, self.done_label)
-            self.unassign(key)
+    def handle_stale_ticket(self, key):
+        self.unassign(key)
diff --git a/stale_major_or_above_rule.py b/stale_major_or_above_rule.py
index e37c9d1..d5e5663 100644
--- a/stale_major_or_above_rule.py
+++ b/stale_major_or_above_rule.py
@@ -38,35 +38,15 @@ class StaleMajorOrAboveRule(FlinkJiraRule):
     LOWER_PRIORITIES = {"Blocker": "Critical", "Critical": "Major", "Major": "Minor"}
 
     def run(self):
-        self.close_tickets_marked_stale()
+        self.handle_tickets_marked_stale(
+            f"project=FLINK AND Priority = {self.priority} AND resolution = Unresolved "
+            f'AND labels in ("{self.warning_label}") '
+            f"AND updated < startOfDay(-{self.warning_days}d)"
+        )
         self.mark_stale_tickets_stale(
             f"project=FLINK AND priority = {self.priority} AND resolution = Unresolved "
             f"AND assignee is empty AND updated < startOfDay(-{self.stale_days}d)"
         )
 
-    def close_tickets_marked_stale(self):
-
-        tickets_marked_stale = (
-            f"project=FLINK AND Priority = {self.priority} AND resolution = Unresolved AND labels in "
-            f'("{self.warning_label}") AND updated < startOfDay(-{self.warning_days}d)'
-        )
-        logging.info(
-            f"Looking for {self.priority} tickets, which were previously marked as {self.warning_label}."
-        )
-        issues = self.get_issues(tickets_marked_stale)
-
-        for issue in issues:
-            key = issue["key"]
-            logging.info(
-                f"Found https://issues.apache.org/jira/browse/{key}. It is now deprioritized due to inactivity."
-            )
-
-            formatted_comment = self.done_comment.format(
-                warning_days=self.warning_days,
-                warning_label=self.warning_label,
-                done_label=self.done_label,
-            )
-
-            self.add_comment(key, formatted_comment)
-            self.replace_label(issue, self.warning_label, self.done_label)
-            self.set_priority(key, self.LOWER_PRIORITIES[self.priority])
+    def handle_stale_ticket(self, key):
+        self.set_priority(key, self.LOWER_PRIORITIES[self.priority])
diff --git a/stale_minor_rule.py b/stale_minor_rule.py
index b06785b..0bef5d9 100644
--- a/stale_minor_rule.py
+++ b/stale_minor_rule.py
@@ -32,35 +32,15 @@ class StaleMinorRule(FlinkJiraRule):
         super().__init__(jira_client, config, is_dry_run)
 
     def run(self):
-        self.close_tickets_marked_stale()
+        self.handle_tickets_marked_stale(
+            f"project=FLINK AND Priority = Minor AND resolution = Unresolved "
+            f'AND labels in ("{self.warning_label}") '
+            f"AND updated < startOfDay(-{self.warning_days}d)"
+        )
         self.mark_stale_tickets_stale(
             f"project = FLINK AND Priority = Minor AND resolution = Unresolved "
             f"AND updated < startOfDay(-{self.stale_days}d)"
         )
 
-    def close_tickets_marked_stale(self):
-
-        minor_tickets_marked_stale = (
-            f"project=FLINK AND Priority = Minor AND resolution = Unresolved AND labels in "
-            f'("{self.warning_label}") AND updated < startOfDay(-{self.warning_days}d)'
-        )
-        logging.info(
-            f"Looking for minor tickets, which were previously marked as {self.warning_label}."
-        )
-        issues = self.get_issues(minor_tickets_marked_stale)
-
-        for issue in issues:
-            key = issue["key"]
-            logging.info(
-                f"Found https://issues.apache.org/jira/browse/{key}. It is now closed due to inactivity."
-            )
-
-            formatted_comment = self.done_comment.format(
-                warning_days=self.warning_days,
-                warning_label=self.warning_label,
-                done_label=self.done_label,
-            )
-
-            self.add_comment(key, formatted_comment)
-            self.replace_label(issue, self.warning_label, self.done_label)
-            self.close_issue(key)
+    def handle_stale_ticket(self, key):
+        self.close_issue(key)