def main(): parser = get_argparser() args = parser.parse_args() if args.backfill: backfill(args.lang, args.project, args.backfill, args.update) return if not args.date: input_date = date.today() else: input_date = datetime.strptime(args.date, '%Y%m%d').date() if args.poll: poll_td = parse_timedelta(args.poll) if args.poll_interval: poll_interval = parse_timedelta(args.poll_interval) else: poll_interval = POLL_INTERVAL # if args.poll % POLL_INCR_MINS: # raise ValueError('poll time must be in increments of %r minutes' # % POLL_INCR_MINS) err_write = sys.stderr.write count = 0 max_time = datetime.now() + poll_td while 1: count += 1 try: save_traffic_stats(args.lang, args.project, input_date) break except (urllib2.HTTPError, urllib2.URLError) as he: # tried to be nice but the API gives back all sorts of statuses # if he.getcode() != 404: # raise try: status_code = he.getcode() except: status_code = he if (datetime.now() + poll_interval) <= max_time: if count == 1: err_write('# ' + datetime.now().isoformat()) err_write(' - got %s - polling every %r mins until %s.\n' % (status_code, poll_interval.total_seconds() / 60.0, max_time.isoformat())) time.sleep(poll_interval.total_seconds()) else: err_write('\n!! - ') err_write(datetime.now().isoformat()) err_write(' - no results after %r attempts and %r minutes,' ' exiting.\n\n' % (count, poll_td.total_seconds() / 60)) break else: save_traffic_stats(args.lang, args.project, input_date) if args.update: print update_charts(input_date, args.lang, args.project)
def backfill(lang, project, days, update, log_rec): for day in range(int(days), 1, -1): input_date = date.today() - timedelta(days=day) save_traffic_stats(lang, project, input_date) if update: update_charts(input_date, lang, project) log_rec.success('finished backfilling {} days', days) return
def main(): parser = get_argparser() args = parser.parse_args() if args.backfill: backfill(args.lang, args.project, args.backfill, args.update) return if not args.date: input_date = date.today() else: input_date = datetime.strptime(args.date, '%Y%m%d').date() if args.poll: poll_td = parse_timedelta(args.poll) if args.poll_interval: poll_interval = parse_timedelta(args.poll_interval) else: poll_interval = POLL_INTERVAL # if args.poll % POLL_INCR_MINS: # raise ValueError('poll time must be in increments of %r minutes' # % POLL_INCR_MINS) err_write = sys.stderr.write count = 0 max_time = datetime.now() + poll_td while 1: count += 1 try: save_traffic_stats(args.lang, args.project, input_date) break except (urllib2.HTTPError, urllib2.URLError) as he: # tried to be nice but the API gives back all sorts of statuses # if he.getcode() != 404: # raise try: status_code = he.getcode() except: status_code = he if (datetime.now() + poll_interval) <= max_time: if count == 1: err_write('# ' + datetime.now().isoformat()) err_write( ' - got %s - polling every %r mins until %s.\n' % (status_code, poll_interval.total_seconds() / 60.0, max_time.isoformat())) time.sleep(poll_interval.total_seconds()) else: err_write('\n!! - ') err_write(datetime.now().isoformat()) err_write(' - no results after %r attempts and %r minutes,' ' exiting.\n\n' % (count, poll_td.total_seconds() / 60)) break else: save_traffic_stats(args.lang, args.project, input_date) if args.update: print update_charts(input_date, args.lang, args.project)