blob: f0685772e15824f3547f9713417f341a5b85ba44 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Watch for rietveld issues with the commit bit set but no activity."""
import datetime
import logging
import optparse
import os
import re
import sys
import time
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import find_depot_tools # pylint: disable=W0611
import breakpad
import rietveld
def seconds(td):
return td.seconds + td.days * 24 * 3600
def to_epoch(date_str):
dt = datetime.datetime(*map(int, re.split('[^\d]', date_str)[:-1]))
return seconds(dt - datetime.datetime(1970, 1, 1))
def main():
parser = optparse.OptionParser(
description=sys.modules['__main__'].__doc__)
parser.add_option('-d', '--delay', default=3*60*60, type='int')
parser.add_option('-u', '--user')
parser.add_option('-v', '--verbose', action='store_true')
options, args = parser.parse_args(None)
if options.verbose:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.ERROR)
if len(args) != 1:
parser.error('Need 1 arg')
url = args[0].rstrip('/') + '/'
if not 'http' in url:
url = 'http://' + url
obj = rietveld.Rietveld(args[0], options.user, None)
notified = []
while True:
now = time.time()
earliest = now - options.delay
for issue in obj.search(commit='1', closed='2'):
print '%d' % issue['issue']
if issue['issue'] in notified:
continue
if (not issue['base_url'] or
to_epoch(issue['modified']) < earliest):
data = ['%s%d' % (url, issue['issue']), issue['base_url']]
breakpad.SendStack(str(now), data)
notified.append(issue['issue'])
time.sleep(5*60)
return 0
if __name__ == '__main__':
sys.exit(main())