summaryrefslogtreecommitdiff
path: root/FS/FS/log.pm
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-07-26 14:27:53 -0500
committerJonathan Prykop <jonathan@freeside.biz>2016-07-26 14:27:53 -0500
commit5f563d5ac7e6e1e93cca382baa42ee106f3db5a0 (patch)
treee9a436a4553b19573d4ee5ac66e201889561c330 /FS/FS/log.pm
parent0b08a87698a2278f3806a66dd6c93b24b18d4767 (diff)
RT#38217: Send email when logging conditions are met
Diffstat (limited to 'FS/FS/log.pm')
-rw-r--r--FS/FS/log.pm47
1 files changed, 47 insertions, 0 deletions
diff --git a/FS/FS/log.pm b/FS/FS/log.pm
index 1d4df73..b8f51cd 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
@@ -383,6 +384,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