1#!/usr/bin/python
2
3import datetime
4import getpass
5import optparse
6import os
7import socket
8
9
10def read_loascertstatus():
11  # prodcertstatus --simple_output returns the #of seconds remaining before the
12  # cert is expired.
13  f = os.popen('prodcertstatus --simple_output | grep LOAS')
14  loas_expire = int(f.read().split(':')[1])
15  f.close()
16  return loas_expire
17
18
19def main():
20  parser = optparse.OptionParser()
21  parser.add_option('--expire_within', help='Send email if cert will expire '
22                    'within this time window in seconds.',
23                    type='int', dest='expire_within', default=24*3600)
24  parser.add_option('--to', help='Comma separated Email notification TO '
25                    'recipients.', dest='to', type='string', default='')
26  parser.add_option('--cc', help='Comma separated Email notification CC '
27                    'recipients.', dest='cc', type='string', default='')
28  options, _ = parser.parse_args()
29
30  loas_expire = read_loascertstatus()
31  host = socket.gethostname()
32  if loas_expire < options.expire_within:
33    tt = datetime.timedelta(seconds=loas_expire)
34    body_text = ('prod access cert (LOAS) for %s will expire within %s on %s.'
35                 % (getpass.getuser(), tt, host))
36    if not options.to:
37      print body_text
38    else:
39      email_to = ['%s@google.com' % to.strip() for to in options.to.split(',')]
40
41      p = os.popen('/usr/sbin/sendmail -t', 'w')
42      p.write('To: %s\n' % ','.join(email_to))
43      if options.cc:
44        email_cc = ['%s@google.com' % cc.strip()
45                    for cc in options.cc.split(',')]
46        p.write('Cc: %s\n' % ','.join(email_cc))
47
48      p.write('Subject: Prod access cert (LOAS) for %s will expire soon on %s.'
49              '\n' % (getpass.getuser(), host))
50      p.write('Content-Type: text/plain')
51      p.write('\n')  # blank line separating headers from body
52      p.write(body_text)
53      p.write('\n')
54      return_code = p.close()
55      if return_code is not None:
56        print 'Sendmail exit status %s' % return_code
57
58
59if __name__ == '__main__':
60  main()
61