Limiting rt-crontool notifications to every n days?

Hi all,
RT is sending out notifications for old tickets just like we want it to. If
a ticket hasn’t been updated in seven days and the status is open or new,
the owner gets an email every weekday until the ticket is updated. What I’d
like to do, though, is have a way of changing that “every weekday” bit for
stalled tickets.

Instead of warning users every weekday about tickets that are stalled and
haven’t been touched in a while, I’d like to warn them once or twice a
week. I can’t run the cron job that seldom, though, or a ticket could go
days longer than it should without being picked up. Is there any way to
only send an email to a user if the system has not emailed them in N days?
I could add a column to the Tickets table for this, or add a new table, but
I always like to stay clear of database schema modifications if I can.
Besides, I don’t know how to interface with a custom table using RT SQL.

Is there any way of doing this? I wouldn’t mind lowering active ticket
warnings to every other day as well, if I could, so this would help
multiple places. Thanks for any thoughts.

Alex Hall
Automatic Distributors, IT department
ahall@autodist.com

Hey Alex,

Hi all,
RT is sending out notifications for old tickets just like we want it to. If
a ticket hasn’t been updated in seven days and the status is open or new,
the owner gets an email every weekday until the ticket is updated. What I’d
like to do, though, is have a way of changing that “every weekday” bit for
stalled tickets.

Instead of warning users every weekday about tickets that are stalled and
haven’t been touched in a while, I’d like to warn them once or twice a week.
I can’t run the cron job that seldom, though, or a ticket could go days
longer than it should without being picked up. Is there any way to only send
an email to a user if the system has not emailed them in N days? I could add
a column to the Tickets table for this, or add a new table, but I always
like to stay clear of database schema modifications if I can. Besides, I
don’t know how to interface with a custom table using RT SQL.

I wouldn’t alter the schema.

Is there any way of doing this?

You could use a custom field. Something like “Last Email Notification
Sent At” or something equally verbose. :wink:

Then add that CF to your query about which tickets need to get email
notifications.

We do essentially what you are asking about. We leverage two things:

  1. rt-crontool can take multiple --action arguments
  2. A custom (but it could be “cored”) scrip action. The scrip action
    is ModifyCustomField. Here is a link to it:

http://lists.bestpractical.com/pipermail/rt-devel/2016-December/012601.html

Here is one of our cron jobs that keeps track of when it sent an email
and also sends the email:

0 12 * * * /opt/rt4/bin/rt-crontool --log=warning --search
RT::Search::FromSQL --search-arg ’ Queue = “Access Requests” AND
Status = “activated” AND ( ( “CF.{Renewal Verified At}” IS NULL AND
Created <= “1 year ago” ) OR ( “CF.{Renewal Verified At}” IS NOT NULL
AND “CF.{Renewal Verified At}” <= “1 year ago” ) ) AND ( “CF.{Renewal
Verification Sent At}” IS NULL OR “CF.{Renewal Verification Sent At}”
<= “20 days ago” ) ’ --transaction-type Create --transaction last
–template “Access Request Renewal Verification” --action
RT::Action::MailRequestors --action-arg “” --action
RT::Action::ModifyCustomField --action-arg ‘{ “name”: “Renewal
Verification Sent At”, “operation”: “set”, “value”: “now” }’

-m

Thank you, that looks like it’ll work. Did your JSON-like syntax for
updating fields ever make it into core for 4.4.1? I found the attachment in
your linked message, but it’s a bin file and I’m not sure what to do with
it.On Tue, Jan 17, 2017 at 11:17 AM, Matt Zagrabelny mzagrabe@d.umn.edu wrote:

Hey Alex,

On Mon, Jan 16, 2017 at 8:18 AM, Alex Hall ahall@autodist.com wrote:

Hi all,
RT is sending out notifications for old tickets just like we want it to.
If
a ticket hasn’t been updated in seven days and the status is open or new,
the owner gets an email every weekday until the ticket is updated. What
I’d
like to do, though, is have a way of changing that “every weekday” bit
for
stalled tickets.

Instead of warning users every weekday about tickets that are stalled and
haven’t been touched in a while, I’d like to warn them once or twice a
week.
I can’t run the cron job that seldom, though, or a ticket could go days
longer than it should without being picked up. Is there any way to only
send
an email to a user if the system has not emailed them in N days? I could
add
a column to the Tickets table for this, or add a new table, but I always
like to stay clear of database schema modifications if I can. Besides, I
don’t know how to interface with a custom table using RT SQL.

I wouldn’t alter the schema.

Is there any way of doing this?

