[freeside-commits] branch FREESIDE_4_BRANCH updated. 3efb9e9aaebde62332f3a03c3c6970747eef9501

Jonathan Prykop jonathan at 420.am
Thu Jun 16 22:46:05 PDT 2016


The branch, FREESIDE_4_BRANCH has been updated
       via  3efb9e9aaebde62332f3a03c3c6970747eef9501 (commit)
      from  f638fb8413731c79c66f08a574ec177429e32ace (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3efb9e9aaebde62332f3a03c3c6970747eef9501
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Fri Jun 17 00:31:09 2016 -0500

    RT#39627: System log daily context also includes Cron::bill and Cron::upload results

diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index 7bddc87..361360a 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -6651,6 +6651,7 @@ sub tables_hashref {
         'min_level', 'int',  'NULL', '', '', '',
         'msgnum', 'int', '',  '', '', '',
         'to_addr', 'varchar', 'NULL',     255, '', '',
+        'context_height',  'int', 'NULL', '', '', '', 
       ],
       'primary_key'  => 'logemailnum',
       'unique'       => [],
diff --git a/FS/FS/log.pm b/FS/FS/log.pm
index 95bc4c4..1d4df73 100644
--- a/FS/FS/log.pm
+++ b/FS/FS/log.pm
@@ -81,15 +81,16 @@ sub insert {
   my $self = shift;
   my $error = $self->SUPER::insert;
   return $error if $error;
-  my $contexts = {}; #for quick checks when sending emails
-  foreach ( @_ ) {
+  my $contexts = {};       # for quick checks when sending emails
+  my $context_height = @_; # also for email check
+  foreach ( @_ ) { # ordered from least to most specific
     my $context = FS::log_context->new({
         'lognum'  => $self->lognum,
         'context' => $_
     });
     $error = $context->insert;
     return $error if $error;
-    $contexts->{$_} = 1;
+    $contexts->{$_} = $context_height--;
   }
   foreach my $log_email (
     qsearch('log_email',
@@ -102,8 +103,9 @@ sub insert {
       }
     )
   ) {
-    # shouldn't be a lot of these, so not packing this into the qsearch
+    # shouldn't be a lot of log_email records, so not packing these checks into the qsearch
     next if $log_email->context && !$contexts->{$log_email->context};
+    next if $log_email->context_height && ($contexts->{$log_email->context} > $log_email->context_height);
     my $msg_template = qsearchs('msg_template',{ 'msgnum' => $log_email->msgnum });
     unless ($msg_template) {
       warn "Could not send email when logging, could not load message template for logemailnum " . $log_email->logemailnum;
@@ -346,9 +348,16 @@ sub search {
 
   if ( $params->{'context'} ) {
     my $quoted = dbh->quote($params->{'context'});
-    push @where, 
-      "EXISTS(SELECT 1 FROM log_context WHERE log.lognum = log_context.lognum ".
-      "AND log_context.context = $quoted)";
+    if ( $params->{'context_height'} =~ /^\d+$/ ) {
+      my $subq = 'SELECT context FROM log_context WHERE log.lognum = log_context.lognum'.
+                 ' ORDER BY logcontextnum DESC LIMIT '.$params->{'context_height'};
+      push @where,
+        "EXISTS(SELECT 1 FROM ($subq) AS log_context_x WHERE log_context_x.context = $quoted)";
+    } else {
+      push @where, 
+        "EXISTS(SELECT 1 FROM log_context WHERE log.lognum = log_context.lognum ".
+        "AND log_context.context = $quoted)";
+    }
   }
 
   # agent virtualization
diff --git a/FS/FS/log_email.pm b/FS/FS/log_email.pm
index 9c53c23..a055cb4 100644
--- a/FS/FS/log_email.pm
+++ b/FS/FS/log_email.pm
@@ -42,6 +42,9 @@ The following fields are currently supported:
 
 =item to_addr - who the email will be sent to (in addition to any bcc on the template)
 
+=item context_height - number of context stack levels to match against 
+(0 or null matches against full stack, 1 only matches lowest level context, 2 matches lowest two levels, etc.)
+
 =back
 
 =head1 METHODS
@@ -88,6 +91,7 @@ sub check {
     || $self->ut_number('min_level')
     || $self->ut_foreign_key('msgnum', 'msg_template', 'msgnum')
     || $self->ut_textn('to_addr')
+    || $self->ut_numbern('context_height')
   ;
   return $error if $error;
 
diff --git a/httemplate/edit/log_email.html b/httemplate/edit/log_email.html
index 709a240..0c98046 100644
--- a/httemplate/edit/log_email.html
+++ b/httemplate/edit/log_email.html
@@ -8,6 +8,12 @@
                               'labels' => { '' => '(all)', map { $_ => $_ } @contexts },
                               'curr_value' => scalar($cgi->param('context')),
                             },
+                            { 'field' => 'context_height',
+                              'type' => 'checkbox',
+                              'postfix' => 'Only match most specific context',
+                              'value' => 1,
+                              'curr_value' => scalar($cgi->param('context_height')),
+                            },
                             { 'field' => 'min_level',
                               'type'  => 'select',
                               'options' => [ 0..7 ],
@@ -24,6 +30,7 @@
                           ],
               'labels' => { 
                             'context' => 'Context',
+                            'context_height' => '',
                             'min_level' => 'Min. Level',
                             'to_addr' => 'To',
                             'msgnum' => 'Message',
@@ -44,6 +51,10 @@ die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right([ 'View system logs', 'Configuration' ]);
 
 my $msgnum = $cgi->param('msgnum');
+
+# XXX This attempt to set a default message isn't working, not sure why
+#     $msgnum gets set correctly, but isn't selected in the popup window...fix later
+
 unless ($msgnum) {
   my ($msg_template) = qsearch('msg_template',{ msgname => 'System log' });
   # doesn't seem worth having a config just for the default selected template
diff --git a/httemplate/search/log.html b/httemplate/search/log.html
index b607f50..111200f 100644
--- a/httemplate/search/log.html
+++ b/httemplate/search/log.html
@@ -101,6 +101,12 @@ a:visited {text-decoration: none}
       labels => { map {$_, $_} @contexts },
       curr_value => ($cgi->param('context') || ''),
     &>
+    <BR><& /elements/checkbox.html,
+      'field' => 'context_height',
+      'postfix' => 'Only match most specific context',
+      'value' => 1,
+      'curr_value' => scalar($cgi->param('context_height')),
+    &>
   </TD>
 </TR>
 <TR>
@@ -214,7 +220,7 @@ $cgi->param('max_level', 7) unless defined($cgi->param('max_level'));
 my %search = ();
 $search{'date'} = [ FS::UI::Web::parse_beginning_ending($cgi) ];
 $search{'level'} = [ $cgi->param('min_level'), $cgi->param('max_level') ];
-foreach my $param (qw(agentnum context tablename tablenum custnum message)) {
+foreach my $param (qw(agentnum context context_height tablename tablenum custnum message)) {
   if ( $cgi->param($param) ) {
     $search{$param} = $cgi->param($param);
   }

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

Summary of changes:
 FS/FS/Schema.pm                |    1 +
 FS/FS/log.pm                   |   23 ++++++++++++++++-------
 FS/FS/log_email.pm             |    4 ++++
 httemplate/edit/log_email.html |   11 +++++++++++
 httemplate/search/log.html     |    8 +++++++-
 5 files changed, 39 insertions(+), 8 deletions(-)




More information about the freeside-commits mailing list