Projet

Général

Profil

0001-improve-generic-timeout-handling-14913.patch

Josué Kouka, 08 février 2017 16:11

Télécharger (3,27 ko)

Voir les différences:

Subject: [PATCH] improve generic timeout handling (#14913)

 mandayejs/mandaye/utils.py | 63 +++++++++++++++++++++++-----------------------
 1 file changed, 32 insertions(+), 31 deletions(-)
mandayejs/mandaye/utils.py
29 29
logger = logging.getLogger(__name__)
30 30

  
31 31

  
32
def exec_phantom(data, script='do_login.js'):
32
def run(send_end, data, script):
33
    phantom = subprocess.Popen([
34
        settings.PHANTOM_JS_BINARY,
35
        '--ignore-ssl-errors=yes', '--ssl-protocol=any',
36
        os.path.join(settings.BASE_DIR, 'mandayejs', script)],
37
        close_fds=True,
38
        stdin=subprocess.PIPE,
39
        stdout=subprocess.PIPE
40
    )
41
    stdout, stderr = phantom.communicate(json.dumps(data))
42

  
43
    try:
44
        output = re.search('<mandayejs>(.*?)</mandayejs>', stdout, re.DOTALL)
45
        if not output:
46
            raise ValueError
47
        stdout = output.group(1)
48
        result = json.loads(stdout)
49
    except (ValueError,):
50
        result = {"result": "json_error"}
51
        logger.error("invalid json: %s" % stdout)
33 52

  
34
    def run(send_end):
35
        phantom = subprocess.Popen([
36
            settings.PHANTOM_JS_BINARY,
37
            '--ignore-ssl-errors=yes', '--ssl-protocol=any',
38
            os.path.join(settings.BASE_DIR, 'mandayejs', script)],
39
            close_fds=True,
40
            stdin=subprocess.PIPE,
41
            stdout=subprocess.PIPE
42
        )
43
        stdout, stderr = phantom.communicate(json.dumps(data))
44

  
45
        try:
46
            output = re.search('<mandayejs>(.*?)</mandayejs>', stdout, re.DOTALL)
47
            if not output:
48
                raise ValueError
49
            stdout = output.group(1)
50
            result = json.loads(stdout)
51
        except (ValueError,):
52
            result = {"result": "json_error"}
53
            logger.error("invalid json: %s" % stdout)
54

  
55
        if result.get('stderr'):
56
            logger.warning(result['stderr'])
57
        if result.get('error'):
58
            logger.error('Error occured: %s' % result.get('reason'))
59

  
60
        send_end.send(result)
53
    if result.get('stderr'):
54
        logger.warning(result['stderr'])
55
    if result.get('error'):
56
        logger.error('Error occured: %s' % result.get('reason'))
61 57

  
58
    send_end.send(result)
59
    send_end.close()
60

  
61

  
62
def exec_phantom(data, script='do_login.js'):
62 63
    recv_end, send_end = multiprocessing.Pipe(False)
63
    process = multiprocessing.Process(target=run, args=(send_end,))
64
    process = multiprocessing.Process(target=run, args=(send_end, data, script))
64 65
    process.start()
66
    result = recv_end.recv()
67
    recv_end.close()
65 68
    process.join(settings.PHANTOM_JS_TIMEOUT)
66 69

  
67 70
    if process.is_alive():
......
70 73
        context = {k: v for k, v in data.items() if k != 'locators'}
71 74
        logger.error("PhantomJS process timeout, context: %s" % context)
72 75
        result = {'result': 'timeout'}
73
    else:
74
        result = recv_end.recv()
75 76

  
76 77
    return result
77 78

  
78
-