From 80dbad4600f1f19f21773fd199c895423712049c Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sun, 13 Jun 2010 11:41:42 -0400 Subject: [PATCH] First attempt at making mailshears report deleted domains as such. --- bin/mailshears | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) 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 -- 2.44.2