#!/usr/bin/env python
# -*- coding: utf-8 -*-

import shock

import click


@click.group()
def cli():
    pass


@cli.command()
def version():
    """
    版本号
    """
    print shock.__version__


@cli.command()
@click.option('--concurrent', '-c', type=int, default=10, help='spawn users, 10')
@click.option('--reps', '-r', type=int, default=10, help='run times, 10')
@click.option('--processes', '-p', default=1, type=int, help='process count, 1')
@click.option('--url', '-u', help='url, like 127.0.0.1:7777, ws://127.0.0.1:8000/echo', required=True)
@click.option('--msg_cmd', '-m', default=1, type=int, help='msg cmd, 1')
@click.option('--timeout', '-o', default=5, type=int, help='timeout, 5')
def echo(concurrent, reps, url, msg_cmd, timeout, processes):
    """
    测试send & recv
    :return:
    """
    obj = shock.ShockEcho(concurrent, reps, url, msg_cmd, timeout, processes)
    obj.run()
    click.secho('done', fg='green')
    click.secho('Expected Transactions:     %-10d hits' % obj.expected_transactions)
    click.secho('Transactions:              %-10d hits' % obj.transactions)
    click.secho('Availability:              %-10.03f %%' % (obj.availability * 100))
    click.secho('Elapsed time:              %-10.03f secs' % obj.elapsed_time)
    click.secho('Response time:             %-10.03f secs' % obj.response_time)
    click.secho('Transaction rate:          %-10.03f trans/sec' % obj.transaction_rate)
    click.secho('Successful transactions:   %-10d hits' % obj.successful_transactions)
    click.secho('Failed transactions:       %-10d hits' % obj.failed_transactions)


@cli.command()
@click.option('--concurrent', '-c', type=int, default=10, help='spawn users, 10')
@click.option('--processes', '-p', default=1, type=int, help='process count, 1')
@click.option('--url', '-u', help='url, like 127.0.0.1:7777, ws://127.0.0.1:8000/echo', required=True)
@click.option('--timeout', '-o', default=5, type=int, help='timeout, 5')
def connect(concurrent, url, timeout, processes):
    """
    测试connect
    """
    obj = shock.ShockConnect(concurrent, url, timeout, processes)
    obj.run()
    click.secho('done', fg='green')
    click.secho('Expected Transactions:     %-10d hits' % obj.expected_transactions)
    click.secho('Transactions:              %-10d hits' % obj.transactions)
    click.secho('Availability:              %-10.03f %%' % (obj.availability * 100))
    click.secho('Elapsed time:              %-10.03f secs' % obj.elapsed_time)
    click.secho('Response time:             %-10.03f secs' % obj.response_time)
    click.secho('Transaction rate:          %-10.03f trans/sec' % obj.transaction_rate)
    click.secho('Successful transactions:   %-10d hits' % obj.successful_transactions)
    click.secho('Failed transactions:       %-10d hits' % obj.failed_transactions)


if __name__ == '__main__':
    cli()
