普通文本  |  61行  |  2.02 KB

#!/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()