summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-07-26 14:27:53 -0500
committerMitch Jackson <mitch@freeside.biz>2018-10-09 12:35:10 -0400
commit345dfc58a6230d9bc5e88c063a3fc14f3647e68d (patch)
tree462f3e8b3da6d1ddc17248597bd6d18e3f35c5ec
parentd80c2af2c03dc24ea8591459b44be0106aaf9275 (diff)
RT#38217: Send email when logging conditions are met
-rw-r--r--FS/FS/Log.pm2
-rw-r--r--FS/FS/Upgrade.pm3
-rw-r--r--FS/FS/log.pm47
-rw-r--r--httemplate/edit/log_email.html4
-rw-r--r--httemplate/search/log.html21
5 files changed, 62 insertions, 15 deletions
diff --git a/FS/FS/Log.pm b/FS/FS/Log.pm
index b11630b..3facb97 100644
--- a/FS/FS/Log.pm
+++ b/FS/FS/Log.pm
@@ -9,7 +9,7 @@ use vars qw(@STACK @LEVELS);
# override the stringification of @_ with something more sensible.
BEGIN {
- @LEVELS = qw(debug info notice warning error critical alert emergency);
+ @LEVELS = qw(debug info warning error critical);
foreach my $l (@LEVELS) {
my $sub = sub {
diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm
index f26c6a3..bbd1ee1 100644
--- a/FS/FS/Upgrade.pm
+++ b/FS/FS/Upgrade.pm
@@ -335,6 +335,9 @@ sub upgrade_data {
#fix whitespace - before cust_main
'cust_location' => [],
+ #remap log levels
+ 'log' => [],
+
#cust_main (tokenizes cards, remove paycvv from history, locations, cust_payby, etc)
# (handles payinfo encryption/tokenization across all relevant tables)
'cust_main' => [],
diff --git a/FS/FS/log.pm b/FS/FS/log.pm
index 769d6fc..2543aea 100644
--- a/FS/FS/log.pm
+++ b/FS/FS/log.pm
@@ -6,6 +6,7 @@ use FS::Record qw( qsearch qsearchs dbdef );
use FS::UID qw( dbh driver_name );
use FS::log_context;
use FS::log_email;
+use FS::upgrade_journal;
=head1 NAME
@@ -381,6 +382,52 @@ sub search {
};
}
+sub _upgrade_data {
+ my ($class, %opts) = @_;
+
+ return if FS::upgrade_journal->is_done('log__remap_levels');
+
+ tie my %levelmap, 'Tie::IxHash',
+# 0 => 0, #debug
+# 1 => 1, #info
+ 2 => 1, #notice -> info
+ 3 => 2, #warning
+ 4 => 3, #error
+ 5 => 4, #critical
+ 6 => 4, #alert -> critical
+ 7 => 4, #emergency -> critical
+ ;
+
+ # this method should never autocommit
+ # should have been set in upgrade, but just in case...
+ local $FS::UID::AutoCommit = 0;
+
+ # FS::log has no replace method
+ # in practice, only debug/info/warning/error were used,
+ # so this should only hit warning/error
+ foreach my $old (keys %levelmap) {
+ my $sql = 'UPDATE log SET level=' . dbh->quote($levelmap{$old}) . ' WHERE level=' . dbh->quote($old);
+ warn $sql unless $opts{'quiet'};
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute() or die $sth->errstr;
+ $sth->finish();
+ }
+
+ foreach my $log_email (
+ qsearch('log_email',{ 'min_level' => { 'op' => '>=', 'value' => '2' } })
+ ) {
+ $log_email->min_level($levelmap{$log_email->min_level});
+ my $error = $log_email->replace;
+ if ($error) {
+ dbh->rollback;
+ die $error;
+ }
+ }
+
+ FS::upgrade_journal->set_done('log__remap_levels');
+
+}
+
=back
=head1 BUGS
diff --git a/httemplate/edit/log_email.html b/httemplate/edit/log_email.html
index 709a240..4483190 100644
--- a/httemplate/edit/log_email.html
+++ b/httemplate/edit/log_email.html
@@ -10,8 +10,8 @@
},
{ 'field' => 'min_level',
'type' => 'select',
- 'options' => [ 0..7 ],
- 'labels' => { map {$_ => $FS::Log::LEVELS[$_]} 0..7 },
+ 'options' => [ 0..4 ],
+ 'labels' => { map {$_ => $FS::Log::LEVELS[$_]} 0..4 },
'curr_value' => scalar($cgi->param('min_level')),
},
'to_addr',
diff --git a/httemplate/search/log.html b/httemplate/search/log.html
index 9a61a71..fdec15b 100644
--- a/httemplate/search/log.html
+++ b/httemplate/search/log.html
@@ -81,15 +81,15 @@ a:visited {text-decoration: none}
<TD>Level
<& /elements/select.html,
field => 'min_level',
- options => [ 0..7 ],
- labels => { map {$_ => $FS::Log::LEVELS[$_]} 0..7 },
+ options => [ 0..4 ],
+ labels => { map {$_ => $FS::Log::LEVELS[$_]} 0..4 },
curr_value => scalar($cgi->param('min_level')),
&>
to
<& /elements/select.html,
field => 'max_level',
- options => [ 0..7 ],
- labels => { map {$_ => $FS::Log::LEVELS[$_]} 0..7 },
+ options => [ 0..4 ],
+ labels => { map {$_ => $FS::Log::LEVELS[$_]} 0..4 },
curr_value => scalar($cgi->param('max_level')),
&>
</TD>
@@ -192,14 +192,11 @@ my $object_link_sub = sub {
};
my @colors = (
- '404040', #debug
- '0000aa', #info
- '00aa00', #notice
- 'aa0066', #warning
- '000000', #error
- 'aa0000', #critical
- 'ff0000', #alert
- 'ff0000', #emergency
+ '404040', #debug, gray
+ '000000', #info, black
+ '0000aa', #warning, blue
+ 'aa0066', #error, purple
+ 'ff0000', #critical, red
);
my $color_sub = sub { $colors[ $_[0]->level ]; };