#
# OtterTune - upload.py
#
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
#
import argparse
import logging
import os
import requests


# Logging
LOG = logging.getLogger(__name__)
LOG.addHandler(logging.StreamHandler())
LOG.setLevel(logging.INFO)


def upload(datadir, upload_code, url):
    params = {
        'summary': open(os.path.join(datadir, 'summary.json'), 'rb'),
        'knobs': open(os.path.join(datadir, 'knobs.json'), 'rb'),
        'metrics_before': open(os.path.join(datadir, 'metrics_before.json'), 'rb'),
        'metrics_after': open(os.path.join(datadir, 'metrics_after.json'), 'rb'),
    }

    response = requests.post(url,
                             files=params,
                             data={'upload_code': upload_code})
    LOG.info(response.content)


def main():
    parser = argparse.ArgumentParser(description="Upload generated data to the website")
    parser.add_argument('datadir', type=str, nargs=1,
                        help='Directory containing the generated data')
    parser.add_argument('upload_code', type=str, nargs=1,
                        help='The website\'s upload code')
    parser.add_argument('url', type=str, default='http://0.0.0.0:8000/new_result/',
                        nargs='?', help='The upload url: server_ip/new_result/')
    args = parser.parse_args()
    upload(args.datadir[0], args.upload_code[0], args.url)


if __name__ == "__main__":
    main()