diff options
| author | Jonathan Prykop <jonathan@freeside.biz> | 2016-07-26 14:27:53 -0500 | 
|---|---|---|
| committer | Mitch Jackson <mitch@freeside.biz> | 2018-10-09 12:35:10 -0400 | 
| commit | 345dfc58a6230d9bc5e88c063a3fc14f3647e68d (patch) | |
| tree | 462f3e8b3da6d1ddc17248597bd6d18e3f35c5ec /FS | |
| parent | d80c2af2c03dc24ea8591459b44be0106aaf9275 (diff) | |
RT#38217: Send email when logging conditions are met
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/Log.pm | 2 | ||||
| -rw-r--r-- | FS/FS/Upgrade.pm | 3 | ||||
| -rw-r--r-- | FS/FS/log.pm | 47 | 
3 files changed, 51 insertions, 1 deletions
| diff --git a/FS/FS/Log.pm b/FS/FS/Log.pm index b11630bc9..3facb97df 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 f26c6a338..bbd1ee12b 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 769d6fce1..2543aeaf2 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 | 
