#!/usr/bin/env python
# -*- coding:utf-8 -*-
'''
Загрузка файлов dna на s3.mds.yandex.net. Файлы загружаются без перезаписи.

Внимание! Изменения в этом скрипте могут сломать продакшн директа! Перед внесением изменений свяжитесь с vrozaev.

Использование: dt-s3-upload /path/to/uploaded/dir /path/in/s3.
Пример использования dt-s3-upload /var/www/beta.vrozaev.14701/dna/build betas
'''

import argparse
import os
import time

def parse_options():
    global opts

    parser = argparse.ArgumentParser(description='Безопасная загрузка файлов на s3.mds.yandex.net')
    parser.add_argument('-f', '--from', dest='src', help='путь до каталога from', type=str, required=True)
    parser.add_argument('-t', '--to', dest='dst', help='путь на s3 куда будет скопировано сожержимое каталога', type=str, required=True)

    opts, extra = parser.parse_known_args()

    if len(extra) > 0:
        parser.error('There are unknown parameters')

    return opts 

def run():
    opts = parse_options()

    src = opts.src
    dst = opts.dst

    task_body = '%s %s' % (src, dst)
    file_task = '/var/lib/dt-s3-uploader-worker/%s_%s' % (src.replace('/', '-'), dst.replace('/', '-'))
    file_task_processing = '%s.processing' % (file_task)
    file_task_failed = '%s.failed' % (file_task)
    with open(file_task, 'w') as f:
        f.write(task_body)
        f.close()
        print 'task %s created' % file_task 

    retries = 20
    
    print 'waiting task %s' % (file_task)
    task_error = 'can\'t upload %s asynchronously' % (task_body)
    for i in xrange(retries):
        if not os.path.isfile(file_task) and not os.path.isfile(file_task_processing):
            if os.path.isfile(file_task_failed):
                task_error = open(file_task_failed).read()
            else:
                task_error = ''
                break

        if i + 1 != retries:
            time.sleep(5)

    if task_error:
        print task_error
        exit(57)
    else:
        print 'successfully uploaded'

if __name__ == '__main__':
    run()