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

import os
import errno
import subprocess
import json
import time
import logging

LOG_DIR = "/var/log/yandex/dt-async-dmove"

def my_run(*args, **kwargs):
    cmd = ["ssh",
           "-l", "robot-direct-dmover",
           "-i", "/etc/robot-direct-dmover-keys/id_rsa",
           "-o", "StrictHostKeyChecking=no",
           "dupload.dist.yandex.ru"] + list(args)

    return subprocess.check_output(cmd, stderr=subprocess.STDOUT)


def run():
    try:
        os.makedirs(LOG_DIR)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise

    logging.basicConfig(
        format=u'%(levelname)-8s [%(asctime)s] %(message)s',
        level=logging.INFO,
        filename="%s/dt-async-dmove.log" % LOG_DIR
    )

    my_dir = "/var/lib/dt-async-dmove"

    while True:
        to_dmove = [task for task in os.listdir("/var/lib/dt-async-dmove") if os.path.isfile(os.path.join(my_dir, task))]
    
        for task in to_dmove:
            full_path = os.path.join(my_dir, task)
            new_full_path = full_path + ".processing"

            os.rename(full_path, new_full_path)
            logging.info("%s --> %s" % (full_path, new_full_path))

            try:
                repo, src, dst, package, version = task.split("_")
                if repo != 'direct-trusty' or src != 'unstable' or dst != 'testing':
                    raise Exception("cant't dmove from %s to %s in %s" % (src, dst, repo))
                    
                my_run("sudo dmove %s %s %s %s %s" % (repo, dst, package, version, src))
                logging.info("successfully dmove'd %s=%s from %s to %s in %s" %  (package, version, src, dst, repo))
            except Exception as e:
                logging.error(str(e))
            finally:
                os.remove(new_full_path)

        if not to_dmove:
            time.sleep(10)


if __name__ == '__main__':
    run()

