From 6bc5b31cf6025640a12ffd30652c537e421ed9c8 Mon Sep 17 00:00:00 2001 From: Saurabh Narain Date: Sun, 3 Oct 2021 01:18:16 -0700 Subject: [PATCH 1/3] correct style errors *again again* --- ircbot/plugin/rt_summary.py | 42 +++++++++++++++++++++++++++++++++++++ ircbot/plugin/timer.py | 4 +++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 ircbot/plugin/rt_summary.py diff --git a/ircbot/plugin/rt_summary.py b/ircbot/plugin/rt_summary.py new file mode 100644 index 0000000..46ebb01 --- /dev/null +++ b/ircbot/plugin/rt_summary.py @@ -0,0 +1,42 @@ +"""Announce new RT list every day""" +from ocflib.infra.rt import rt_connection +from ocflib.infra.rt import RtTicket + +NUM_ITER = 10 +NUM_LIST = 10500 +CHANNEL = '#service-comm' + + +def show_tickets(bot, date): + """Show RT tickets that need responses.""" + rt = rt_connection(user='create', password=bot.rt_password) + bot.say(CHANNEL, f'Top 10 new tickets in the help queue for today ({str(date)}):') + + counter = 0 + counter_success = 0 + num_newest_rt = newest_rt_number(rt, NUM_LIST) + while counter_success < NUM_ITER: + ticket_number = num_newest_rt - counter + ticket = RtTicket.from_number(rt, ticket_number) + if out_of_range(ticket): + break + if ticket.queue == 'help' and ticket.status == 'new': + bot.say(CHANNEL, str(ticket)) + counter_success += 1 + counter += 1 + bot.say(CHANNEL, 'Completed.') + + +def out_of_range(ticket): + if ticket.owner is None and ticket.subject is None and ticket.queue is None and ticket.status is None: + return True + return False + + +def newest_rt_number(rt, start): + ticket_number = start + ticket = RtTicket.from_number(rt, ticket_number) + while not out_of_range(ticket): + ticket_number += 1 + ticket = RtTicket.from_number(rt, ticket_number) + return ticket_number - 1 diff --git a/ircbot/plugin/timer.py b/ircbot/plugin/timer.py index 9f9279b..81e99d6 100644 --- a/ircbot/plugin/timer.py +++ b/ircbot/plugin/timer.py @@ -5,11 +5,12 @@ from traceback import format_exc from ircbot.plugin import debian_security +from ircbot.plugin import rt_summary # Check for Debian security announcements every 5 minutes # If a check fails, we bump add another 5 minutes, until # the maximum of 30 minutes -DSA_FREQ_DEFAULT = 5 +DSA_FREQ_DEFAULT = 1 DSA_FREQ_BACKOFF = 5 DSA_FREQ_MAX = 30 @@ -32,6 +33,7 @@ def timer(bot): last_date, old = date.today(), last_date if old and last_date != old: bot.bump_topic() + rt_summary.show_tickets(bot, last_date) if last_dsa_check is None or time.time() - last_dsa_check > 60 * dsa_freq: last_dsa_check = time.time() From 3c8d708eef3db6cf5124250f15477cab1eb60c66 Mon Sep 17 00:00:00 2001 From: Saurabh Narain Date: Sun, 3 Oct 2021 01:23:01 -0700 Subject: [PATCH 2/3] switch DSA timer back to 5 minutes --- ircbot/plugin/timer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ircbot/plugin/timer.py b/ircbot/plugin/timer.py index 81e99d6..275ee1b 100644 --- a/ircbot/plugin/timer.py +++ b/ircbot/plugin/timer.py @@ -10,7 +10,7 @@ # Check for Debian security announcements every 5 minutes # If a check fails, we bump add another 5 minutes, until # the maximum of 30 minutes -DSA_FREQ_DEFAULT = 1 +DSA_FREQ_DEFAULT = 5 DSA_FREQ_BACKOFF = 5 DSA_FREQ_MAX = 30 From 4b6f1aebf8b9f3cd110d49ec958a3813ff7a2655 Mon Sep 17 00:00:00 2001 From: Saurabh Narain Date: Sun, 3 Oct 2021 13:47:14 -0700 Subject: [PATCH 3/3] added date feature --- ircbot/plugin/rt_summary.py | 26 +++++++++++++++++++------- ircbot/plugin/timer.py | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/ircbot/plugin/rt_summary.py b/ircbot/plugin/rt_summary.py index 46ebb01..dd6db80 100644 --- a/ircbot/plugin/rt_summary.py +++ b/ircbot/plugin/rt_summary.py @@ -1,26 +1,38 @@ """Announce new RT list every day""" +from datetime import datetime + from ocflib.infra.rt import rt_connection from ocflib.infra.rt import RtTicket -NUM_ITER = 10 -NUM_LIST = 10500 CHANNEL = '#service-comm' +DAYS_OLD = 7 +NUM_LIST = 10 +# Starting point for recent most tickets to be searched +NUM_START = 10500 -def show_tickets(bot, date): +def show_tickets(bot): """Show RT tickets that need responses.""" rt = rt_connection(user='create', password=bot.rt_password) - bot.say(CHANNEL, f'Top 10 new tickets in the help queue for today ({str(date)}):') + bot.say(CHANNEL, 'Top 10 new tickets in the help queue that are older than a week:') counter = 0 counter_success = 0 - num_newest_rt = newest_rt_number(rt, NUM_LIST) - while counter_success < NUM_ITER: + num_newest_rt = newest_rt_number(rt, NUM_START) + while counter_success < NUM_LIST: ticket_number = num_newest_rt - counter ticket = RtTicket.from_number(rt, ticket_number) if out_of_range(ticket): break - if ticket.queue == 'help' and ticket.status == 'new': + + # Finds the date of a specific ticket + lines = rt.get(f'https://rt.ocf.berkeley.edu/REST/1.0/ticket/{ticket_number}/view').text.splitlines() + for line in lines: + if line.startswith('Created: '): + ticket_date = line.split(': ', 1)[1] + ticket_date = datetime.strptime(ticket_date, '%a %b %d %H:%M:%S %Y') + + if ticket.queue == 'help' and ticket.status == 'new' and (datetime.today() - ticket_date).days >= DAYS_OLD: bot.say(CHANNEL, str(ticket)) counter_success += 1 counter += 1 diff --git a/ircbot/plugin/timer.py b/ircbot/plugin/timer.py index 275ee1b..b8ac606 100644 --- a/ircbot/plugin/timer.py +++ b/ircbot/plugin/timer.py @@ -33,7 +33,7 @@ def timer(bot): last_date, old = date.today(), last_date if old and last_date != old: bot.bump_topic() - rt_summary.show_tickets(bot, last_date) + rt_summary.show_tickets(bot) if last_dsa_check is None or time.time() - last_dsa_check > 60 * dsa_freq: last_dsa_check = time.time()