| #!/usr/bin/python |
| |
| import datetime |
| import getpass |
| import optparse |
| import os |
| import socket |
| |
| |
| def read_loascertstatus(): |
| # prodcertstatus --simple_output returns the #of seconds remaining before the |
| # cert is expired. |
| f = os.popen('prodcertstatus --simple_output | grep LOAS') |
| loas_expire = int(f.read().split(':')[1]) |
| f.close() |
| return loas_expire |
| |
| |
| def main(): |
| parser = optparse.OptionParser() |
| parser.add_option('--expire_within', help='Send email if cert will expire ' |
| 'within this time window in seconds.', |
| type='int', dest='expire_within', default=24*3600) |
| parser.add_option('--to', help='Comma separated Email notification TO ' |
| 'recipients.', dest='to', type='string', default='') |
| parser.add_option('--cc', help='Comma separated Email notification CC ' |
| 'recipients.', dest='cc', type='string', default='') |
| options, _ = parser.parse_args() |
| |
| loas_expire = read_loascertstatus() |
| host = socket.gethostname() |
| if loas_expire < options.expire_within: |
| tt = datetime.timedelta(seconds=loas_expire) |
| body_text = ('prod access cert (LOAS) for %s will expire within %s on %s.' |
| % (getpass.getuser(), tt, host)) |
| if not options.to: |
| print body_text |
| else: |
| email_to = ['%s@google.com' % to.strip() for to in options.to.split(',')] |
| |
| p = os.popen('/usr/sbin/sendmail -t', 'w') |
| p.write('To: %s\n' % ','.join(email_to)) |
| if options.cc: |
| email_cc = ['%s@google.com' % cc.strip() |
| for cc in options.cc.split(',')] |
| p.write('Cc: %s\n' % ','.join(email_cc)) |
| |
| p.write('Subject: Prod access cert (LOAS) for %s will expire soon on %s.' |
| '\n' % (getpass.getuser(), host)) |
| p.write('Content-Type: text/plain') |
| p.write('\n') # blank line separating headers from body |
| p.write(body_text) |
| p.write('\n') |
| return_code = p.close() |
| if return_code is not None: |
| print 'Sendmail exit status %s' % return_code |
| |
| |
| if __name__ == '__main__': |
| main() |