def main(argv = sys.argv):

    logging.basicConfig(format = '[%(levelname)s] %(message)s', level = logging.INFO)

    logger.info('CMDLINE %s' % ' '.join(argv))

    parser = argparse.ArgumentParser()
    parser.add_argument('--npings', metavar = 'N', dest = 'npings', type = int, default = 0)
    parser.add_argument('rtt_threshold', metavar = 'RTT_THRESHOLD', type = int)
    parser.add_argument('transmit_threshold', metavar = 'TRANSMIT_THRESHOLD', type = float)
    parser.add_argument('pings_files', metavar = 'PINGS_FILE', nargs = '+', type = str)

    args = parser.parse_args(argv[1:])

    always_transmitting = None
    for i, filename in enumerate(args.pings_files, 1):
        pings = ReadZMapScan.read_pings(filename)
        transmitting = set([ip for ip in pings if has_transmitted(pings[ip],
                                                                  args.npings,
                                                                  args.rtt_threshold,
                                                                  args.transmit_threshold)])
        if always_transmitting == None:
            always_transmitting = transmitting
        always_transmitting &= transmitting

        print i, len(pings), len(transmitting), len(always_transmitting)
    #print '\n'.join(map(str, always_transmitting))

    return 0
def main(argv = sys.argv):

    logging.basicConfig(format = '[%(levelname)s] %(message)s', level = logging.INFO)

    logger.info('CMDLINE %s' % ' '.join(argv))
    print '# CMDLINE %s' % ' '.join(argv)

    parser = argparse.ArgumentParser()
    parser.add_argument('--ndevices', metavar = 'N', dest = 'ndevices', type = int, default = None)
    parser.add_argument('--has-timestamps', '-t', dest = 'has_timestamps',
                        action = 'store_true', default = True)
    parser.add_argument('--use-initial', metavar = 'N', dest = 'use_initial',
                        type = int, default = None)
    parser.add_argument('rtt_threshold', metavar = 'RTT_THRESHOLD', type = int)
    parser.add_argument('pings_file', metavar = 'PINGS_FILE', type = str)

    args = parser.parse_args(argv[1:])

    for i, (IP, pings) in enumerate(ReadZMapScan.list_pings(args.pings_file, args.has_timestamps)):
        if args.ndevices > 0 and args.ndevices <= i:
            break
        print >> sys.stderr, '\r                        \rprocessing device %d' % (i + 1),
        ntransmitting = 0
        for j, (ts, rtt, diff) in enumerate(pings):
            if args.use_initial > 0 and args.use_initial <= j:
                break
            if rtt < args.rtt_threshold:
                ntransmitting += 1
        prob = ntransmitting / float(len(pings))
        if args.use_initial:
            prob = ntransmitting / float(args.use_initial)
        print IP, prob
    print >> sys.stderr

    return 0
def main(argv = sys.argv):

    logging.basicConfig(format = '[%(levelname)s] %(message)s', level = logging.INFO)

    logger.info('CMDLINE %s' % ' '.join(argv))
    print '# CMDLINE: %s' % ' '.join(argv)

    parser = argparse.ArgumentParser()
    parser.add_argument('--ndevices', metavar = 'N', dest = 'ndevices', type = int, default = None)
    parser.add_argument('--has-timestamps', '-t', dest = 'has_timestamps',
                        action = 'store_true', default = True)
    parser.add_argument('--exclude-file', dest = 'exclude_file', type = str, default = None)
    parser.add_argument('--skip-initial', metavar = 'N', dest = 'skip_initial',
                        type = int, default = None)
    parser.add_argument('--use-every', metavar = 'N', dest = 'use_every',
                        type = int, default = None)
    parser.add_argument('rtt_threshold', metavar = 'RTT_THRESHOLD', type = int)
    parser.add_argument('npings', metavar = 'NPINGS', type = int)
    parser.add_argument('transmit_threshold', metavar = 'TRANSMIT_THRESHOLD', type = float)
    parser.add_argument('pings_file', metavar = 'PINGS_FILE', type = str)

    args = parser.parse_args(argv[1:])

    exclude_set = read_exclude_file(args.exclude_file)

    transmitting = collections.defaultdict(set)
    nused = 0
    for i, (IP, pings) in enumerate(ReadZMapScan.list_pings(args.pings_file, args.has_timestamps)):
        if args.ndevices and args.ndevices <= i:
            break
        print >> sys.stderr, '\r                        \r processing device %d' % (i + 1)
        if IP in exclude_set:
            continue
        nused += 1
        for j, (ts, rtt, diff) in enumerate(pings):
            if args.skip_initial > 0 and j < args.skip_initial:
                continue
            if args.use_every > 0 and (j % args.use_every) != 0:
                continue
            try:
                nhigh = 0
                for w in range(0, args.npings):
                    _, rtt, _ = pings[j + w]
                    if args.rtt_threshold < rtt:
                        nhigh += 1
                        if args.transmit_threshold < nhigh:
                            break

                else:
                    transmitting[j].add(IP)
                    print j, IP

            except IndexError:
                continue
    print >> sys.stderr

    always_transmitting = None
    for i, devices in sorted(transmitting.items()):
        if always_transmitting == None:
            always_transmitting = devices
        always_transmitting &= devices

        print i, len(devices), len(always_transmitting), len(always_transmitting) / float(nused)

    return 0