Mercurial > piecrust2
annotate piecrust/admin/pubutil.py @ 1186:2ead9dcb6bec
prepare: Fix scaffolding refactor code.
For some reason the previous commit was missing some changes.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 23 Oct 2020 23:50:42 -0700 |
parents | 82509bce94ca |
children |
rev | line source |
---|---|
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
1 import os |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import os.path |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
3 import time |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
4 import errno |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
5 import signal |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 import logging |
772
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
7 from .blueprint import foodtruck_bp |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 logger = logging.getLogger(__name__) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 server_shutdown = False |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 |
772
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
15 def _shutdown_server_and_raise_sigint(is_app_debug): |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
16 if (not is_app_debug or |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
17 os.environ.get('WERKZEUG_RUN_MAIN') == 'true'): |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 # This is needed when hitting CTRL+C to shutdown the Werkzeug server, |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 # otherwise SSE generators will keep it alive. |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 logger.debug("Shutting down SSE generators...") |
776
3799621cd25b
admin: Correctly flush loggers before exiting.
Ludovic Chabant <ludovic@chabant.com>
parents:
772
diff
changeset
|
21 for h in logger.handlers: |
3799621cd25b
admin: Correctly flush loggers before exiting.
Ludovic Chabant <ludovic@chabant.com>
parents:
772
diff
changeset
|
22 h.flush() |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
23 global server_shutdown |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 server_shutdown = True |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
25 raise KeyboardInterrupt() |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
26 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
27 |
772
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
28 def record_pipeline(state): |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
29 if state.app.config.get('FOODTRUCK_CMDLINE_MODE', False): |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
30 # Make sure CTRL+C works correctly. |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
31 logger.debug("Adding SIGINT callback for pipeline thread.") |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
32 signal.signal( |
812
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
33 signal.SIGINT, |
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
34 lambda *args: _shutdown_server_and_raise_sigint( |
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
35 state.app.debug)) |
772
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
36 |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
37 |
3885421c29a3
admin: Make the whole FoodTruck site into a blueprint.
Ludovic Chabant <ludovic@chabant.com>
parents:
669
diff
changeset
|
38 foodtruck_bp.record(record_pipeline) |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
39 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
40 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
41 def _read_pid_file(pid_file): |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
42 logger.debug("Reading PID file: %s" % pid_file) |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
43 try: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
44 with open(pid_file, 'r') as fp: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
45 pid_str = fp.read() |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
46 |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
47 return int(pid_str.strip()) |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
48 except Exception: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
49 logger.error("Error reading PID file.") |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
50 raise |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
51 |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
52 |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
53 def _pid_exists(pid): |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
54 logger.debug("Checking if process ID %d is running" % pid) |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
55 try: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
56 os.kill(pid, 0) |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
57 except OSError as ex: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
58 if ex.errno == errno.ESRCH: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
59 # No such process. |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
60 return False |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
61 elif ex.errno == errno.EPERM: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
62 # No permission, so process exists. |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
63 return True |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
64 else: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
65 raise |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
66 else: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
67 return True |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
68 |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
69 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
70 class PublishLogReader(object): |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
71 _poll_interval = 1 # Check the process every 1 seconds. |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
72 _ping_interval = 30 # Send a ping message every 30 seconds. |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
73 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
74 def __init__(self, pid_path, log_path): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
75 self.pid_path = pid_path |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
76 self.log_path = log_path |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
77 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 def run(self): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 logger.debug("Opening publish log...") |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
80 pid = None |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
81 pid_mtime = 0 |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
82 is_running = False |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
83 last_seek = -1 |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
84 last_ping_time = 0 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
85 try: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
86 while not server_shutdown: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
87 # PING! |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
88 interval = time.time() - last_ping_time |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
89 if interval > self._ping_interval: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 logger.debug("Sending ping...") |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
91 last_ping_time = time.time() |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 yield bytes("event: ping\ndata: 1\n\n", 'utf8') |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
93 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
94 # Check the PID file timestamp. |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
95 try: |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
96 new_mtime = os.path.getmtime(self.pid_path) |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 except OSError: |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
98 new_mtime = 0 |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
99 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
100 # If there's a valid PID file and we either just started |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
101 # streaming (pid_mtime == 0) or we remember an older version |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
102 # of that PID file (pid_mtime != new_mtime), let's read the |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
103 # PID from the file. |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
104 is_pid_file_prehistoric = False |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
105 if new_mtime > 0 and new_mtime != pid_mtime: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
106 is_pid_file_prehistoric = (pid_mtime == 0) |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
107 pid_mtime = new_mtime |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
108 pid = _read_pid_file(self.pid_path) |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
109 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
110 if is_pid_file_prehistoric: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
111 logger.debug("PID file is pre-historic, we will skip the " |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
112 "first parts of the log.") |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
113 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
114 # If we have a valid PID, let's check if the process is |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
115 # currently running. |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
116 was_running = is_running |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
117 if pid: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
118 is_running = _pid_exists(pid) |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
119 logger.debug( |
812
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
120 "Process %d is %s" % |
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
121 (pid, 'running' if is_running else 'not running')) |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
122 if not is_running: |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
123 # Let's forget this PID file until it changes. |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
124 pid = None |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
125 else: |
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
126 is_running = False |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
127 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
128 # Read new data from the log file. |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 new_data = None |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
130 if is_running or was_running: |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
131 if last_seek < 0: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
132 # Only send the "publish started" message if we |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
133 # actually caught the process as it was starting, not |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
134 # if we started streaming after it started. |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
135 # This means we saw the PID file get changed. |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
136 if not is_pid_file_prehistoric: |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
137 outstr = ( |
812
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
138 'event: message\n' |
82509bce94ca
internal: PEP8 fixup for admin panel code.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
139 'data: Publish started.\n\n') |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
140 yield bytes(outstr, 'utf8') |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
141 last_seek = 0 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
143 try: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
144 with open(self.log_path, 'r', encoding='utf8') as fp: |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
145 fp.seek(last_seek) |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
146 new_data = fp.read() |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
147 last_seek = fp.tell() |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
148 except OSError: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
149 pass |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
150 if not is_running: |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
151 # Process is not running anymore, let's reset our seek |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
152 # marker back to the beginning. |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
153 last_seek = -1 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
154 |
615
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
155 # Stream the new data to the client, but don't send old stuff |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
156 # that happened before we started this stream. |
cbb170d9c894
admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents:
613
diff
changeset
|
157 if new_data and not is_pid_file_prehistoric: |
613
e2e955a3bb25
publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents:
609
diff
changeset
|
158 logger.debug("SSE: %s" % new_data) |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
159 for line in new_data.split('\n'): |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
160 outstr = 'event: message\ndata: %s\n\n' % line |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
161 yield bytes(outstr, 'utf8') |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
162 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
163 time.sleep(self._poll_interval) |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
164 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
165 except GeneratorExit: |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
166 pass |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
167 |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
168 logger.debug("Closing publish log...") |
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
169 |