#!/usr/bin/env python
from __future__ import print_function

import sys
from optparse import OptionParser

from codespeed_client import Client, UploadError

parser = OptionParser()
parser.set_description('Command-line tool to push benchmark data to CodeSpeed.')
parser.add_option("--url", help="CodeSpeed root URL (http://localhost:8000/)")
parser.add_option("--project", metavar="NAME", help="Project name")
parser.add_option("--branch", metavar="NAME", help="SCM branch name")
parser.add_option("--commitid", help="SCM revision number or commit hash")
parser.add_option("--revision-date", metavar="DATE", help="SCM revision/commit date")
parser.add_option("--executable", metavar="NAME", help="Executable name")
parser.add_option("--environment", metavar="NAME", help="Environment name")
parser.add_option("--benchmark", metavar="NAME", help="Benchmark name")
parser.add_option("--result-value", type="float", metavar="FLOAT", help="Benchmark result")
parser.add_option("--min", type="float", metavar="FLOAT", help="Benchmark minimal result")
parser.add_option("--max", type="float", metavar="FLOAT", help="Benchmark maximal result")
parser.add_option("--std-dev", type="float", metavar="FLOAT", help="Benchmark result standard deviation")
parser.add_option("--result-date", metavar="DATE", help="Benchmark result date")
parser.set_defaults(url='http://localhost:8000/')
options, args = parser.parse_args()
if args:
    sys.exit("Positional arguments are not expected.")

try:
    client = Client(options.url, environment=options.environment)
    client.add_result(project=options.project, branch=options.branch,
                      commitid=options.commitid, revision_date=options.revision_date,
                      executable=options.executable, benchmark=options.benchmark,
                      result_value=options.result_value, min=options.min, max=options.max, std_dev=options.std_dev,
                      result_date=options.result_date)
except KeyError as e:
    print(e)
    sys.exit(2)

print("URL: %s" % client.url)
print("Data: %r" % client.data)

try:
    code, body = client.upload_results()
except UploadError as e:
    code, body = e.errno, e.strerror
print("Result: %s - %s" % (code, body))

sys.exit(0 if code == 202 else 1)
