Skip to content
This repository has been archived by the owner on Oct 2, 2024. It is now read-only.

Add RT Summary Feature to IRCBot #226

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions ircbot/plugin/rt_summary.py
Original file line number Diff line number Diff line change
@@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I see why this is 10500, but it probably deserves a comment above it on why it is 10500 (that's a recentish starting point to start searching from)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, hopefully we can figure out how to use the REST feature to find the most recent ticket instead. for now this should work!

CHANNEL = '#service-comm'


def show_tickets(bot, date):
"""Show RT tickets that need responses."""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought about this a bit, and I think the heuristic for "needs responses most" are the oldest tickets in a queue.

If someone submits a ticket today, its usually ok if we take a day to respond, but if its been a week we really should respond ASAP.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that is a much better idea!

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
2 changes: 2 additions & 0 deletions ircbot/plugin/timer.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
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
Expand Down Expand Up @@ -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()
Expand Down