From: Michael Orlitzky Date: Sun, 13 Jun 2010 15:41:42 +0000 (-0400) Subject: First attempt at making mailshears report deleted domains as such. X-Git-Tag: 0.0.1~146 X-Git-Url: https://gitweb.michael.orlitzky.com/?a=commitdiff_plain;h=80dbad4600f1f19f21773fd199c895423712049c;p=mailshears.git First attempt at making mailshears report deleted domains as such. --- diff --git a/bin/mailshears b/bin/mailshears index d34ce54..d12bbbd 100755 --- a/bin/mailshears +++ b/bin/mailshears @@ -44,9 +44,32 @@ pgadb = PostfixadminDb.new(Configuration::DBHOST, Configuration::DBUSER, Configuration::DBPASS) + +# First, we find out if any domains have been removed from the +# database but not from the filesystem. +begin + # Get the list of domains according to the filesystem. + fs_domains = dms.get_domains_from_filesystem() +rescue StandardError => e + puts "There was an error retrieving domains from the filesystem: #{e.to_s}" + Kernel.exit(ExitCodes::FILESYSTEM_ERROR) +end + +begin + # ...and according to the Postfixadmin database. + db_domains = pgadb.get_domains_from_db() +rescue DatabaseError => e + puts "There was an error connecting to the database: #{e.to_s}" + Kernel.exit(ExitCodes::DATABASE_ERROR) +end + + +# Then, we get the list of accounts that have been removed. We did +# the domains first so that, if a domain was removed, we can avoid +# reporting each of its accounts individually. begin # Get the list of accounts according to the filesystem. - fs_accts = dms.get_accounts_from_filesystem() + fs_accts = dms.get_accounts_from_filesystem(db_domains) rescue StandardError => e puts "There was an error retrieving accounts from the filesystem: #{e.to_s}" Kernel.exit(ExitCodes::FILESYSTEM_ERROR) @@ -61,17 +84,20 @@ rescue DatabaseError => e end -# Figure out which addresses are in the filesystem, but not in the -# database. -difference = fs_accts - db_accts +# The list of domains on the filesystem that aren't in the DB. +dom_difference = fs_domains - db_domains + +# And accounts on the filesystem that aren't in the DB and don't +# belong to a domain that was removed. +acct_difference = fs_accts - db_accts # Don't output any unnecessary junk. Cron might mail it to someone. -if difference.size > 0 +if dom_difference.size > 0 or acct_difference.size > 0 # The header that we output before the list of accounts. # Just the path of this script, and the current time. header = "#{$0}, " - + current_time = Time.now() if current_time.respond_to?(:iso8601) # Somehow this method is missing on some machines. @@ -80,9 +106,10 @@ if difference.size > 0 # Fall back to whatever this looks like. header += current_time.to_s end - + puts header puts '-' * header.size # Underline the header. - puts difference + puts dom_difference + puts acct_difference puts "" end