Completed
Push — master ( 743023...220607 )
by Dmitri
09:15
created

st2actions.cmd._run_worker()   D

Complexity

Conditions 8

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 33
rs 4
cc 8
1
import eventlet
2
import os
3
import sys
4
5
from st2actions import config
6
from st2actions import scheduler, worker
7
from st2common import log as logging
8
from st2common.service_setup import setup as common_setup
9
from st2common.service_setup import teardown as common_teardown
10
11
LOG = logging.getLogger(__name__)
12
13
14
eventlet.monkey_patch(
15
    os=True,
16
    select=True,
17
    socket=True,
18
    thread=False if '--use-debugger' in sys.argv else True,
19
    time=True)
20
21
22
def _setup():
23
    common_setup(service='actionrunner', config=config, setup_db=True, register_mq_exchanges=True,
24
                 register_signal_handlers=True)
25
26
27
def _run_worker():
28
    LOG.info('(PID=%s) Worker started.', os.getpid())
29
30
    components = [
31
        scheduler.get_scheduler(),
32
        worker.get_worker()
33
    ]
34
35
    try:
36
        for component in components:
37
            component.start()
38
39
        for component in components:
40
            component.wait()
41
    except (KeyboardInterrupt, SystemExit):
42
        LOG.info('(PID=%s) Worker stopped.', os.getpid())
43
44
        errors = False
45
46
        for component in components:
47
            try:
48
                component.shutdown()
49
            except:
50
                LOG.exception('Unable to shutdown %s.', component.__class__.__name__)
51
                errors = True
52
53
        if errors:
54
            return 1
55
    except:
56
        LOG.exception('(PID=%s) Worker unexpectedly stopped.', os.getpid())
57
        return 1
58
59
    return 0
60
61
62
def _teardown():
63
    common_teardown()
64
65
66
def main():
67
    try:
68
        _setup()
69
        return _run_worker()
70
    except SystemExit as exit_code:
71
        sys.exit(exit_code)
72
    except:
73
        LOG.exception('(PID=%s) Worker quit due to exception.', os.getpid())
74
        return 1
75
    finally:
76
        _teardown()
77