1. Python / Говнокод #16615

    −100

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    def serve_module(is_deployed=False, name="dummy", timeout=60):
        env_name = "%s-env" % name
        screen_log_file_name = "/screenlog.0"
    
        if not booleanize(is_deployed):
            run_tests(is_deployed, name)
    
        with prefix(workon_prefix), prefix(source_prefix), \
             cd(run("echo $WORKON_HOME") + "/" + env_name), \
             prefix("workon " + env_name),\    
             prefix("export LANG=en_US.UTF-8"),\
             prefix("export LLC=en_US.UTF-8"):
    
            print("Serving module " + name)
            if exists(".%s" % screen_log_file_name):
                run("rm -f .%s" % screen_log_file_name)
    
            run("screen -S %s-serve -X quit" % name, warn_only=True)
            run("screen -wipe", warn_only=True)
            run("screen -L -dmS %s-serve-screen sh -c 'echo $! > ./serve.pid; %s serve'" % (name, name), pty=False)
            time.sleep(2)
    
            log_file_path = run("pwd") + screen_log_file_name
    
            time_with_timeout = time.time() + timeout
            while True:
                if contains(log_file_path, "Started"):
                    break
    
                if time.time() > time_with_timeout:
                    run("cat ./screenlog.0")
                    sys.exit(1)
    
                print('Looking for startup indicator in file: ' + log_file_path)
                time.sleep(2)
    
            print 'Module %s started' % name

    Это часть скрипта для Continious Intergration одного из проектов.
    Зачетный талант системного администратора пользовавшего
    python fabric и "толковые" советы из StackOverflow.
    Особенно впечатляет супервайзинг при помощи screen.

    Запостил: Niyakiy, 29 Августа 2014

    Комментарии (3) RSS

    • >booleanize(is_deployed)
      Это, простите, что?
      Edit: а вон, в соседнем гк. Надо было их объединить, потому что такая обработка может встретиться где-то в общении с пользователем, но никак не в модуле.
      Ответить
    • > и "толковые" советы из StackOverflow.

      советы скорее всего были толковыми - но вот пользоватся ими автор не сильно умеет.
      Ответить
    • Забавно на самом деле, вообще говоря я не встречал очень чистых-красивых фабриковских файлов. Обычно в деплое всегда есть какой-то хлам, и использование скрина - это тоже весело, в отрыве от задачи непонятно, какой уровень отказоустойчивости нужен, может есть весьма весомые аргументы за скрин.
      Ответить

    Добавить комментарий