You could use a custom field. Something like “Last Email Notification
Sent At” or something equally verbose. :wink:

Then add that CF to your query about which tickets need to get email
notifications.

We do essentially what you are asking about. We leverage two things:

  1. rt-crontool can take multiple --action arguments
  2. A custom (but it could be “cored”) scrip action. The scrip action
    is ModifyCustomField. Here is a link to it:

http://lists.bestpractical.com/pipermail/rt-devel/2016-
December/012601.html

Here is one of our cron jobs that keeps track of when it sent an email
and also sends the email:

0 12 * * * /opt/rt4/bin/rt-crontool --log=warning --search
RT::Search::FromSQL --search-arg ’ Queue = “Access Requests” AND
Status = “activated” AND ( ( “CF.{Renewal Verified At}” IS NULL AND
Created <= “1 year ago” ) OR ( “CF.{Renewal Verified At}” IS NOT NULL
AND “CF.{Renewal Verified At}” <= “1 year ago” ) ) AND ( “CF.{Renewal
Verification Sent At}” IS NULL OR “CF.{Renewal Verification Sent At}”
<= “20 days ago” ) ’ --transaction-type Create --transaction last
–template “Access Request Renewal Verification” --action
RT::Action::MailRequestors --action-arg “” --action
RT::Action::ModifyCustomField --action-arg ‘{ “name”: “Renewal
Verification Sent At”, “operation”: “set”, “value”: “now” }’

-m

Alex Hall
Automatic Distributors, IT department
ahall@autodist.com

Just download the .bin and move it into
/opt/rt4/lib/RT/Action/ModifyCustomField.pm

-mOn Tue, Jan 17, 2017 at 1:24 PM, Alex Hall ahall@autodist.com wrote:

Thank you, that looks like it’ll work. Did your JSON-like syntax for
updating fields ever make it into core for 4.4.1? I found the attachment in
your linked message, but it’s a bin file and I’m not sure what to do with
it.

On Tue, Jan 17, 2017 at 11:17 AM, Matt Zagrabelny mzagrabe@d.umn.edu wrote:

Hey Alex,

On Mon, Jan 16, 2017 at 8:18 AM, Alex Hall ahall@autodist.com wrote:

Hi all,
RT is sending out notifications for old tickets just like we want it to.
If
a ticket hasn’t been updated in seven days and the status is open or
new,
the owner gets an email every weekday until the ticket is updated. What
I’d
like to do, though, is have a way of changing that “every weekday” bit
for
stalled tickets.

Instead of warning users every weekday about tickets that are stalled
and
haven’t been touched in a while, I’d like to warn them once or twice a
week.
I can’t run the cron job that seldom, though, or a ticket could go days
longer than it should without being picked up. Is there any way to only
send
an email to a user if the system has not emailed them in N days? I could
add
a column to the Tickets table for this, or add a new table, but I always
like to stay clear of database schema modifications if I can. Besides, I
don’t know how to interface with a custom table using RT SQL.

I wouldn’t alter the schema.

Is there any way of doing this?

You could use a custom field. Something like “Last Email Notification
Sent At” or something equally verbose. :wink:

Then add that CF to your query about which tickets need to get email
notifications.

We do essentially what you are asking about. We leverage two things:

  1. rt-crontool can take multiple --action arguments
  2. A custom (but it could be “cored”) scrip action. The scrip action
    is ModifyCustomField. Here is a link to it:

http://lists.bestpractical.com/pipermail/rt-devel/2016-December/012601.html

Here is one of our cron jobs that keeps track of when it sent an email
and also sends the email:

0 12 * * * /opt/rt4/bin/rt-crontool --log=warning --search
RT::Search::FromSQL --search-arg ’ Queue = “Access Requests” AND
Status = “activated” AND ( ( “CF.{Renewal Verified At}” IS NULL AND
Created <= “1 year ago” ) OR ( “CF.{Renewal Verified At}” IS NOT NULL
AND “CF.{Renewal Verified At}” <= “1 year ago” ) ) AND ( “CF.{Renewal
Verification Sent At}” IS NULL OR “CF.{Renewal Verification Sent At}”
<= “20 days ago” ) ’ --transaction-type Create --transaction last
–template “Access Request Renewal Verification” --action
RT::Action::MailRequestors --action-arg “” --action
RT::Action::ModifyCustomField --action-arg ‘{ “name”: “Renewal
Verification Sent At”, “operation”: “set”, “value”: “now” }’

-m


Alex Hall
Automatic Distributors, IT department
ahall@autodist.com

Did your JSON-like syntax for
updating fields ever make it into core for 4.4.1?

Not yet.

-m