[Rt-commit] rt branch 5.0/add-dashboard-list-to-email-cli created. rt-5.0.3-119-g1507ff6971

BPS Git Server git at git.bestpractical.com
Wed Sep 14 15:14:48 UTC 2022


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".

The branch, 5.0/add-dashboard-list-to-email-cli has been created
        at  1507ff697109d6f2d5bcb35ecaf385379ab9e5f6 (commit)

- Log -----------------------------------------------------------------
commit 1507ff697109d6f2d5bcb35ecaf385379ab9e5f6
Author: Jason Crome <jcrome at bestpractical.com>
Date:   Wed Sep 14 11:12:18 2022 -0400

    Pass optional list of dashboard IDs to email

diff --git a/lib/RT/Dashboard/Mailer.pm b/lib/RT/Dashboard/Mailer.pm
index 5eca55a391..b433260a8a 100644
--- a/lib/RT/Dashboard/Mailer.pm
+++ b/lib/RT/Dashboard/Mailer.pm
@@ -61,7 +61,7 @@ use RT::Interface::Web;
 use File::Temp 'tempdir';
 use HTML::Scrubber;
 use URI::QueryParam;
-use List::MoreUtils 'uniq';
+use List::MoreUtils qw( any none uniq );
 
 sub MailDashboards {
     my $self = shift;
@@ -70,6 +70,7 @@ sub MailDashboards {
         DryRun => 0,
         Time   => time,
         User   => undef,
+        Dashboards => 0,
         @_,
     );
 
@@ -78,6 +79,17 @@ sub MailDashboards {
     my $from = $self->GetFrom();
     $RT::Logger->debug("Sending email from $from");
 
+    my @dashboards;
+    if( $args{ Dashboards } ) {
+        @dashboards = split(/,/, $args{ Dashboards });
+        $RT::Logger->info( "Non-numeric dashboard IDs are not permitted" ) if any{ $_ !~ /^\d+$/ } @dashboards;
+        @dashboards = grep { $_ =~ /^\d+$/ } @dashboards;
+        if( @dashboards == 0 ) {
+            $RT::Logger->info( "--dashboards option given but no valid dashboard IDs provided; exiting" );
+            return;
+        }
+    }
+
     # look through each user for her subscriptions
     my $Users = RT::Users->new(RT->SystemUser);
     $Users->LimitToPrivileged;
@@ -106,6 +118,7 @@ sub MailDashboards {
                 Subscription => $subscription,
                 User         => $user,
                 LocalTime    => [$hour, $dow, $dom],
+                Dashboards   => \@dashboards,
             );
 
             my $recipients = $subscription->SubValue('Recipients');
@@ -227,12 +240,19 @@ sub IsSubscriptionReady {
         Subscription => undef,
         User         => undef,
         LocalTime    => [0, 0, 0],
+        Dashboards   => undef,
         @_,
     );
 
     return 1 if $args{All};
 
-    my $subscription  = $args{Subscription};
+    my $subscription = $args{Subscription};
+    my $DashboardId  = $subscription->SubValue('DashboardId');
+    my @dashboards   = @{ $args{ Dashboards } };
+    if( @dashboards and none { $_ == $DashboardId } @dashboards) {
+        $RT::Logger->info("Dashboard $DashboardId not in list of requested dashboards; skipping");
+        return;
+    }
 
     my $counter       = $subscription->SubValue('Counter') || 0;
 
diff --git a/sbin/rt-email-dashboards.in b/sbin/rt-email-dashboards.in
index 469c9208ec..2492cf3775 100644
--- a/sbin/rt-email-dashboards.in
+++ b/sbin/rt-email-dashboards.in
@@ -70,7 +70,7 @@ BEGIN { # BEGIN RT CMD BOILERPLATE
 my %opts;
 use Getopt::Long;
 GetOptions( \%opts,
-    "help|h", "dryrun", "time=i", "epoch=i", "all", "log=s", "user=s"
+    "help|h", "dryrun", "time=i", "epoch=i", "all", "log=s", "user=s", "dashboards=s"
 );
 
 if ($opts{'help'}) {
@@ -100,11 +100,12 @@ RT::Init();
 
 require RT::Dashboard::Mailer;
 RT::Dashboard::Mailer->MailDashboards(
-    All    => $opts{all},
-    DryRun => $opts{dryrun},
-    Time   => ($opts{time} || $opts{epoch} || time), # epoch is the old-style
-    User   => $opts{user},
-    Opts   => \%opts,
+    All        => $opts{all},
+    DryRun     => $opts{dryrun},
+    Time       => ($opts{time} || $opts{epoch} || time), # epoch is the old-style
+    User       => $opts{user},
+    Dashboards => $opts{dashboards},
+    Opts       => \%opts,
 );
 
 =head1 NAME
@@ -151,6 +152,12 @@ Display this documentation
 Figure out which dashboards would be sent, but don't actually generate or email
 any of them
 
+=item --dashboards DASHBOARD_IDS
+
+A comma-separated list of dashboard IDs to send emails for. Only dashboards in
+this list will be sent. Non-integer dashboard IDs will be skipped, and if all
+IDs are invalid, the script will abort.
+
 =item --time SECONDS
 
 Instead of using the current time to figure out which dashboards should be

-----------------------------------------------------------------------


hooks/post-receive
-- 
rt


More information about the rt-commit mailing list