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 all 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
54 changes: 54 additions & 0 deletions ircbot/plugin/rt_summary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""Announce new RT list every day"""
from datetime import datetime

from ocflib.infra.rt import rt_connection
from ocflib.infra.rt import RtTicket

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):
"""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, '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_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

# 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
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)

if last_dsa_check is None or time.time() - last_dsa_check > 60 * dsa_freq:
last_dsa_check = time.time()
Expand Down