annotate piecrust/admin/pubutil.py @ 1155:fac4483867a5

less: Fix issues moving the map file on Windows. Again.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 11 Jun 2019 15:11:39 -0700
parents 82509bce94ca
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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