Merge lp:~allenap/maas/overhaul-logging-more-03 into lp:~maas-committers/maas/trunk
- overhaul-logging-more-03
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Gavin Panella |
Approved revision: | no longer in the source branch. |
Merged at revision: | 5525 |
Proposed branch: | lp:~allenap/maas/overhaul-logging-more-03 |
Merge into: | lp:~maas-committers/maas/trunk |
Prerequisite: | lp:~allenap/maas/overhaul-logging-more-02 |
Diff against target: |
1611 lines (+301/-162) 50 files modified
src/maasserver/bootresources.py (+5/-2) src/maasserver/clusterrpc/boot_images.py (+4/-1) src/maasserver/dhcp.py (+8/-5) src/maasserver/dns/publication.py (+4/-1) src/maasserver/models/largefile.py (+4/-1) src/maasserver/models/signals/power.py (+4/-1) src/maasserver/plugin.py (+4/-1) src/maasserver/populate_tags.py (+5/-2) src/maasserver/rack_controller.py (+4/-1) src/maasserver/region_controller.py (+4/-1) src/maasserver/regiondservices/active_discovery.py (+5/-1) src/maasserver/regiondservices/ntp.py (+4/-1) src/maasserver/regiondservices/reverse_dns.py (+4/-1) src/maasserver/regiondservices/service_monitor_service.py (+4/-1) src/maasserver/rpc/regionservice.py (+8/-3) src/maasserver/rpc/tests/test_regionservice.py (+6/-12) src/maasserver/start_up.py (+5/-2) src/maasserver/utils/async.py (+7/-4) src/maasserver/utils/dbtasks.py (+4/-1) src/maasserver/utils/tests/test_async.py (+1/-1) src/maasserver/webapp.py (+5/-4) src/maasserver/websockets/handlers/bootresource.py (+4/-1) src/maasserver/websockets/handlers/machine.py (+4/-5) src/maasserver/websockets/protocol.py (+9/-5) src/maasserver/websockets/tests/test_protocol.py (+7/-6) src/maasserver/websockets/tests/test_websockets.py (+7/-12) src/maasserver/websockets/websockets.py (+8/-5) src/maastesting/testcase.py (+13/-0) src/maastesting/twisted.py (+42/-10) src/provisioningserver/dhcp/detect.py (+15/-17) src/provisioningserver/import_images/download_resources.py (+4/-1) src/provisioningserver/logger/__init__.py (+2/-0) src/provisioningserver/logger/_common.py (+9/-0) src/provisioningserver/logger/_django.py (+1/-1) src/provisioningserver/logger/_logging.py (+1/-1) src/provisioningserver/logger/_twisted.py (+9/-14) src/provisioningserver/logger/tests/test__twisted.py (+5/-8) src/provisioningserver/power/change.py (+5/-2) src/provisioningserver/rackdservices/dhcp_probe_service.py (+5/-2) src/provisioningserver/rackdservices/image_download_service.py (+5/-2) src/provisioningserver/rackdservices/node_power_monitor_service.py (+5/-2) src/provisioningserver/rackdservices/ntp.py (+4/-1) src/provisioningserver/rackdservices/service_monitor_service.py (+5/-2) src/provisioningserver/rackdservices/tftp.py (+5/-2) src/provisioningserver/rpc/boot_images.py (+4/-1) src/provisioningserver/rpc/clusterservice.py (+10/-10) src/provisioningserver/rpc/common.py (+4/-1) src/provisioningserver/rpc/tests/test_clusterservice.py (+1/-1) src/provisioningserver/utils/services.py (+5/-2) src/provisioningserver/utils/twisted.py (+4/-1) |
To merge this branch: | bzr merge lp:~allenap/maas/overhaul-logging-more-03 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Blake Rouse (community) | Approve | ||
Review via email: mp+309735@code.launchpad.net |
Commit message
Switch all of MAAS over to LegacyLogger, a transitional shim between the legacy Twisted logging module and the new logging system.
Description of the change
Gavin Panella (allenap) wrote : | # |
> "twisted.
I agree but let's fix this in a subsequent branch; there are several other such bits that need cleaning up. Thanks for the review!
MAAS Lander (maas-lander) wrote : | # |
The attempt to merge lp:~allenap/maas/overhaul-logging-more-03 into lp:maas failed. Below is the output from the failed tests.
Hit:1 http://
Hit:2 http://
Get:3 http://
Get:4 http://
Get:5 http://
Get:6 http://
Fetched 960 kB in 0s (986 kB/s)
Reading package lists...
sudo DEBIAN_
--no-
Reading package lists...
Building dependency tree...
Reading state information...
authbind is already the newest version (2.1.1+nmu1).
avahi-utils is already the newest version (0.6.32~
build-essential is already the newest version (12.1ubuntu2).
debhelper is already the newest version (9.20160115ubun
distro-info is already the newest version (0.14build1).
freeipmi-tools is already the newest version (1.4.11-1ubuntu1).
git is already the newest version (1:2.7.4-0ubuntu1).
libjs-angularjs is already the newest version (1.2.28-1ubuntu2).
libjs-jquery is already the newest version (1.11.3+dfsg-4).
libjs-yui3-full is already the newest version (3.5.1-1ubuntu3).
libjs-yui3-min is already the newest version (3.5.1-1ubuntu3).
make is already the newest version (4.1-6).
postgresql is already the newest version (9.5+173).
pxelinux is already the newest version (3:6.03+
Preview Diff
1 | === modified file 'src/maasserver/bootresources.py' |
2 | --- src/maasserver/bootresources.py 2016-10-12 15:26:17 +0000 |
3 | +++ src/maasserver/bootresources.py 2016-11-01 16:47:02 +0000 |
4 | @@ -88,7 +88,10 @@ |
5 | ) |
6 | from provisioningserver.import_images.keyrings import write_all_keyrings |
7 | from provisioningserver.import_images.product_mapping import map_products |
8 | -from provisioningserver.logger import get_maas_logger |
9 | +from provisioningserver.logger import ( |
10 | + get_maas_logger, |
11 | + LegacyLogger, |
12 | +) |
13 | from provisioningserver.rpc.cluster import ( |
14 | ListBootImages, |
15 | ListBootImagesV2, |
16 | @@ -116,11 +119,11 @@ |
17 | inlineCallbacks, |
18 | ) |
19 | from twisted.protocols.amp import UnhandledCommand |
20 | -from twisted.python import log |
21 | from twisted.python.failure import Failure |
22 | |
23 | |
24 | maaslog = get_maas_logger("bootresources") |
25 | +log = LegacyLogger() |
26 | |
27 | # Used by maasserver.middleware.AccessMiddleware to allow |
28 | # anonymous access to the simplestreams endpoint. |
29 | |
30 | === modified file 'src/maasserver/clusterrpc/boot_images.py' |
31 | --- src/maasserver/clusterrpc/boot_images.py 2016-05-06 09:28:28 +0000 |
32 | +++ src/maasserver/clusterrpc/boot_images.py 2016-11-01 16:47:02 +0000 |
33 | @@ -30,6 +30,7 @@ |
34 | from maasserver.utils import async |
35 | from maasserver.utils.orm import transactional |
36 | from maasserver.utils.threads import deferToDatabase |
37 | +from provisioningserver.logger import LegacyLogger |
38 | from provisioningserver.rpc.cluster import ( |
39 | ImportBootImages, |
40 | IsImportBootImagesRunning, |
41 | @@ -48,10 +49,12 @@ |
42 | DeferredSemaphore, |
43 | ) |
44 | from twisted.protocols.amp import UnhandledCommand |
45 | -from twisted.python import log |
46 | from twisted.python.failure import Failure |
47 | |
48 | |
49 | +log = LegacyLogger() |
50 | + |
51 | + |
52 | def suppress_failures(responses): |
53 | """Suppress failures returning from an async/gather operation. |
54 | |
55 | |
56 | === modified file 'src/maasserver/dhcp.py' |
57 | --- src/maasserver/dhcp.py 2016-10-12 15:26:17 +0000 |
58 | +++ src/maasserver/dhcp.py 2016-11-01 16:47:02 +0000 |
59 | @@ -53,6 +53,7 @@ |
60 | IPNetwork, |
61 | ) |
62 | from provisioningserver.dhcp.omshell import generate_omapi_key |
63 | +from provisioningserver.logger import LegacyLogger |
64 | from provisioningserver.rpc.cluster import ( |
65 | ConfigureDHCPv4, |
66 | ConfigureDHCPv4_V2, |
67 | @@ -73,7 +74,9 @@ |
68 | ) |
69 | from twisted.internet.defer import inlineCallbacks |
70 | from twisted.protocols import amp |
71 | -from twisted.python import log |
72 | + |
73 | + |
74 | +log = LegacyLogger() |
75 | |
76 | |
77 | def get_omapi_key(): |
78 | @@ -562,14 +565,14 @@ |
79 | config = get_dhcp_configure_for( |
80 | 4, rack_controller, vlan, subnets_v4, ntp_servers, |
81 | default_domain, dhcp_snippets) |
82 | - except DHCPConfigurationError as e: |
83 | + except DHCPConfigurationError: |
84 | # XXX bug #1602412: this silently breaks DHCPv4, but we cannot |
85 | # allow it to crash here since DHCPv6 might be able to run. |
86 | # This error may be irrelevant if there is an IPv4 network in |
87 | # the MAAS model which is not configured on the rack, and the |
88 | # user only wants to serve DHCPv6. But it is still something |
89 | # worth noting, so log it and continue. |
90 | - log.err(e) |
91 | + log.err(None, "Failure configuring DHCPv4.") |
92 | else: |
93 | failover_peer, subnets, hosts, interface = config |
94 | if failover_peer is not None: |
95 | @@ -586,14 +589,14 @@ |
96 | config = get_dhcp_configure_for( |
97 | 6, rack_controller, vlan, subnets_v6, |
98 | ntp_servers, default_domain, dhcp_snippets) |
99 | - except DHCPConfigurationError as e: |
100 | + except DHCPConfigurationError: |
101 | # XXX bug #1602412: this silently breaks DHCPv6, but we cannot |
102 | # allow it to crash here since DHCPv4 might be able to run. |
103 | # This error may be irrelevant if there is an IPv6 network in |
104 | # the MAAS model which is not configured on the rack, and the |
105 | # user only wants to serve DHCPv4. But it is still something |
106 | # worth noting, so log it and continue. |
107 | - log.err(e) |
108 | + log.err(None, "Failure configuring DHCPv6.") |
109 | else: |
110 | failover_peer, subnets, hosts, interface = config |
111 | if failover_peer is not None: |
112 | |
113 | === modified file 'src/maasserver/dns/publication.py' |
114 | --- src/maasserver/dns/publication.py 2016-04-29 20:16:40 +0000 |
115 | +++ src/maasserver/dns/publication.py 2016-11-01 16:47:02 +0000 |
116 | @@ -16,12 +16,15 @@ |
117 | from maasserver.models.dnspublication import DNSPublication |
118 | from maasserver.utils.orm import transactional |
119 | from maasserver.utils.threads import deferToDatabase |
120 | +from provisioningserver.logger import LegacyLogger |
121 | from provisioningserver.utils.twisted import callOut |
122 | from pytz import UTC |
123 | from twisted.application.service import Service |
124 | from twisted.internet import reactor |
125 | from twisted.internet.task import LoopingCall |
126 | -from twisted.python import log |
127 | + |
128 | + |
129 | +log = LegacyLogger() |
130 | |
131 | |
132 | class DNSPublicationGarbageService(Service): |
133 | |
134 | === modified file 'src/maasserver/models/largefile.py' |
135 | --- src/maasserver/models/largefile.py 2016-07-30 01:17:54 +0000 |
136 | +++ src/maasserver/models/largefile.py 2016-11-01 16:47:02 +0000 |
137 | @@ -26,12 +26,15 @@ |
138 | transactional, |
139 | ) |
140 | from maasserver.utils.threads import deferToDatabase |
141 | +from provisioningserver.logger import LegacyLogger |
142 | from provisioningserver.utils.twisted import ( |
143 | asynchronous, |
144 | FOREVER, |
145 | ) |
146 | from twisted.internet import reactor |
147 | -from twisted.python import log |
148 | + |
149 | + |
150 | +log = LegacyLogger() |
151 | |
152 | |
153 | class FileStorageManager(Manager): |
154 | |
155 | === modified file 'src/maasserver/models/signals/power.py' |
156 | --- src/maasserver/models/signals/power.py 2016-04-23 08:53:54 +0000 |
157 | +++ src/maasserver/models/signals/power.py 2016-11-01 16:47:02 +0000 |
158 | @@ -18,6 +18,7 @@ |
159 | ) |
160 | from maasserver.utils.signals import SignalsManager |
161 | from maasserver.utils.threads import deferToDatabase |
162 | +from provisioningserver.logger import LegacyLogger |
163 | from provisioningserver.rpc.exceptions import UnknownPowerType |
164 | from provisioningserver.utils.twisted import ( |
165 | asynchronous, |
166 | @@ -26,7 +27,9 @@ |
167 | synchronous, |
168 | ) |
169 | from twisted.internet import reactor |
170 | -from twisted.python import log |
171 | + |
172 | + |
173 | +log = LegacyLogger() |
174 | |
175 | |
176 | signals = SignalsManager() |
177 | |
178 | === modified file 'src/maasserver/plugin.py' |
179 | --- src/maasserver/plugin.py 2016-10-19 17:06:30 +0000 |
180 | +++ src/maasserver/plugin.py 2016-11-01 16:47:02 +0000 |
181 | @@ -11,6 +11,7 @@ |
182 | |
183 | from maasserver.monkey import add_patches_to_django |
184 | from provisioningserver import logger |
185 | +from provisioningserver.logger import LegacyLogger |
186 | from provisioningserver.monkey import add_patches_to_twisted |
187 | from provisioningserver.utils.debug import ( |
188 | register_sigusr2_thread_dump_handler, |
189 | @@ -18,11 +19,13 @@ |
190 | from twisted.application.service import IServiceMaker |
191 | from twisted.internet import reactor |
192 | from twisted.plugin import IPlugin |
193 | -from twisted.python import log |
194 | from twisted.python.threadable import isInIOThread |
195 | from zope.interface import implementer |
196 | |
197 | |
198 | +log = LegacyLogger() |
199 | + |
200 | + |
201 | class Options(logger.VerbosityOptions): |
202 | """Command-line options for `regiond`.""" |
203 | |
204 | |
205 | === modified file 'src/maasserver/populate_tags.py' |
206 | --- src/maasserver/populate_tags.py 2016-10-12 15:26:17 +0000 |
207 | +++ src/maasserver/populate_tags.py 2016-11-01 16:47:02 +0000 |
208 | @@ -31,7 +31,10 @@ |
209 | ) |
210 | from maasserver.rpc import getAllClients |
211 | from maasserver.utils.orm import transactional |
212 | -from provisioningserver.logger import get_maas_logger |
213 | +from provisioningserver.logger import ( |
214 | + get_maas_logger, |
215 | + LegacyLogger, |
216 | +) |
217 | from provisioningserver.rpc.cluster import EvaluateTag |
218 | from provisioningserver.tags import ( |
219 | DEFAULT_BATCH_SIZE, |
220 | @@ -46,10 +49,10 @@ |
221 | ) |
222 | from provisioningserver.utils.xpath import try_match_xpath |
223 | from twisted.internet.defer import DeferredList |
224 | -from twisted.python import log |
225 | |
226 | |
227 | maaslog = get_maas_logger("tags") |
228 | +log = LegacyLogger() |
229 | |
230 | |
231 | # The nsmap that XPath expression must be compiled with. This will |
232 | |
233 | === modified file 'src/maasserver/rack_controller.py' |
234 | --- src/maasserver/rack_controller.py 2016-07-20 20:27:50 +0000 |
235 | +++ src/maasserver/rack_controller.py 2016-11-01 16:47:02 +0000 |
236 | @@ -43,6 +43,7 @@ |
237 | from maasserver.models.node import RackController |
238 | from maasserver.utils.orm import transactional |
239 | from maasserver.utils.threads import deferToDatabase |
240 | +from provisioningserver.logger import LegacyLogger |
241 | from provisioningserver.utils.twisted import ( |
242 | asynchronous, |
243 | callOut, |
244 | @@ -55,7 +56,9 @@ |
245 | maybeDeferred, |
246 | ) |
247 | from twisted.internet.task import LoopingCall |
248 | -from twisted.python import log |
249 | + |
250 | + |
251 | +log = LegacyLogger() |
252 | |
253 | |
254 | class RackControllerService(Service): |
255 | |
256 | === modified file 'src/maasserver/region_controller.py' |
257 | --- src/maasserver/region_controller.py 2016-03-31 20:41:32 +0000 |
258 | +++ src/maasserver/region_controller.py 2016-11-01 16:47:02 +0000 |
259 | @@ -27,6 +27,7 @@ |
260 | from maasserver.proxyconfig import proxy_update_config |
261 | from maasserver.utils.orm import transactional |
262 | from maasserver.utils.threads import deferToDatabase |
263 | +from provisioningserver.logger import LegacyLogger |
264 | from provisioningserver.utils.twisted import ( |
265 | asynchronous, |
266 | FOREVER, |
267 | @@ -35,7 +36,9 @@ |
268 | from twisted.internet import reactor |
269 | from twisted.internet.defer import DeferredList |
270 | from twisted.internet.task import LoopingCall |
271 | -from twisted.python import log |
272 | + |
273 | + |
274 | +log = LegacyLogger() |
275 | |
276 | |
277 | class RegionControllerService(Service): |
278 | |
279 | === modified file 'src/maasserver/regiondservices/active_discovery.py' |
280 | --- src/maasserver/regiondservices/active_discovery.py 2016-09-29 00:15:29 +0000 |
281 | +++ src/maasserver/regiondservices/active_discovery.py 2016-11-01 16:47:02 +0000 |
282 | @@ -27,13 +27,17 @@ |
283 | with_connection, |
284 | ) |
285 | from maasserver.utils.threads import deferToDatabase |
286 | +from provisioningserver.logger import LegacyLogger |
287 | from twisted.application.internet import TimerService |
288 | from twisted.internet import reactor |
289 | from twisted.internet.defer import ( |
290 | inlineCallbacks, |
291 | maybeDeferred, |
292 | ) |
293 | -from twisted.python import log |
294 | + |
295 | + |
296 | +log = LegacyLogger() |
297 | + |
298 | |
299 | # The check interval serves as somewhat of a throttle; normally, we will |
300 | # not scan more than once every CHECK_INTERVAL seconds (unless the discovery |
301 | |
302 | === modified file 'src/maasserver/regiondservices/ntp.py' |
303 | --- src/maasserver/regiondservices/ntp.py 2016-10-03 20:32:26 +0000 |
304 | +++ src/maasserver/regiondservices/ntp.py 2016-11-01 16:47:02 +0000 |
305 | @@ -15,6 +15,7 @@ |
306 | from maasserver.service_monitor import service_monitor |
307 | from maasserver.utils.orm import transactional |
308 | from maasserver.utils.threads import deferToDatabase |
309 | +from provisioningserver.logger import LegacyLogger |
310 | from provisioningserver.ntp.config import configure_region |
311 | from provisioningserver.utils.twisted import ( |
312 | callOut, |
313 | @@ -23,7 +24,9 @@ |
314 | from twisted.application.internet import TimerService |
315 | from twisted.internet.defer import maybeDeferred |
316 | from twisted.internet.threads import deferToThread |
317 | -from twisted.python import log |
318 | + |
319 | + |
320 | +log = LegacyLogger() |
321 | |
322 | |
323 | class RegionNetworkTimeProtocolService(TimerService): |
324 | |
325 | === modified file 'src/maasserver/regiondservices/reverse_dns.py' |
326 | --- src/maasserver/regiondservices/reverse_dns.py 2016-10-20 23:17:48 +0000 |
327 | +++ src/maasserver/regiondservices/reverse_dns.py 2016-11-01 16:47:02 +0000 |
328 | @@ -15,10 +15,13 @@ |
329 | RegionController, |
330 | ) |
331 | from maasserver.utils.threads import deferToDatabase |
332 | +from provisioningserver.logger import LegacyLogger |
333 | from provisioningserver.utils.network import reverseResolve |
334 | from twisted.application.service import Service |
335 | from twisted.internet.defer import inlineCallbacks |
336 | -from twisted.python import log |
337 | + |
338 | + |
339 | +log = LegacyLogger() |
340 | |
341 | |
342 | class ReverseDNSService(Service): |
343 | |
344 | === modified file 'src/maasserver/regiondservices/service_monitor_service.py' |
345 | --- src/maasserver/regiondservices/service_monitor_service.py 2016-08-19 10:22:29 +0000 |
346 | +++ src/maasserver/regiondservices/service_monitor_service.py 2016-11-01 16:47:02 +0000 |
347 | @@ -15,10 +15,13 @@ |
348 | from maasserver.utils.orm import transactional |
349 | from maasserver.utils.threads import deferToDatabase |
350 | from provisioningserver.config import is_dev_environment |
351 | +from provisioningserver.logger import LegacyLogger |
352 | from twisted.application.internet import TimerService |
353 | from twisted.internet import reactor |
354 | from twisted.internet.defer import inlineCallbacks |
355 | -from twisted.python import log |
356 | + |
357 | + |
358 | +log = LegacyLogger() |
359 | |
360 | |
361 | class ServiceMonitorService(TimerService, object): |
362 | |
363 | === modified file 'src/maasserver/rpc/regionservice.py' |
364 | --- src/maasserver/rpc/regionservice.py 2016-10-12 15:26:17 +0000 |
365 | +++ src/maasserver/rpc/regionservice.py 2016-11-01 16:47:02 +0000 |
366 | @@ -67,6 +67,7 @@ |
367 | AddrConversionError, |
368 | IPAddress, |
369 | ) |
370 | +from provisioningserver.logger import LegacyLogger |
371 | from provisioningserver.rpc import ( |
372 | cluster, |
373 | common, |
374 | @@ -116,9 +117,12 @@ |
375 | from twisted.internet.task import LoopingCall |
376 | from twisted.internet.threads import deferToThread |
377 | from twisted.protocols import amp |
378 | -from twisted.python import log |
379 | from zope.interface import implementer |
380 | |
381 | + |
382 | +log = LegacyLogger() |
383 | + |
384 | + |
385 | # Number of regiond processes that should be running for a regiond. |
386 | # XXX blake_r 2016-03-10 bug=1555901: It would be better to determine this |
387 | # value from systemd or other means instead of hard coding the number. |
388 | @@ -870,7 +874,8 @@ |
389 | super(RegionService, self).startService() |
390 | self.starting = defer.DeferredList( |
391 | (self._bindFirst(endpoint_options, self.factory) |
392 | - for endpoint_options in self.endpoints)) |
393 | + for endpoint_options in self.endpoints), |
394 | + consumeErrors=True) |
395 | |
396 | def log_failure(failure): |
397 | if failure.check(defer.CancelledError): |
398 | @@ -903,7 +908,7 @@ |
399 | try: |
400 | yield conn.transport.loseConnection() |
401 | except: |
402 | - log.err() |
403 | + log.err(None, "Failure when closing RPC connection.") |
404 | yield super(RegionService, self).stopService() |
405 | |
406 | @asynchronous(timeout=FOREVER) |
407 | |
408 | === modified file 'src/maasserver/rpc/tests/test_regionservice.py' |
409 | --- src/maasserver/rpc/tests/test_regionservice.py 2016-10-12 15:26:17 +0000 |
410 | +++ src/maasserver/rpc/tests/test_regionservice.py 2016-11-01 16:47:02 +0000 |
411 | @@ -124,9 +124,7 @@ |
412 | from twisted.internet.interfaces import IStreamServerEndpoint |
413 | from twisted.internet.protocol import Factory |
414 | from twisted.internet.task import LoopingCall |
415 | -from twisted.logger import globalLogPublisher |
416 | from twisted.protocols import amp |
417 | -from twisted.python import log |
418 | from twisted.python.failure import Failure |
419 | from twisted.python.reflect import fullyQualifiedName |
420 | from zope.interface.verify import verifyObject |
421 | @@ -661,19 +659,17 @@ |
422 | endpoints = self.patch(service, "endpoints", [[Mock()]]) |
423 | endpoints[0][0].listen.return_value = fail(exception) |
424 | |
425 | - logged_failures = [] |
426 | - self.patch(log, "msg", ( |
427 | - lambda failure, **kw: logged_failures.append(failure))) |
428 | - |
429 | logged_failures_expected = [ |
430 | AfterPreprocessing( |
431 | (lambda failure: failure.value), |
432 | Is(exception)), |
433 | ] |
434 | |
435 | - yield service.startService() |
436 | + with TwistedLoggerFixture() as logger: |
437 | + yield service.startService() |
438 | + |
439 | self.assertThat( |
440 | - logged_failures, MatchesListwise(logged_failures_expected)) |
441 | + logger.failures, MatchesListwise(logged_failures_expected)) |
442 | |
443 | @wait_for_reactor |
444 | @inlineCallbacks |
445 | @@ -821,12 +817,12 @@ |
446 | # Connection-specific errors are logged. |
447 | self.assertDocTestMatches( |
448 | """\ |
449 | - Unhandled Error |
450 | + Failure when closing RPC connection. |
451 | Traceback (most recent call last): |
452 | ... |
453 | builtins.OSError: broken |
454 | ... |
455 | - Unhandled Error |
456 | + Failure when closing RPC connection. |
457 | Traceback (most recent call last): |
458 | ... |
459 | builtins.OSError: broken |
460 | @@ -841,8 +837,6 @@ |
461 | exception = ValueError("This is a very naughty boy.") |
462 | endpoints = self.patch(service, "endpoints", [[Mock()]]) |
463 | endpoints[0][0].listen.return_value = fail(exception) |
464 | - # Suppress logged messages. |
465 | - self.patch(globalLogPublisher, "_observers", []) |
466 | |
467 | service.startService() |
468 | # The test is that stopService() succeeds. |
469 | |
470 | === modified file 'src/maasserver/start_up.py' |
471 | --- src/maasserver/start_up.py 2016-06-21 10:36:38 +0000 |
472 | +++ src/maasserver/start_up.py 2016-11-01 16:47:02 +0000 |
473 | @@ -27,7 +27,10 @@ |
474 | with_connection, |
475 | ) |
476 | from maasserver.utils.threads import deferToDatabase |
477 | -from provisioningserver.logger import get_maas_logger |
478 | +from provisioningserver.logger import ( |
479 | + get_maas_logger, |
480 | + LegacyLogger, |
481 | +) |
482 | from provisioningserver.utils.twisted import ( |
483 | asynchronous, |
484 | FOREVER, |
485 | @@ -35,11 +38,11 @@ |
486 | ) |
487 | from twisted.internet import reactor |
488 | from twisted.internet.defer import inlineCallbacks |
489 | -from twisted.python import log |
490 | |
491 | |
492 | maaslog = get_maas_logger("start-up") |
493 | logger = logging.getLogger(__name__) |
494 | +log = LegacyLogger() |
495 | |
496 | |
497 | @asynchronous(timeout=FOREVER) |
498 | |
499 | === modified file 'src/maasserver/utils/async.py' |
500 | --- src/maasserver/utils/async.py 2016-09-21 14:14:38 +0000 |
501 | +++ src/maasserver/utils/async.py 2016-11-01 16:47:02 +0000 |
502 | @@ -15,6 +15,7 @@ |
503 | import threading |
504 | |
505 | from maasserver.exceptions import IteratorReusedError |
506 | +from provisioningserver.logger import LegacyLogger |
507 | from provisioningserver.utils.twisted import ( |
508 | asynchronous, |
509 | FOREVER, |
510 | @@ -27,7 +28,9 @@ |
511 | Deferred, |
512 | maybeDeferred, |
513 | ) |
514 | -from twisted.python import log |
515 | + |
516 | + |
517 | +log = LegacyLogger() |
518 | |
519 | |
520 | class UseOnceIterator: |
521 | @@ -118,7 +121,7 @@ |
522 | try: |
523 | deferred.cancel() |
524 | except: |
525 | - log.err() |
526 | + log.err(None, "Failure gathering results.") |
527 | |
528 | if timeout is None: |
529 | canceller = None |
530 | @@ -243,12 +246,12 @@ |
531 | @asynchronous |
532 | def _cancel_in_reactor(hook): |
533 | hook.addErrback(suppress, CancelledError) |
534 | - hook.addErrback(log.err) |
535 | + hook.addErrback(log.err, "Failure when cancelling hook.") |
536 | try: |
537 | hook.cancel() |
538 | except: |
539 | # The canceller has failed. We take a hint from DeferredList here, |
540 | # by logging the exception and moving on. |
541 | - log.err(_why="Failure when cancelling hook.") |
542 | + log.err(None, "Failure when cancelling hook.") |
543 | else: |
544 | return hook |
545 | |
546 | === modified file 'src/maasserver/utils/dbtasks.py' |
547 | --- src/maasserver/utils/dbtasks.py 2015-12-01 18:12:59 +0000 |
548 | +++ src/maasserver/utils/dbtasks.py 2016-11-01 16:47:02 +0000 |
549 | @@ -14,6 +14,7 @@ |
550 | ] |
551 | |
552 | from maasserver.utils.threads import deferToDatabase |
553 | +from provisioningserver.logger import LegacyLogger |
554 | from provisioningserver.utils.twisted import ( |
555 | asynchronous, |
556 | FOREVER, |
557 | @@ -24,7 +25,9 @@ |
558 | DeferredQueue, |
559 | ) |
560 | from twisted.internet.task import cooperate |
561 | -from twisted.python import log |
562 | + |
563 | + |
564 | +log = LegacyLogger() |
565 | |
566 | |
567 | class DatabaseTaskAlreadyRunning(Exception): |
568 | |
569 | === modified file 'src/maasserver/utils/tests/test_async.py' |
570 | --- src/maasserver/utils/tests/test_async.py 2016-09-20 00:55:30 +0000 |
571 | +++ src/maasserver/utils/tests/test_async.py 2016-11-01 16:47:02 +0000 |
572 | @@ -299,7 +299,7 @@ |
573 | self.assertThat(d, IsFiredDeferred()) |
574 | self.assertDocTestMatches( |
575 | dedent("""\ |
576 | - Unhandled Error |
577 | + Failure when cancelling hook. |
578 | Traceback (most recent call last): |
579 | ... |
580 | maastesting.factory.TestException#... |
581 | |
582 | === modified file 'src/maasserver/webapp.py' |
583 | --- src/maasserver/webapp.py 2016-03-28 13:54:47 +0000 |
584 | +++ src/maasserver/webapp.py 2016-11-01 16:47:02 +0000 |
585 | @@ -19,6 +19,7 @@ |
586 | lookupProtocolForFactory, |
587 | WebSocketsResource, |
588 | ) |
589 | +from provisioningserver.logger import LegacyLogger |
590 | from provisioningserver.utils.twisted import ( |
591 | asynchronous, |
592 | ThreadPoolLimiter, |
593 | @@ -28,10 +29,7 @@ |
594 | defer, |
595 | reactor, |
596 | ) |
597 | -from twisted.python import ( |
598 | - failure, |
599 | - log, |
600 | -) |
601 | +from twisted.python import failure |
602 | from twisted.web.resource import ( |
603 | ErrorPage, |
604 | Resource, |
605 | @@ -45,6 +43,9 @@ |
606 | from twisted.web.wsgi import WSGIResource |
607 | |
608 | |
609 | +log = LegacyLogger() |
610 | + |
611 | + |
612 | class StartPage(ErrorPage, object): |
613 | def __init__(self): |
614 | super(StartPage, self).__init__( |
615 | |
616 | === modified file 'src/maasserver/websockets/handlers/bootresource.py' |
617 | --- src/maasserver/websockets/handlers/bootresource.py 2016-10-17 20:17:10 +0000 |
618 | +++ src/maasserver/websockets/handlers/bootresource.py 2016-11-01 16:47:02 +0000 |
619 | @@ -57,6 +57,7 @@ |
620 | image_passes_filter, |
621 | ) |
622 | from provisioningserver.import_images.keyrings import write_all_keyrings |
623 | +from provisioningserver.logger import LegacyLogger |
624 | from provisioningserver.utils.fs import tempdir |
625 | from provisioningserver.utils.twisted import ( |
626 | asynchronous, |
627 | @@ -64,7 +65,9 @@ |
628 | FOREVER, |
629 | ) |
630 | from twisted.internet.defer import Deferred |
631 | -from twisted.python import log |
632 | + |
633 | + |
634 | +log = LegacyLogger() |
635 | |
636 | |
637 | def get_distro_series_info_row(series): |
638 | |
639 | === modified file 'src/maasserver/websockets/handlers/machine.py' |
640 | --- src/maasserver/websockets/handlers/machine.py 2016-10-24 17:11:57 +0000 |
641 | +++ src/maasserver/websockets/handlers/machine.py 2016-11-01 16:47:02 +0000 |
642 | @@ -79,13 +79,12 @@ |
643 | node_prefetch, |
644 | NodeHandler, |
645 | ) |
646 | -from provisioningserver.logger import get_maas_logger |
647 | +from provisioningserver.logger import LegacyLogger |
648 | from provisioningserver.rpc.exceptions import UnknownPowerType |
649 | from provisioningserver.utils.twisted import asynchronous |
650 | -from twisted.python import log |
651 | - |
652 | - |
653 | -maaslog = get_maas_logger("websockets.machine") |
654 | + |
655 | + |
656 | +log = LegacyLogger() |
657 | |
658 | |
659 | class MachineHandler(NodeHandler): |
660 | |
661 | === modified file 'src/maasserver/websockets/protocol.py' |
662 | --- src/maasserver/websockets/protocol.py 2016-09-07 15:40:52 +0000 |
663 | +++ src/maasserver/websockets/protocol.py 2016-11-01 16:47:02 +0000 |
664 | @@ -4,7 +4,8 @@ |
665 | """The MAAS WebSockets protocol.""" |
666 | |
667 | __all__ = [ |
668 | - ] |
669 | + "WebSocketProtocol", |
670 | +] |
671 | |
672 | from collections import deque |
673 | from functools import partial |
674 | @@ -29,6 +30,7 @@ |
675 | from maasserver.utils.threads import deferToDatabase |
676 | from maasserver.websockets import handlers |
677 | from maasserver.websockets.websockets import STATUSES |
678 | +from provisioningserver.logger import LegacyLogger |
679 | from provisioningserver.utils import typed |
680 | from provisioningserver.utils.twisted import ( |
681 | deferred, |
682 | @@ -42,11 +44,13 @@ |
683 | Factory, |
684 | Protocol, |
685 | ) |
686 | -from twisted.python import log |
687 | from twisted.python.modules import getModule |
688 | from twisted.web.server import NOT_DONE_YET |
689 | |
690 | |
691 | +log = LegacyLogger() |
692 | + |
693 | + |
694 | class MSG_TYPE: |
695 | #: Request made from client. |
696 | REQUEST = 0 |
697 | @@ -126,8 +130,8 @@ |
698 | |
699 | def loseConnection(self, status, reason): |
700 | """Close connection with status and reason.""" |
701 | - msgFormat = "Closing connection: %(status)r (%(reason)r)" |
702 | - log.msg(format=msgFormat, status=status, reason=reason) |
703 | + msgFormat = "Closing connection: {status!r} ({reason!r})" |
704 | + log.debug(msgFormat, status=status, reason=reason) |
705 | self.transport._receiver._transport.loseConnection( |
706 | status, reason.encode("utf-8")) |
707 | |
708 | @@ -321,7 +325,7 @@ |
709 | error = failure.getErrorMessage() |
710 | why = "Error on request (%s) %s.%s: %s" % ( |
711 | request_id, handler._meta.handler_name, method, error) |
712 | - log.err(failure, _why=why) |
713 | + log.err(failure, why) |
714 | |
715 | error_msg = { |
716 | "type": MSG_TYPE.RESPONSE, |
717 | |
718 | === modified file 'src/maasserver/websockets/tests/test_protocol.py' |
719 | --- src/maasserver/websockets/tests/test_protocol.py 2016-09-14 19:50:53 +0000 |
720 | +++ src/maasserver/websockets/tests/test_protocol.py 2016-11-01 16:47:02 +0000 |
721 | @@ -40,6 +40,7 @@ |
722 | MockCalledWith, |
723 | ) |
724 | from maastesting.testcase import MAASTestCase |
725 | +from maastesting.twisted import TwistedLoggerFixture |
726 | from provisioningserver.refresh.node_info_scripts import LSHW_OUTPUT_NAME |
727 | from provisioningserver.utils.twisted import synchronous |
728 | from testtools.matchers import ( |
729 | @@ -155,15 +156,15 @@ |
730 | |
731 | def test_loseConnection_writes_to_log(self): |
732 | protocol, factory = self.make_protocol() |
733 | - mock_log_msg = self.patch_autospec(protocol_module.log, "msg") |
734 | status = random.randint(1000, 1010) |
735 | reason = maas_factory.make_name("reason") |
736 | - protocol.loseConnection(status, reason) |
737 | + with TwistedLoggerFixture() as logger: |
738 | + protocol.loseConnection(status, reason) |
739 | self.assertThat( |
740 | - mock_log_msg, |
741 | - MockCalledOnceWith( |
742 | - format="Closing connection: %(status)r (%(reason)r)", |
743 | - status=status, reason=reason)) |
744 | + logger.messages, Equals([ |
745 | + "Closing connection: %(status)r (%(reason)r)" |
746 | + % dict(status=status, reason=reason), |
747 | + ])) |
748 | |
749 | def test_loseConnection_calls_loseConnection_with_status_and_reason(self): |
750 | protocol, factory = self.make_protocol() |
751 | |
752 | === modified file 'src/maasserver/websockets/tests/test_websockets.py' |
753 | --- src/maasserver/websockets/tests/test_websockets.py 2016-09-29 16:30:55 +0000 |
754 | +++ src/maasserver/websockets/tests/test_websockets.py 2016-11-01 16:47:02 +0000 |
755 | @@ -28,13 +28,13 @@ |
756 | WebSocketsTransport, |
757 | ) |
758 | from maastesting.testcase import MAASTestCase |
759 | +from maastesting.twisted import TwistedLoggerFixture |
760 | from testtools.matchers import StartsWith |
761 | from twisted.internet.protocol import ( |
762 | Factory, |
763 | Protocol, |
764 | ) |
765 | from twisted.protocols.tls import TLSMemoryBIOProtocol |
766 | -from twisted.python import log |
767 | from twisted.test.proto_helpers import ( |
768 | AccumulatingProtocol, |
769 | StringTransportWithDisconnection, |
770 | @@ -396,18 +396,13 @@ |
771 | When a C{CLOSE} frame is received, the protocol closes the connection |
772 | and logs a message. |
773 | """ |
774 | - loggedMessages = [] |
775 | - |
776 | - def logConnectionLostMsg(eventDict): |
777 | - loggedMessages.append(log.textFromEventDict(eventDict)) |
778 | - |
779 | - log.addObserver(logConnectionLostMsg) |
780 | - |
781 | - self.protocol.dataReceived( |
782 | - _makeFrame(b"", CONTROLS.CLOSE, True, mask=b"abcd")) |
783 | + with TwistedLoggerFixture() as logger: |
784 | + self.protocol.dataReceived( |
785 | + _makeFrame(b"", CONTROLS.CLOSE, True, mask=b"abcd")) |
786 | self.assertFalse(self.transport.connected) |
787 | - self.assertEqual(["Closing connection: <STATUSES=NONE>"], |
788 | - loggedMessages) |
789 | + self.assertEqual( |
790 | + ["Closing connection: <STATUSES=NONE>"], |
791 | + logger.messages) |
792 | |
793 | def test_invalidFrame(self): |
794 | """ |
795 | |
796 | === modified file 'src/maasserver/websockets/websockets.py' |
797 | --- src/maasserver/websockets/websockets.py 2016-09-30 13:23:30 +0000 |
798 | +++ src/maasserver/websockets/websockets.py 2016-11-01 16:47:02 +0000 |
799 | @@ -27,10 +27,10 @@ |
800 | Sequence, |
801 | ) |
802 | |
803 | +from provisioningserver.logger import LegacyLogger |
804 | from provisioningserver.utils import typed |
805 | from twisted.internet.protocol import Protocol |
806 | from twisted.protocols.tls import TLSMemoryBIOProtocol |
807 | -from twisted.python import log |
808 | from twisted.python.constants import ( |
809 | ValueConstant, |
810 | Values, |
811 | @@ -45,6 +45,9 @@ |
812 | ) |
813 | |
814 | |
815 | +log = LegacyLogger() |
816 | + |
817 | + |
818 | class _WSException(Exception): |
819 | """ |
820 | Internal exception for control flow inside the WebSockets frame parser. |
821 | @@ -392,7 +395,7 @@ |
822 | Log the new connection and initialize the buffer list. |
823 | """ |
824 | peer = self.transport.getPeer() |
825 | - log.msg(format="Opening connection with %(peer)s", peer=peer) |
826 | + log.debug("Opening connection with {peer}", peer=peer) |
827 | self._buffer = [] |
828 | self._receiver.makeConnection(WebSocketsTransport(self.transport)) |
829 | |
830 | @@ -405,10 +408,10 @@ |
831 | if opcode == CONTROLS.CLOSE: |
832 | # The other side wants us to close. |
833 | code, reason = data |
834 | - msgFormat = "Closing connection: %(code)r" |
835 | + msgFormat = "Closing connection: {code!r}" |
836 | if reason: |
837 | - msgFormat += " (%(reason)r)" |
838 | - log.msg(format=msgFormat, reason=reason, code=code) |
839 | + msgFormat += " ({reason!r})" |
840 | + log.debug(msgFormat, reason=reason, code=code) |
841 | |
842 | # Close the connection. |
843 | self.transport.loseConnection() |
844 | |
845 | === modified file 'src/maastesting/testcase.py' |
846 | --- src/maastesting/testcase.py 2016-09-17 20:11:23 +0000 |
847 | +++ src/maastesting/testcase.py 2016-11-01 16:47:02 +0000 |
848 | @@ -28,11 +28,17 @@ |
849 | MAASTwistedRunTest, |
850 | ) |
851 | from maastesting.scenarios import WithScenarios |
852 | +from maastesting.twisted import TwistedLoggerFixture |
853 | from nose.proxy import ResultProxy |
854 | from nose.tools import nottest |
855 | import testresources |
856 | import testtools |
857 | +from testtools.content import ( |
858 | + Content, |
859 | + UTF8_TEXT, |
860 | +) |
861 | import testtools.matchers |
862 | +from twisted.logger import formatEventAsClassicLogText |
863 | |
864 | |
865 | @nottest |
866 | @@ -139,6 +145,13 @@ |
867 | return MAASRunTest |
868 | |
869 | def setUp(self): |
870 | + # Capture Twisted logs and add them as a test detail. |
871 | + twistedLog = self.useFixture(TwistedLoggerFixture()) |
872 | + self.addDetail("Twisted logs", Content( |
873 | + UTF8_TEXT, lambda: ( |
874 | + formatEventAsClassicLogText(event).encode("utf-8") |
875 | + for event in twistedLog.events))) |
876 | + |
877 | self.maybeCheckTableRowCounts() |
878 | self.maybeCloseDatabaseConnections() |
879 | super(MAASTestCase, self).setUp() |
880 | |
881 | === modified file 'src/maastesting/twisted.py' |
882 | --- src/maastesting/twisted.py 2016-10-24 14:01:30 +0000 |
883 | +++ src/maastesting/twisted.py 2016-11-01 16:47:02 +0000 |
884 | @@ -18,7 +18,10 @@ |
885 | from testtools.deferredruntest import CaptureTwistedLogs |
886 | from testtools.twistedsupport._deferred import extract_result |
887 | from twisted.internet import defer |
888 | -from twisted.logger import LogLevel |
889 | +from twisted.logger import ( |
890 | + formatEvent, |
891 | + LogLevel, |
892 | +) |
893 | from twisted.python import log |
894 | |
895 | |
896 | @@ -47,17 +50,20 @@ |
897 | super(TwistedLoggerFixture, self).__init__() |
898 | self.events = [] |
899 | |
900 | - def dump(self): |
901 | - """Return all logs as a string.""" |
902 | - return "\n---\n".join( |
903 | - log.textFromEventDict(event) for event in self.events) |
904 | + @property |
905 | + def messages(self): |
906 | + """Return a list of events formatted with `t.logger.formatEvent`. |
907 | |
908 | - # For compatibility with fixtures.FakeLogger. |
909 | - output = property(dump) |
910 | + This returns a list of *strings*, not event dictionaries. |
911 | + """ |
912 | + return [formatEvent(event) for event in self.events] |
913 | |
914 | @property |
915 | def errors(self): |
916 | - """Return events that are at `LogLevel.error` or above.""" |
917 | + """Return a list of events that are at `LogLevel.error` or above. |
918 | + |
919 | + This returns a list of event *dictionaries*, not strings. |
920 | + """ |
921 | return [ |
922 | event for event in self.events |
923 | if "log_level" in event and |
924 | @@ -65,8 +71,34 @@ |
925 | event["log_level"] >= LogLevel.error |
926 | ] |
927 | |
928 | - def containsError(self): |
929 | - return any(event["isError"] for event in self.events) |
930 | + @property |
931 | + def failures(self): |
932 | + """Return a list of `Failure` instances from events.""" |
933 | + |
934 | + def find_failure(event): |
935 | + if "failure" in event: |
936 | + return event["failure"] |
937 | + elif "log_failure" in event: |
938 | + return event["log_failure"] |
939 | + else: |
940 | + return None |
941 | + |
942 | + failures = map(find_failure, self.events) |
943 | + return [failure for failure in failures if failure is not None] |
944 | + |
945 | + def dump(self): |
946 | + """Return a string of events formatted with `textFromEventDict`. |
947 | + |
948 | + This returns a single string, where each log message is separated from |
949 | + the next by a line containing "---". Formatting is done by Twisted's |
950 | + *legacy* log machinery, which may or may not differ from the modern |
951 | + machinery. |
952 | + """ |
953 | + return "\n---\n".join( |
954 | + log.textFromEventDict(event) for event in self.events) |
955 | + |
956 | + # For compatibility with fixtures.FakeLogger. |
957 | + output = property(dump) |
958 | |
959 | def setUp(self): |
960 | super(TwistedLoggerFixture, self).setUp() |
961 | |
962 | === modified file 'src/provisioningserver/dhcp/detect.py' |
963 | --- src/provisioningserver/dhcp/detect.py 2016-10-05 01:31:22 +0000 |
964 | +++ src/provisioningserver/dhcp/detect.py 2016-11-01 16:47:02 +0000 |
965 | @@ -22,7 +22,10 @@ |
966 | |
967 | import attr |
968 | from netaddr import IPAddress |
969 | -from provisioningserver.logger import get_maas_logger |
970 | +from provisioningserver.logger import ( |
971 | + get_maas_logger, |
972 | + LegacyLogger, |
973 | +) |
974 | from provisioningserver.utils.dhcp import DHCP |
975 | from twisted.internet import reactor |
976 | from twisted.internet.defer import ( |
977 | @@ -38,17 +41,11 @@ |
978 | blockingCallFromThread, |
979 | deferToThread, |
980 | ) |
981 | -from twisted.python import log |
982 | from twisted.python.failure import Failure |
983 | |
984 | |
985 | -_LOG_SYSTEM = "dhcp.detect" |
986 | -maaslog = get_maas_logger(_LOG_SYSTEM) |
987 | - |
988 | - |
989 | -def _log_msg(*args, **kwargs): |
990 | - """Log to the Twisted logger using a unique `system` name.""" |
991 | - log.msg(*args, system=_LOG_SYSTEM, **kwargs) |
992 | +maaslog = get_maas_logger("dhcp.detect") |
993 | +log = LegacyLogger() |
994 | |
995 | |
996 | def make_dhcp_transaction_id() -> bytes: |
997 | @@ -358,10 +355,10 @@ |
998 | else: |
999 | offer = DHCP(data) |
1000 | if not offer.is_valid(): |
1001 | - _log_msg( |
1002 | - "Invalid DHCP response received from %s on '%s': " |
1003 | - "%s" % ( |
1004 | - address, self.ifname, offer.invalid_reason)) |
1005 | + log.info( |
1006 | + "Invalid DHCP response received from {address} " |
1007 | + "on '{ifname}': {reason}", address=address, |
1008 | + ifname=self.ifname, reason=offer.invalid_reason) |
1009 | elif offer.packet.xid == xid: |
1010 | # Offer matches our transaction ID, so check if it has |
1011 | # a Server Identifier option. |
1012 | @@ -390,7 +387,7 @@ |
1013 | # has already been called. |
1014 | return None |
1015 | elif failure.check(DHCPProbeException): |
1016 | - _log_msg("DHCP probe failed. %s" % failure.getErrorMessage()) |
1017 | + log.msg("DHCP probe failed. %s" % failure.getErrorMessage()) |
1018 | elif failure.check(CancelledError): |
1019 | # Intentionally cancelled; no need to spam the log. |
1020 | pass |
1021 | @@ -450,9 +447,10 @@ |
1022 | """ |
1023 | servers = yield deferToThread(self.send_requests_and_await_replies) |
1024 | if len(servers) > 0: |
1025 | - _log_msg( |
1026 | - "External DHCP server(s) discovered on interface '%s': %s" |
1027 | - % (self.ifname, ', '.join(str(server) for server in servers))) |
1028 | + log.info( |
1029 | + "External DHCP server(s) discovered on interface '{ifname}': " |
1030 | + "{servers}", ifname=self.ifname, servers=', '.join( |
1031 | + str(server) for server in servers)) |
1032 | self.servers = servers |
1033 | |
1034 | @property |
1035 | |
1036 | === modified file 'src/provisioningserver/import_images/download_resources.py' |
1037 | --- src/provisioningserver/import_images/download_resources.py 2016-10-12 15:26:17 +0000 |
1038 | +++ src/provisioningserver/import_images/download_resources.py 2016-11-01 16:47:02 +0000 |
1039 | @@ -17,6 +17,7 @@ |
1040 | get_signing_policy, |
1041 | maaslog, |
1042 | ) |
1043 | +from provisioningserver.logger import LegacyLogger |
1044 | from provisioningserver.utils import in_develop_mode |
1045 | from provisioningserver.utils.shell import call_and_check |
1046 | from simplestreams.contentsource import FdContentSource |
1047 | @@ -30,7 +31,9 @@ |
1048 | path_from_mirror_url, |
1049 | products_exdata, |
1050 | ) |
1051 | -from twisted.python import log |
1052 | + |
1053 | + |
1054 | +log = LegacyLogger() |
1055 | |
1056 | |
1057 | DEFAULT_KEYRING_PATH = "/usr/share/keyrings" |
1058 | |
1059 | === modified file 'src/provisioningserver/logger/__init__.py' |
1060 | --- src/provisioningserver/logger/__init__.py 2016-10-25 14:00:30 +0000 |
1061 | +++ src/provisioningserver/logger/__init__.py 2016-11-01 16:47:02 +0000 |
1062 | @@ -51,6 +51,7 @@ |
1063 | __all__ = [ |
1064 | "configure", |
1065 | "get_maas_logger", |
1066 | + "LegacyLogger", |
1067 | "LoggingMode", |
1068 | "VerbosityOptions", |
1069 | ] |
1070 | @@ -63,6 +64,7 @@ |
1071 | from provisioningserver.logger._tftp import configure_tftp_logging |
1072 | from provisioningserver.logger._twisted import ( |
1073 | configure_twisted_logging, |
1074 | + LegacyLogger, |
1075 | VerbosityOptions, |
1076 | ) |
1077 | from provisioningserver.utils import typed |
1078 | |
1079 | === modified file 'src/provisioningserver/logger/_common.py' |
1080 | --- src/provisioningserver/logger/_common.py 2016-10-25 13:30:27 +0000 |
1081 | +++ src/provisioningserver/logger/_common.py 2016-11-01 16:47:02 +0000 |
1082 | @@ -100,3 +100,12 @@ |
1083 | asctime=time.strftime(DEFAULT_LOG_FORMAT_DATE, time.localtime()), |
1084 | name="global", levelname="warn", message=message) |
1085 | print(message, file=sys.__stdout__, flush=True) |
1086 | + |
1087 | + |
1088 | +def is_dev_environment(): |
1089 | + """Is this the development environment, or production? |
1090 | + |
1091 | + Lazy import to avoid circular import issues. |
1092 | + """ |
1093 | + from provisioningserver.config import is_dev_environment |
1094 | + return is_dev_environment() |
1095 | |
1096 | === modified file 'src/provisioningserver/logger/_django.py' |
1097 | --- src/provisioningserver/logger/_django.py 2016-10-25 13:30:27 +0000 |
1098 | +++ src/provisioningserver/logger/_django.py 2016-11-01 16:47:02 +0000 |
1099 | @@ -9,8 +9,8 @@ |
1100 | |
1101 | import warnings |
1102 | |
1103 | -from provisioningserver.config import is_dev_environment |
1104 | from provisioningserver.logger._common import ( |
1105 | + is_dev_environment, |
1106 | LoggingMode, |
1107 | warn_unless, |
1108 | ) |
1109 | |
1110 | === modified file 'src/provisioningserver/logger/_logging.py' |
1111 | --- src/provisioningserver/logger/_logging.py 2016-10-25 13:36:56 +0000 |
1112 | +++ src/provisioningserver/logger/_logging.py 2016-11-01 16:47:02 +0000 |
1113 | @@ -12,11 +12,11 @@ |
1114 | import logging.handlers |
1115 | import sys |
1116 | |
1117 | -from provisioningserver.config import is_dev_environment |
1118 | from provisioningserver.logger._common import ( |
1119 | DEFAULT_LOG_FORMAT, |
1120 | DEFAULT_LOG_FORMAT_DATE, |
1121 | DEFAULT_LOG_VERBOSITY_LEVELS, |
1122 | + is_dev_environment, |
1123 | LoggingMode, |
1124 | ) |
1125 | from provisioningserver.utils import typed |
1126 | |
1127 | === modified file 'src/provisioningserver/logger/_twisted.py' |
1128 | --- src/provisioningserver/logger/_twisted.py 2016-10-26 08:54:13 +0000 |
1129 | +++ src/provisioningserver/logger/_twisted.py 2016-11-01 16:47:02 +0000 |
1130 | @@ -185,7 +185,7 @@ |
1131 | return super().__call__(event) |
1132 | |
1133 | |
1134 | -class LegacyLogger: |
1135 | +class LegacyLogger(twistedModern.Logger): |
1136 | """Looks like a stripped-down `t.p.log` module, logs to a `Logger`. |
1137 | |
1138 | Use this with code that cannot easily be changed to use `twisted.logger` |
1139 | @@ -193,7 +193,7 @@ |
1140 | """ |
1141 | |
1142 | @classmethod |
1143 | - def install(cls, module, attribute="log", *, observer=None): |
1144 | + def install(cls, module, attribute="log", *, source=None, observer=None): |
1145 | """Install a `LegacyLogger` at `module.attribute`. |
1146 | |
1147 | Warns if `module.attribute` does not exist, but carries on anyway. |
1148 | @@ -201,8 +201,8 @@ |
1149 | :param module: A module (or any other object with assignable |
1150 | attributes and a `__name__`). |
1151 | :param attribute: The name of the attribute on `module` to replace. |
1152 | - :param observer: A (modern) logging observer to use. If not specified |
1153 | - the global log publisher will be used. |
1154 | + :param source: See `Logger.__init__`. |
1155 | + :param observer: See `Logger.__init__`. |
1156 | :return: The newly created `LegacyLogger`. |
1157 | """ |
1158 | replacing = getattr(module, attribute, "<not-found>") |
1159 | @@ -210,14 +210,9 @@ |
1160 | "Legacy logger being installed to replace %r but expected a " |
1161 | "reference to twisted.python.log module; please investigate!" |
1162 | % (replacing,))) |
1163 | - modernLogger = twistedModern.Logger(module.__name__, observer=observer) |
1164 | - legacyLogger = cls(modernLogger) |
1165 | - setattr(module, attribute, legacyLogger) |
1166 | - return legacyLogger |
1167 | - |
1168 | - def __init__(self, logger: twistedModern.Logger): |
1169 | - super(LegacyLogger, self).__init__() |
1170 | - self.logger = logger |
1171 | + logger = cls(module.__name__, source=source, observer=observer) |
1172 | + setattr(module, attribute, logger) |
1173 | + return logger |
1174 | |
1175 | def msg(self, *message, **kwargs): |
1176 | """Write a message to the log. |
1177 | @@ -228,14 +223,14 @@ |
1178 | """ |
1179 | fmt = " ".join("{_message_%d}" % i for i, _ in enumerate(message)) |
1180 | kwargs.update({"_message_%d" % i: m for i, m in enumerate(message)}) |
1181 | - self.logger.info(fmt, **kwargs) |
1182 | + self.info(fmt, **kwargs) |
1183 | |
1184 | def err(self, _stuff=None, _why=None, **kwargs): |
1185 | """Write a failure to the log. |
1186 | |
1187 | See `twisted.python.log.err`. |
1188 | """ |
1189 | - self.logger.failure("{_why}", _stuff, _why=_why, **kwargs) |
1190 | + self.failure("{_why}", _stuff, _why=_why, **kwargs) |
1191 | |
1192 | |
1193 | class VerbosityOptions(usage.Options): |
1194 | |
1195 | === modified file 'src/provisioningserver/logger/tests/test__twisted.py' |
1196 | --- src/provisioningserver/logger/tests/test__twisted.py 2016-10-26 09:12:47 +0000 |
1197 | +++ src/provisioningserver/logger/tests/test__twisted.py 2016-11-01 16:47:02 +0000 |
1198 | @@ -261,8 +261,7 @@ |
1199 | def test__logs_messages(self): |
1200 | events = [] |
1201 | namespace = factory.make_name("namespace") |
1202 | - modern_logger = logger.Logger(namespace, self, events.append) |
1203 | - legacy_logger = LegacyLogger(modern_logger) |
1204 | + legacy_logger = LegacyLogger(namespace, self, events.append) |
1205 | message = factory.make_name("message") |
1206 | keywords = { |
1207 | factory.make_name("key"): factory.make_name("value") |
1208 | @@ -274,7 +273,7 @@ |
1209 | expected = { |
1210 | 'log_format': Equals('{_message_0}'), |
1211 | 'log_level': Equals(logger.LogLevel.info), |
1212 | - 'log_logger': Is(modern_logger), |
1213 | + 'log_logger': Is(legacy_logger), |
1214 | 'log_namespace': Equals(namespace), |
1215 | 'log_source': Is(self), |
1216 | 'log_time': IsInstance(float), |
1217 | @@ -292,8 +291,7 @@ |
1218 | |
1219 | def test__logs_multiple_messages(self): |
1220 | events = [] |
1221 | - modern_logger = logger.Logger(observer=events.append) |
1222 | - legacy_logger = LegacyLogger(modern_logger) |
1223 | + legacy_logger = LegacyLogger(observer=events.append) |
1224 | messages = [ |
1225 | factory.make_name("message"), |
1226 | factory.make_name("message"), |
1227 | @@ -317,8 +315,7 @@ |
1228 | def test__logs_errors(self): |
1229 | events = [] |
1230 | namespace = factory.make_name("namespace") |
1231 | - modern_logger = logger.Logger(namespace, self, events.append) |
1232 | - legacy_logger = LegacyLogger(modern_logger) |
1233 | + legacy_logger = LegacyLogger(namespace, self, events.append) |
1234 | message = factory.make_name("message") |
1235 | exception_type = factory.make_exception_type() |
1236 | keywords = { |
1237 | @@ -341,7 +338,7 @@ |
1238 | ), |
1239 | 'log_format': Equals('{_why}'), |
1240 | 'log_level': Equals(logger.LogLevel.critical), |
1241 | - 'log_logger': Is(modern_logger), |
1242 | + 'log_logger': Is(legacy_logger), |
1243 | 'log_namespace': Equals(namespace), |
1244 | 'log_source': Is(self), |
1245 | 'log_time': IsInstance(float), |
1246 | |
1247 | === modified file 'src/provisioningserver/power/change.py' |
1248 | --- src/provisioningserver/power/change.py 2016-10-25 13:57:02 +0000 |
1249 | +++ src/provisioningserver/power/change.py 2016-11-01 16:47:02 +0000 |
1250 | @@ -19,7 +19,10 @@ |
1251 | EVENT_TYPES, |
1252 | send_event_node, |
1253 | ) |
1254 | -from provisioningserver.logger import get_maas_logger |
1255 | +from provisioningserver.logger import ( |
1256 | + get_maas_logger, |
1257 | + LegacyLogger, |
1258 | +) |
1259 | from provisioningserver.power import query |
1260 | from provisioningserver.rpc import getRegionClient |
1261 | from provisioningserver.rpc.exceptions import ( |
1262 | @@ -40,10 +43,10 @@ |
1263 | returnValue, |
1264 | ) |
1265 | from twisted.internet.task import deferLater |
1266 | -from twisted.python import log |
1267 | |
1268 | |
1269 | maaslog = get_maas_logger("power") |
1270 | +log = LegacyLogger() |
1271 | |
1272 | |
1273 | # Timeout for change_power_state(). We set it to 5 minutes by default, |
1274 | |
1275 | === modified file 'src/provisioningserver/rackdservices/dhcp_probe_service.py' |
1276 | --- src/provisioningserver/rackdservices/dhcp_probe_service.py 2016-10-25 19:10:55 +0000 |
1277 | +++ src/provisioningserver/rackdservices/dhcp_probe_service.py 2016-11-01 16:47:02 +0000 |
1278 | @@ -12,7 +12,10 @@ |
1279 | |
1280 | from provisioningserver.config import is_dev_environment |
1281 | from provisioningserver.dhcp.detect import probe_interface |
1282 | -from provisioningserver.logger import get_maas_logger |
1283 | +from provisioningserver.logger import ( |
1284 | + get_maas_logger, |
1285 | + LegacyLogger, |
1286 | +) |
1287 | from provisioningserver.rpc.exceptions import NoConnectionsAvailable |
1288 | from provisioningserver.rpc.region import ReportForeignDHCPServer |
1289 | from provisioningserver.utils.network import ( |
1290 | @@ -30,10 +33,10 @@ |
1291 | ) |
1292 | from twisted.internet.threads import deferToThread |
1293 | from twisted.protocols.amp import UnhandledCommand |
1294 | -from twisted.python import log |
1295 | |
1296 | |
1297 | maaslog = get_maas_logger("dhcp.probe") |
1298 | +log = LegacyLogger() |
1299 | |
1300 | |
1301 | class DHCPProbeService(TimerService): |
1302 | |
1303 | === modified file 'src/provisioningserver/rackdservices/image_download_service.py' |
1304 | --- src/provisioningserver/rackdservices/image_download_service.py 2016-03-28 13:54:47 +0000 |
1305 | +++ src/provisioningserver/rackdservices/image_download_service.py 2016-11-01 16:47:02 +0000 |
1306 | @@ -11,7 +11,10 @@ |
1307 | from datetime import timedelta |
1308 | |
1309 | from provisioningserver.boot import tftppath |
1310 | -from provisioningserver.logger import get_maas_logger |
1311 | +from provisioningserver.logger import ( |
1312 | + get_maas_logger, |
1313 | + LegacyLogger, |
1314 | +) |
1315 | from provisioningserver.rpc.boot_images import import_boot_images |
1316 | from provisioningserver.rpc.exceptions import NoConnectionsAvailable |
1317 | from provisioningserver.rpc.region import ( |
1318 | @@ -29,10 +32,10 @@ |
1319 | returnValue, |
1320 | ) |
1321 | from twisted.protocols.amp import UnhandledCommand |
1322 | -from twisted.python import log |
1323 | |
1324 | |
1325 | maaslog = get_maas_logger("boot_image_download_service") |
1326 | +log = LegacyLogger() |
1327 | |
1328 | |
1329 | class ImageDownloadService(TimerService, object): |
1330 | |
1331 | === modified file 'src/provisioningserver/rackdservices/node_power_monitor_service.py' |
1332 | --- src/provisioningserver/rackdservices/node_power_monitor_service.py 2016-10-25 13:57:02 +0000 |
1333 | +++ src/provisioningserver/rackdservices/node_power_monitor_service.py 2016-11-01 16:47:02 +0000 |
1334 | @@ -10,7 +10,10 @@ |
1335 | |
1336 | from datetime import timedelta |
1337 | |
1338 | -from provisioningserver.logger import get_maas_logger |
1339 | +from provisioningserver.logger import ( |
1340 | + get_maas_logger, |
1341 | + LegacyLogger, |
1342 | +) |
1343 | from provisioningserver.power.query import query_all_nodes |
1344 | from provisioningserver.rpc import getRegionClient |
1345 | from provisioningserver.rpc.exceptions import ( |
1346 | @@ -21,10 +24,10 @@ |
1347 | from twisted.application.internet import TimerService |
1348 | from twisted.internet.defer import inlineCallbacks |
1349 | from twisted.internet.error import ConnectionDone |
1350 | -from twisted.python import log |
1351 | |
1352 | |
1353 | maaslog = get_maas_logger("power_monitor_service") |
1354 | +log = LegacyLogger() |
1355 | |
1356 | |
1357 | class NodePowerMonitorService(TimerService, object): |
1358 | |
1359 | === modified file 'src/provisioningserver/rackdservices/ntp.py' |
1360 | --- src/provisioningserver/rackdservices/ntp.py 2016-10-04 11:50:27 +0000 |
1361 | +++ src/provisioningserver/rackdservices/ntp.py 2016-11-01 16:47:02 +0000 |
1362 | @@ -10,6 +10,7 @@ |
1363 | from datetime import timedelta |
1364 | |
1365 | import attr |
1366 | +from provisioningserver.logger import LegacyLogger |
1367 | from provisioningserver.ntp.config import configure_rack |
1368 | from provisioningserver.rpc import exceptions |
1369 | from provisioningserver.rpc.region import ( |
1370 | @@ -24,7 +25,9 @@ |
1371 | maybeDeferred, |
1372 | ) |
1373 | from twisted.internet.threads import deferToThread |
1374 | -from twisted.python import log |
1375 | + |
1376 | + |
1377 | +log = LegacyLogger() |
1378 | |
1379 | |
1380 | class RackNetworkTimeProtocolService(TimerService): |
1381 | |
1382 | === modified file 'src/provisioningserver/rackdservices/service_monitor_service.py' |
1383 | --- src/provisioningserver/rackdservices/service_monitor_service.py 2016-08-19 10:22:29 +0000 |
1384 | +++ src/provisioningserver/rackdservices/service_monitor_service.py 2016-11-01 16:47:02 +0000 |
1385 | @@ -12,7 +12,10 @@ |
1386 | from datetime import timedelta |
1387 | |
1388 | from provisioningserver.config import is_dev_environment |
1389 | -from provisioningserver.logger import get_maas_logger |
1390 | +from provisioningserver.logger import ( |
1391 | + get_maas_logger, |
1392 | + LegacyLogger, |
1393 | +) |
1394 | from provisioningserver.rpc.exceptions import NoConnectionsAvailable |
1395 | from provisioningserver.rpc.region import UpdateServices |
1396 | from provisioningserver.service_monitor import service_monitor |
1397 | @@ -22,10 +25,10 @@ |
1398 | ) |
1399 | from twisted.application.internet import TimerService |
1400 | from twisted.internet.defer import inlineCallbacks |
1401 | -from twisted.python import log |
1402 | |
1403 | |
1404 | maaslog = get_maas_logger("service_monitor_service") |
1405 | +log = LegacyLogger() |
1406 | |
1407 | |
1408 | class ServiceMonitorService(TimerService, object): |
1409 | |
1410 | === modified file 'src/provisioningserver/rackdservices/tftp.py' |
1411 | --- src/provisioningserver/rackdservices/tftp.py 2016-10-25 13:57:02 +0000 |
1412 | +++ src/provisioningserver/rackdservices/tftp.py 2016-11-01 16:47:02 +0000 |
1413 | @@ -25,7 +25,10 @@ |
1414 | send_event_node_mac_address, |
1415 | ) |
1416 | from provisioningserver.kernel_opts import KernelParameters |
1417 | -from provisioningserver.logger import get_maas_logger |
1418 | +from provisioningserver.logger import ( |
1419 | + get_maas_logger, |
1420 | + LegacyLogger, |
1421 | +) |
1422 | from provisioningserver.rpc.boot_images import list_boot_images |
1423 | from provisioningserver.rpc.exceptions import BootConfigNoResponse |
1424 | from provisioningserver.rpc.region import ( |
1425 | @@ -65,11 +68,11 @@ |
1426 | returnValue, |
1427 | ) |
1428 | from twisted.internet.task import deferLater |
1429 | -from twisted.python import log |
1430 | from twisted.python.filepath import FilePath |
1431 | |
1432 | |
1433 | maaslog = get_maas_logger("tftp") |
1434 | +log = LegacyLogger() |
1435 | |
1436 | |
1437 | def get_boot_image(params): |
1438 | |
1439 | === modified file 'src/provisioningserver/rpc/boot_images.py' |
1440 | --- src/provisioningserver/rpc/boot_images.py 2016-07-28 16:42:04 +0000 |
1441 | +++ src/provisioningserver/rpc/boot_images.py 2016-11-01 16:47:02 +0000 |
1442 | @@ -16,6 +16,7 @@ |
1443 | from provisioningserver.boot import tftppath |
1444 | from provisioningserver.config import ClusterConfiguration |
1445 | from provisioningserver.import_images import boot_resources |
1446 | +from provisioningserver.logger import LegacyLogger |
1447 | from provisioningserver.rpc import getRegionClient |
1448 | from provisioningserver.rpc.region import UpdateLastImageSync |
1449 | from provisioningserver.utils.env import ( |
1450 | @@ -28,7 +29,9 @@ |
1451 | inlineCallbacks, |
1452 | ) |
1453 | from twisted.internet.threads import deferToThread |
1454 | -from twisted.python import log |
1455 | + |
1456 | + |
1457 | +log = LegacyLogger() |
1458 | |
1459 | |
1460 | CACHED_BOOT_IMAGES = None |
1461 | |
1462 | === modified file 'src/provisioningserver/rpc/clusterservice.py' |
1463 | --- src/provisioningserver/rpc/clusterservice.py 2016-10-25 13:57:02 +0000 |
1464 | +++ src/provisioningserver/rpc/clusterservice.py 2016-11-01 16:47:02 +0000 |
1465 | @@ -40,7 +40,10 @@ |
1466 | from provisioningserver.drivers.power import power_drivers_by_name |
1467 | from provisioningserver.drivers.power.mscm import probe_and_enlist_mscm |
1468 | from provisioningserver.drivers.power.msftocs import probe_and_enlist_msftocs |
1469 | -from provisioningserver.logger import get_maas_logger |
1470 | +from provisioningserver.logger import ( |
1471 | + get_maas_logger, |
1472 | + LegacyLogger, |
1473 | +) |
1474 | from provisioningserver.power.change import maybe_change_power_state |
1475 | from provisioningserver.power.query import get_power_state |
1476 | from provisioningserver.refresh import ( |
1477 | @@ -115,22 +118,19 @@ |
1478 | ) |
1479 | from twisted.internet.threads import deferToThread |
1480 | from twisted.protocols import amp |
1481 | -from twisted.python import log |
1482 | from twisted.python.failure import Failure |
1483 | from twisted.python.reflect import fullyQualifiedName |
1484 | from twisted.web import http |
1485 | import twisted.web.client |
1486 | -from twisted.web.client import getPage |
1487 | +from twisted.web.client import ( |
1488 | + getPage, |
1489 | + URI, |
1490 | +) |
1491 | from zope.interface import implementer |
1492 | |
1493 | -# From python-twisted 15+ changes the name of _URI to URI. |
1494 | -try: |
1495 | - from twisted.web.client import _URI as URI |
1496 | -except ImportError: |
1497 | - from twisted.web.client import URI |
1498 | - |
1499 | |
1500 | maaslog = get_maas_logger("rpc.cluster") |
1501 | +log = LegacyLogger() |
1502 | |
1503 | |
1504 | def catch_probe_and_enlist_error(name, failure): |
1505 | @@ -1132,7 +1132,7 @@ |
1506 | log.msg("Event-loop %s (%s:%d): %s" % ( |
1507 | eventloop, host, port, error)) |
1508 | except: |
1509 | - log.err() |
1510 | + log.err(None, "Failure making new RPC connection.") |
1511 | else: |
1512 | break |
1513 | # Remove connections to event-loops that are no longer |
1514 | |
1515 | === modified file 'src/provisioningserver/rpc/common.py' |
1516 | --- src/provisioningserver/rpc/common.py 2016-08-19 10:22:29 +0000 |
1517 | +++ src/provisioningserver/rpc/common.py 2016-11-01 16:47:02 +0000 |
1518 | @@ -13,6 +13,7 @@ |
1519 | from os import getpid |
1520 | from socket import gethostname |
1521 | |
1522 | +from provisioningserver.logger import LegacyLogger |
1523 | from provisioningserver.rpc.interfaces import ( |
1524 | IConnection, |
1525 | IConnectionToRegion, |
1526 | @@ -20,10 +21,12 @@ |
1527 | from provisioningserver.utils.twisted import asynchronous |
1528 | from twisted.internet.defer import Deferred |
1529 | from twisted.protocols import amp |
1530 | -from twisted.python import log |
1531 | from twisted.python.failure import Failure |
1532 | |
1533 | |
1534 | +log = LegacyLogger() |
1535 | + |
1536 | + |
1537 | class Identify(amp.Command): |
1538 | """Request the identity of the remote side, e.g. its UUID. |
1539 | |
1540 | |
1541 | === modified file 'src/provisioningserver/rpc/tests/test_clusterservice.py' |
1542 | --- src/provisioningserver/rpc/tests/test_clusterservice.py 2016-10-20 15:34:08 +0000 |
1543 | +++ src/provisioningserver/rpc/tests/test_clusterservice.py 2016-11-01 16:47:02 +0000 |
1544 | @@ -650,7 +650,7 @@ |
1545 | |
1546 | self.assertDocTestMatches( |
1547 | """\ |
1548 | - Unhandled Error |
1549 | + Failure making new RPC connection. |
1550 | Traceback (most recent call last): |
1551 | ... |
1552 | builtins.RuntimeError: Something went wrong. |
1553 | |
1554 | === modified file 'src/provisioningserver/utils/services.py' |
1555 | --- src/provisioningserver/utils/services.py 2016-10-25 13:57:02 +0000 |
1556 | +++ src/provisioningserver/utils/services.py 2016-11-01 16:47:02 +0000 |
1557 | @@ -18,7 +18,10 @@ |
1558 | import re |
1559 | |
1560 | from provisioningserver.config import is_dev_environment |
1561 | -from provisioningserver.logger import get_maas_logger |
1562 | +from provisioningserver.logger import ( |
1563 | + get_maas_logger, |
1564 | + LegacyLogger, |
1565 | +) |
1566 | from provisioningserver.rpc.exceptions import NoConnectionsAvailable |
1567 | from provisioningserver.utils.fs import ( |
1568 | get_maas_provision_command, |
1569 | @@ -46,11 +49,11 @@ |
1570 | ) |
1571 | from twisted.internet.protocol import ProcessProtocol |
1572 | from twisted.internet.threads import deferToThread |
1573 | -from twisted.python import log |
1574 | from twisted.python.failure import Failure |
1575 | |
1576 | |
1577 | maaslog = get_maas_logger("networks.monitor") |
1578 | +log = LegacyLogger() |
1579 | |
1580 | |
1581 | class JSONPerLineProtocol(ProcessProtocol): |
1582 | |
1583 | === modified file 'src/provisioningserver/utils/twisted.py' |
1584 | --- src/provisioningserver/utils/twisted.py 2016-10-24 14:36:30 +0000 |
1585 | +++ src/provisioningserver/utils/twisted.py 2016-11-01 16:47:02 +0000 |
1586 | @@ -52,6 +52,7 @@ |
1587 | import threading |
1588 | |
1589 | from crochet import run_in_reactor |
1590 | +from provisioningserver.logger import LegacyLogger |
1591 | from twisted.internet import reactor |
1592 | from twisted.internet.defer import ( |
1593 | AlreadyCalledError, |
1594 | @@ -66,7 +67,6 @@ |
1595 | from twisted.logger import Logger |
1596 | from twisted.python import ( |
1597 | context, |
1598 | - log, |
1599 | threadable, |
1600 | threadpool, |
1601 | ) |
1602 | @@ -75,6 +75,9 @@ |
1603 | from zope import interface |
1604 | |
1605 | |
1606 | +log = LegacyLogger() |
1607 | + |
1608 | + |
1609 | undefined = object() |
1610 | FOREVER = object() |
1611 | LONGTIME = 60 * 60 * 24 * 7 * 4 # 4 weeks. |
Branch looks good. I think that the web requests logging needs to be improved:
2016-11-01 13:32:46 [twisted. python. log#info] ::ffff:127.0.0.1 - - [01/Nov/ 2016:13: 32:45 +0000] "POST /MAAS/metadata/ status/ htmada/ latest HTTP/1.1" 200 2 "-" "Python-urllib/3.5"
"twisted. python. log" is not helpful in anyway.