예제 #1
0
파일: get_data.py 프로젝트: hatnote/top
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)
예제 #2
0
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
예제 #3
0
파일: get_data.py 프로젝트: hatnote/top
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
예제 #4
0
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)