Mercurial > libervia-backend
annotate libervia/backend/core/launcher.py @ 4306:94e0968987cd
plugin XEP-0033: code modernisation, improve delivery, data validation:
- Code has been rewritten using Pydantic models and `async` coroutines for data validation
and cleaner element parsing/generation.
- Delivery has been completely rewritten. It now works even if server doesn't support
multicast, and send to local multicast service first. Delivering to local multicast
service first is due to bad support of XEP-0033 in server (notably Prosody which has an
incomplete implementation), and the current impossibility to detect if a sub-domain
service handles fully multicast or only for local domains. This is a workaround to have
a good balance between backward compatilibity and use of bandwith, and to make it work
with the incoming email gateway implementation (the gateway will only deliver to
entities of its own domain).
- disco feature checking now uses `async` corountines. `host` implementation still use
Deferred return values for compatibility with legacy code.
rel 450
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 26 Sep 2024 16:12:01 +0200 |
parents | 0d7bb4df2343 |
children |
rev | line source |
---|---|
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
1 #!/usr/bin/env python3 |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
2 |
3480
7550ae9cfbac
Renamed the project from "Salut à Toi" to "Libervia":
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
3 # Libervia: an XMPP client |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
3099 | 5 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
9 # (at your option) any later version. |
234
a7079e835432
added stop command in sat.sh launching script
Goffi <goffi@goffi.org>
parents:
226
diff
changeset
|
10 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
14 # GNU Affero General Public License for more details. |
4 | 15 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
18 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
19 """Script launching SàT backend""" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
20 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
21 import sys |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
22 import os |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
23 import argparse |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
24 from pathlib import Path |
3028 | 25 from configparser import ConfigParser |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
26 from twisted.application import app |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
27 from twisted.python import usage |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
3480
diff
changeset
|
28 from libervia.backend.core.constants import Const as C |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
29 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
30 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
3480
diff
changeset
|
31 class LiberviaLogger(app.AppLogger): |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
32 def start(self, application): |
4081
84f6bee6440d
installation: moved from `setup.py` to `pyproject.toml`:
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
33 # logging is initialised by libervia.baceknd.core.log_config via the Twisted |
84f6bee6440d
installation: moved from `setup.py` to `pyproject.toml`:
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
34 # plugin, nothing to do here |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
35 self._initialLog() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
36 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
37 def stop(self): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
38 pass |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
39 |
1003
52ec79aa5bbe
memory: fixes the method fixLocalDir for pid_dir and log_dir to use local_dir as default
souliane <souliane@mailoo.org>
parents:
931
diff
changeset
|
40 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
41 class Launcher: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
42 APP_NAME = C.APP_NAME |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
43 APP_NAME_FILE = C.APP_NAME_FILE |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
44 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
45 @property |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
46 def NOT_RUNNING_MSG(self): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
47 return f"{self.APP_NAME} is *NOT* running" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
48 |
3284
751d8fa45ced
core (launcher): fixed launching of twistd when no subparsed is specified
Goffi <goffi@goffi.org>
parents:
3282
diff
changeset
|
49 def cmd_no_subparser(self, args): |
751d8fa45ced
core (launcher): fixed launching of twistd when no subparsed is specified
Goffi <goffi@goffi.org>
parents:
3282
diff
changeset
|
50 """Command launched by default""" |
751d8fa45ced
core (launcher): fixed launching of twistd when no subparsed is specified
Goffi <goffi@goffi.org>
parents:
3282
diff
changeset
|
51 args.extra_args = [] |
751d8fa45ced
core (launcher): fixed launching of twistd when no subparsed is specified
Goffi <goffi@goffi.org>
parents:
3282
diff
changeset
|
52 self.cmd_background(args) |
751d8fa45ced
core (launcher): fixed launching of twistd when no subparsed is specified
Goffi <goffi@goffi.org>
parents:
3282
diff
changeset
|
53 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
54 def cmd_background(self, args): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
55 self.run_twistd(args) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
56 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
57 def cmd_foreground(self, args): |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
58 self.run_twistd(args, twistd_opts=["--nodaemon"]) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
59 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
60 def cmd_debug(self, args): |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
61 self.run_twistd(args, twistd_opts=["--debug"]) |
463 | 62 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
63 def cmd_stop(self, args): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
64 import signal |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
65 import time |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
66 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
67 config = self.get_config() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
68 pid_file = self.get_pid_file(config) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
69 if not pid_file.is_file(): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
70 print(self.NOT_RUNNING_MSG) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
71 sys.exit(0) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
72 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
73 pid = int(pid_file.read_text()) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
74 except Exception as e: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
75 print(f"Can't read PID file at {pid_file}: {e}") |
4075
47401850dec6
refactoring: rename `libervia.frontends.jp` to `libervia.cli`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
76 # we use the same exit code as DATA_ERROR in CLI frontend |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
77 sys.exit(17) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
78 print(f"Terminating {self.APP_NAME}…") |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
79 os.kill(pid, signal.SIGTERM) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
80 kill_started = time.time() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
81 state = "init" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
82 import errno |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
83 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
84 while True: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
85 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
86 os.kill(pid, 0) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
87 except OSError as e: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
88 if e.errno == errno.ESRCH: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
89 break |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
90 elif e.errno == errno.EPERM: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
91 print( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
92 f"Can't kill {self.APP_NAME}, the process is owned by an other user", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
93 file=sys.stderr, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
94 ) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
95 sys.exit(18) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
96 else: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
97 raise e |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
98 time.sleep(0.2) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
99 now = time.time() |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
100 if state == "init" and now - kill_started > 5: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
101 if state == "init": |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
102 state = "waiting" |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
103 print(f"Still waiting for {self.APP_NAME} to be terminated…") |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
104 elif state == "waiting" and now - kill_started > 10: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
105 state == "killing" |
3416
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
106 print("Waiting for too long, we kill the process") |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
107 os.kill(pid, signal.SIGKILL) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
108 sys.exit(1) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
109 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
110 sys.exit(0) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
111 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
112 def cmd_status(self, args): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
113 config = self.get_config() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
114 pid_file = self.get_pid_file(config) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
115 if pid_file.is_file(): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
116 import errno |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
117 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
118 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
119 pid = int(pid_file.read_text()) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
120 except Exception as e: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
121 print(f"Can't read PID file at {pid_file}: {e}") |
4075
47401850dec6
refactoring: rename `libervia.frontends.jp` to `libervia.cli`
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
122 # we use the same exit code as DATA_ERROR in CLI frontend |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
123 sys.exit(17) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
124 # we check if there is a process |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
125 # inspired by https://stackoverflow.com/a/568285 and https://stackoverflow.com/a/6940314 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
126 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
127 os.kill(pid, 0) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
128 except OSError as e: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
129 if e.errno == errno.ESRCH: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
130 running = False |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
131 elif e.errno == errno.EPERM: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
132 print("Process {pid} is run by an other user") |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
133 running = True |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
134 else: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
135 running = True |
931
3b30e9f83d88
misc: sat stop would not kill all sat instances anymore
souliane <souliane@mailoo.org>
parents:
930
diff
changeset
|
136 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
137 if running: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
138 print(f"{self.APP_NAME} is running (pid: {pid})") |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
139 sys.exit(0) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
140 else: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
141 print( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
142 f"{self.NOT_RUNNING_MSG}, but a pid file is present (bad exit ?): {pid_file}" |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
143 ) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
144 sys.exit(2) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
145 else: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
146 print(self.NOT_RUNNING_MSG) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
147 sys.exit(1) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
148 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
149 def parse_args(self): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
150 parser = argparse.ArgumentParser(description=f"Launch {self.APP_NAME} backend") |
3284
751d8fa45ced
core (launcher): fixed launching of twistd when no subparsed is specified
Goffi <goffi@goffi.org>
parents:
3282
diff
changeset
|
151 parser.set_defaults(cmd=self.cmd_no_subparser) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
152 subparsers = parser.add_subparsers() |
3282
e7e7be79fbcd
core (launcher): extra arguments can now be passed the service with `bg`, `fg` and `dbg`:
Goffi <goffi@goffi.org>
parents:
3281
diff
changeset
|
153 extra_help = f"arguments to pass to {self.APP_NAME} service" |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
154 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
155 bg_parser = subparsers.add_parser( |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
156 "background", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
157 aliases=["bg"], |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
158 help=f"run {self.APP_NAME} backend in background (as a daemon)", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
159 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
160 bg_parser.add_argument("extra_args", nargs=argparse.REMAINDER, help=extra_help) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
161 bg_parser.set_defaults(cmd=self.cmd_background) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
162 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
163 fg_parser = subparsers.add_parser( |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
164 "foreground", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
165 aliases=["fg"], |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
166 help=f"run {self.APP_NAME} backend in foreground", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
167 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
168 fg_parser.add_argument("extra_args", nargs=argparse.REMAINDER, help=extra_help) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
169 fg_parser.set_defaults(cmd=self.cmd_foreground) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
170 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
171 dbg_parser = subparsers.add_parser( |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
172 "debug", aliases=["dbg"], help=f"run {self.APP_NAME} backend in debug mode" |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
173 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
174 dbg_parser.add_argument("extra_args", nargs=argparse.REMAINDER, help=extra_help) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
175 dbg_parser.set_defaults(cmd=self.cmd_debug) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
176 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
177 stop_parser = subparsers.add_parser( |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
178 "stop", help=f"stop running {self.APP_NAME} backend" |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
179 ) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
180 stop_parser.set_defaults(cmd=self.cmd_stop) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
181 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
182 status_parser = subparsers.add_parser( |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
183 "status", help=f"indicate if {self.APP_NAME} backend is running" |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
184 ) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
185 status_parser.set_defaults(cmd=self.cmd_status) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
186 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
187 return parser.parse_args() |
931
3b30e9f83d88
misc: sat stop would not kill all sat instances anymore
souliane <souliane@mailoo.org>
parents:
930
diff
changeset
|
188 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
189 def get_config(self): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
190 config = ConfigParser(defaults=C.DEFAULT_CONFIG) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
191 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
192 config.read(C.CONFIG_FILES) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
193 except Exception as e: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
194 print(rf"/!\ Can't read main config! {e}") |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
195 sys.exit(1) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
196 return config |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
197 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
198 def get_pid_file(self, config): |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
199 pid_dir = Path(config.get("DEFAULT", "pid_dir")).expanduser() |
4202
b26339343076
core: use a user specific directory for PID file:
Goffi <goffi@goffi.org>
parents:
4194
diff
changeset
|
200 pid_dir.mkdir(parents=True, exist_ok=True) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
201 return pid_dir / f"{self.APP_NAME_FILE}.pid" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
202 |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
203 def wait_for_service( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4202
diff
changeset
|
204 self, service_host: str, service_port: int, timeout: int, service_name: str |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
205 ) -> None: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
206 """Waits for a network service to become available. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
207 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
208 @param service_host: The hostname or IP address of the service. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
209 @param service_port: The port number of the service. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
210 @param timeout: The maximum number of seconds to wait for the service. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
211 @param service_name: The name of the service. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
212 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
213 @raise TimeoutError: If the service is not available within the specified timeout. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
214 """ |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
215 import socket |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
216 import time |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
217 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
218 start_time = time.time() |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
219 wait_interval = 5 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
220 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
221 while True: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
222 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
223 sock.settimeout(1) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
224 try: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
225 sock.connect((service_host, service_port)) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
226 return |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
227 except socket.error: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
228 elapsed_time = time.time() - start_time |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
229 if elapsed_time % wait_interval < 1: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
230 print(f"Waiting for {service_name}…") |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
231 if elapsed_time > timeout: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
232 raise TimeoutError( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
233 f"{service_name} on {service_host}:{service_port} not " |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
234 f"available after {timeout} seconds." |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
235 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
236 time.sleep(1) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
237 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
238 def run_twistd(self, args, twistd_opts=None): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
239 """Run twistd settings options with args""" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
240 from twisted.python.runtime import platformType |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
241 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
242 if platformType == "win32": |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
243 from twisted.scripts._twistw import ( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
244 ServerOptions, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
245 WindowsApplicationRunner as app_runner, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
246 ) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
247 else: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
248 from twisted.scripts._twistd_unix import ( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
249 ServerOptions, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
250 UnixApplicationRunner as app_runner, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
251 ) |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
252 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
3480
diff
changeset
|
253 app_runner.loggerFactory = LiberviaLogger |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
254 server_options = ServerOptions() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
255 config = self.get_config() |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
256 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
257 # wait for a service (e.g. XMPP server) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
258 wait_for_service_value = config.get( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
259 "DEFAULT", "init_wait_for_service", fallback=None |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
260 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
261 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
262 if wait_for_service_value is not None: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
263 try: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
264 # Syntax: [ipv6_address]:port[:timeout][:service_name] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
265 # or hostname:port[:timeout][:service_name] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
266 parts = wait_for_service_value.split(":") |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
267 if parts[0] and parts[0][0] == "[" and parts[0][-1] == "]": |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
268 # IPv6 address |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
269 host = parts[0][1:-1] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
270 else: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
271 # Hostname or IPv4 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
272 host = parts[0] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
273 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
274 port = int(parts[1]) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
275 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
276 # Defaults |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
277 timeout = 60 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
278 service_name = "service" |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
279 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
280 if len(parts) > 2: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
281 timeout_part = parts[2] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
282 # Check if timeout is skipped (double colon for service_name) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
283 if timeout_part: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
284 timeout = int(timeout_part) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
285 if len(parts) > 3: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
286 service_name = parts[3] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
287 except (ValueError, IndexError): |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
288 raise ValueError( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
289 f'Invalid "init_wait_for_service" value: {wait_for_service_value!r}' |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
290 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
291 else: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
292 self.wait_for_service(host, port, timeout, service_name) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
293 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
294 pid_file = self.get_pid_file(config) |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
295 log_dir = Path(config.get("DEFAULT", "log_dir")).expanduser() |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
296 log_file = log_dir / f"{self.APP_NAME_FILE}.log" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
297 server_opts = [ |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
298 "--no_save", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
299 "--pidfile", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
300 str(pid_file), |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
301 "--logfile", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
302 str(log_file), |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
303 ] |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
304 if twistd_opts is not None: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
305 server_opts.extend(twistd_opts) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
306 server_opts.append(self.APP_NAME_FILE) |
3282
e7e7be79fbcd
core (launcher): extra arguments can now be passed the service with `bg`, `fg` and `dbg`:
Goffi <goffi@goffi.org>
parents:
3281
diff
changeset
|
307 if args.extra_args: |
e7e7be79fbcd
core (launcher): extra arguments can now be passed the service with `bg`, `fg` and `dbg`:
Goffi <goffi@goffi.org>
parents:
3281
diff
changeset
|
308 try: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
309 args.extra_args.remove("--") |
3282
e7e7be79fbcd
core (launcher): extra arguments can now be passed the service with `bg`, `fg` and `dbg`:
Goffi <goffi@goffi.org>
parents:
3281
diff
changeset
|
310 except ValueError: |
e7e7be79fbcd
core (launcher): extra arguments can now be passed the service with `bg`, `fg` and `dbg`:
Goffi <goffi@goffi.org>
parents:
3281
diff
changeset
|
311 pass |
e7e7be79fbcd
core (launcher): extra arguments can now be passed the service with `bg`, `fg` and `dbg`:
Goffi <goffi@goffi.org>
parents:
3281
diff
changeset
|
312 server_opts.extend(args.extra_args) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
313 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
314 server_options.parseOptions(server_opts) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
315 except usage.error as ue: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
316 print(server_options) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
317 print("%s: %s" % (sys.argv[0], ue)) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
318 sys.exit(1) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
319 else: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
320 runner = app_runner(server_options) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
321 runner.run() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
322 if runner._exitSignal is not None: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
323 app._exitWithSignal(runner._exitSignal) |
3416
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
324 try: |
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
325 sys.exit(app._exitCode) |
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
326 except AttributeError: |
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
327 pass |
226
d8bb72f00eec
distutils install: fixed plugin import and log file path
Goffi <goffi@goffi.org>
parents:
225
diff
changeset
|
328 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
329 @classmethod |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
330 def run(cls): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
331 args = cls().parse_args() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
332 args.cmd(args) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
333 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
334 |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
335 if __name__ == "__main__": |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
336 Launcher.run() |