annotate foodtruck/pubutil.py @ 669:65706804e1de

admin: Fix crash when running FoodTruck as a standalone web app.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 03 Mar 2016 21:36:04 -0800
parents cbb170d9c894
children 3885421c29a3
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
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 from .web import app
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
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 def _shutdown_server_and_raise_sigint():
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 if not app.debug or os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 # 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
18 # otherwise SSE generators will keep it alive.
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 logger.debug("Shutting down SSE generators...")
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 global server_shutdown
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 server_shutdown = True
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 raise KeyboardInterrupt()
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24
669
65706804e1de admin: Fix crash when running FoodTruck as a standalone web app.
Ludovic Chabant <ludovic@chabant.com>
parents: 615
diff changeset
25 if app.config.get('FOODTRUCK_CMDLINE_MODE', False):
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 # Make sure CTRL+C works correctly.
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 signal.signal(signal.SIGINT,
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 lambda *args: _shutdown_server_and_raise_sigint())
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
31 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
32 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
33 try:
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
34 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
35 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
36
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
37 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
38 except Exception:
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
39 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
40 raise
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
41
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
42
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
43 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
44 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
45 try:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
46 os.kill(pid, 0)
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
47 except OSError as ex:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
48 if ex.errno == errno.ESRCH:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
49 # No such process.
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
50 return False
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
51 elif ex.errno == errno.EPERM:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
52 # No permission, so process exists.
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
53 return True
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
54 else:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
55 raise
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
56 else:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
57 return True
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
58
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
59
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 class PublishLogReader(object):
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
61 _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
62 _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
63
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 def __init__(self, pid_path, log_path):
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 self.pid_path = pid_path
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 self.log_path = log_path
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 def run(self):
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 logger.debug("Opening publish log...")
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
70 pid = None
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
71 pid_mtime = 0
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
72 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
73 last_seek = -1
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
74 last_ping_time = 0
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 try:
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 while not server_shutdown:
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 # PING!
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
78 interval = time.time() - last_ping_time
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 if interval > self._ping_interval:
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 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
81 last_ping_time = time.time()
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 yield bytes("event: ping\ndata: 1\n\n", 'utf8')
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
84 # Check the PID file timestamp.
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 try:
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
86 new_mtime = os.path.getmtime(self.pid_path)
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 except OSError:
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
88 new_mtime = 0
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
89
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
90 # 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
91 # 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
92 # 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
93 # 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
94 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
95 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
96 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
97 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
98 pid = _read_pid_file(self.pid_path)
613
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 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
101 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
102 "first parts of the log.")
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
103
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
104 # 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
105 # currently running.
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
106 was_running = is_running
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
107 if pid:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
108 is_running = _pid_exists(pid)
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
109 logger.debug(
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
110 "Process %d is %s" %
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
111 (pid, 'running' if is_running else 'not running'))
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
112 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
113 # Let's forget this PID file until it changes.
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
114 pid = None
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
115 else:
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
116 is_running = False
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
118 # Read new data from the log file.
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 new_data = None
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
120 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
121 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
122 # 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
123 # 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
124 # 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
125 # 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
126 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
127 outstr = (
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
128 'event: message\n'
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
129 'data: Publish started.\n\n')
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
130 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
131 last_seek = 0
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 try:
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 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
135 fp.seek(last_seek)
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 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
137 last_seek = fp.tell()
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 except OSError:
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 pass
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
140 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
141 # 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
142 # 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
143 last_seek = -1
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144
615
cbb170d9c894 admin: Improve publish logs showing as alerts in the admin panel.
Ludovic Chabant <ludovic@chabant.com>
parents: 613
diff changeset
145 # 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
146 # 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
147 if new_data and not is_pid_file_prehistoric:
613
e2e955a3bb25 publish: Add publish command.
Ludovic Chabant <ludovic@chabant.com>
parents: 609
diff changeset
148 logger.debug("SSE: %s" % new_data)
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 for line in new_data.split('\n'):
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 outstr = 'event: message\ndata: %s\n\n' % line
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 yield bytes(outstr, 'utf8')
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 time.sleep(self._poll_interval)
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 except GeneratorExit:
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 pass
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 logger.debug("Closing publish log...")
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159