Mercurial > libervia-backend
annotate libervia/backend/core/launcher.py @ 4219:1b5cf2ee1d86
plugin XEP-0384, XEP-0391: download missing devices list:
when a peer jid was not in our roster, devices list was not retrieved, resulting in failed
en/decryption. This patch does check it and download missing devices list in necessary.
There is no subscription managed yet, so the list won't be updated in case of new devices,
this should be addressed at some point.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 05 Mar 2024 17:31:36 +0100 |
parents | b26339343076 |
children | 0d7bb4df2343 |
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( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
204 self, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
205 service_host: str, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
206 service_port: int, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
207 timeout: int, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
208 service_name: str |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
209 ) -> None: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
210 """Waits for a network service to become available. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
211 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
212 @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
|
213 @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
|
214 @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
|
215 @param service_name: The name of the service. |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
216 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
217 @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
|
218 """ |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
219 import socket |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
220 import time |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
221 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
222 start_time = time.time() |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
223 wait_interval = 5 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
224 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
225 while True: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
226 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
|
227 sock.settimeout(1) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
228 try: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
229 sock.connect((service_host, service_port)) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
230 return |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
231 except socket.error: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
232 elapsed_time = time.time() - start_time |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
233 if elapsed_time % wait_interval < 1: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
234 print(f"Waiting for {service_name}…") |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
235 if elapsed_time > timeout: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
236 raise TimeoutError( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
237 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
|
238 f"available after {timeout} seconds." |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
239 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
240 time.sleep(1) |
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 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
|
243 """Run twistd settings options with args""" |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
244 from twisted.python.runtime import platformType |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
245 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
246 if platformType == "win32": |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
247 from twisted.scripts._twistw import ( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
248 ServerOptions, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
249 WindowsApplicationRunner as app_runner, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
250 ) |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
251 else: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
252 from twisted.scripts._twistd_unix import ( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
253 ServerOptions, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
254 UnixApplicationRunner as app_runner, |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
255 ) |
225
fd9b7834d98a
distutils installation script, draft
Goffi <goffi@goffi.org>
parents:
223
diff
changeset
|
256 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
3480
diff
changeset
|
257 app_runner.loggerFactory = LiberviaLogger |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
258 server_options = ServerOptions() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
259 config = self.get_config() |
4194
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 # wait for a service (e.g. XMPP server) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
262 wait_for_service_value = config.get( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
263 "DEFAULT", "init_wait_for_service", fallback=None |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
264 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
265 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
266 if wait_for_service_value is not None: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
267 try: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
268 # Syntax: [ipv6_address]:port[:timeout][:service_name] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
269 # or hostname:port[:timeout][:service_name] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
270 parts = wait_for_service_value.split(":") |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
271 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
|
272 # IPv6 address |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
273 host = parts[0][1:-1] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
274 else: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
275 # Hostname or IPv4 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
276 host = parts[0] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
277 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
278 port = int(parts[1]) |
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 # Defaults |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
281 timeout = 60 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
282 service_name = "service" |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
283 |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
284 if len(parts) > 2: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
285 timeout_part = parts[2] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
286 # 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
|
287 if timeout_part: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
288 timeout = int(timeout_part) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
289 if len(parts) > 3: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
290 service_name = parts[3] |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
291 except (ValueError, IndexError): |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
292 raise ValueError( |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
293 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
|
294 ) |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
295 else: |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
296 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
|
297 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
298 pid_file = self.get_pid_file(config) |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
299 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
|
300 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
|
301 server_opts = [ |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
302 "--no_save", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
303 "--pidfile", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
304 str(pid_file), |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
305 "--logfile", |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
306 str(log_file), |
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
307 ] |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
308 if twistd_opts is not None: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
309 server_opts.extend(twistd_opts) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
310 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
|
311 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
|
312 try: |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
313 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
|
314 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
|
315 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
|
316 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
|
317 try: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
318 server_options.parseOptions(server_opts) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
319 except usage.error as ue: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
320 print(server_options) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
321 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
|
322 sys.exit(1) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
323 else: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
324 runner = app_runner(server_options) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
325 runner.run() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
326 if runner._exitSignal is not None: |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
327 app._exitWithSignal(runner._exitSignal) |
3416
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
328 try: |
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
329 sys.exit(app._exitCode) |
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
330 except AttributeError: |
d7cfb031e41f
core (launcher): exit code can now specified
Goffi <goffi@goffi.org>
parents:
3284
diff
changeset
|
331 pass |
226
d8bb72f00eec
distutils install: fixed plugin import and log file path
Goffi <goffi@goffi.org>
parents:
225
diff
changeset
|
332 |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
333 @classmethod |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
334 def run(cls): |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
335 args = cls().parse_args() |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
336 args.cmd(args) |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
337 |
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
338 |
4194
3dbaf179c50d
core (launcher): new `wait_for_service` option:
Goffi <goffi@goffi.org>
parents:
4081
diff
changeset
|
339 if __name__ == "__main__": |
3281
a3639d6d9643
core: replaced `sat` shell script by a python script:
Goffi <goffi@goffi.org>
parents:
3263
diff
changeset
|
340 Launcher.run() |