summaryrefslogtreecommitdiff
path: root/FS/FS/log.pm
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-06-17 00:31:09 -0500
committerJonathan Prykop <jonathan@freeside.biz>2016-06-17 00:37:06 -0500
commit3efb9e9aaebde62332f3a03c3c6970747eef9501 (patch)
treed48dce3c21660501b5c4642a14b14ce8eb5488c8 /FS/FS/log.pm
parentf638fb8413731c79c66f08a574ec177429e32ace (diff)
RT#39627: System log daily context also includes Cron::bill and Cron::upload results
Diffstat (limited to 'FS/FS/log.pm')
-rw-r--r--FS/FS/log.pm23
1 files changed, 16 insertions, 7 deletions
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