~allenap/maas/normalise-logging--bug-1639182--yakkety--2.1

« back to all changes in this revision

Viewing changes to src/provisioningserver/logger/testing/__init__.py

  • Committer: Gavin Panella
  • Date: 2016-11-29 12:04:41 UTC
  • Revision ID: gavin.panella@canonical.com-20161129120441-p9qdztkd6emy6a9r
Backport r5573 from lp:maas: Log consistently on both Xenial and Yakkety.

Twisted is going through a transition and some of the work done in Xenial for Twisted 16.0 does not have the desired effect in Yakkety with Twisted 16.4, and vice-versa.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
"""Testing helpers for `provisioningserver.logger`."""
5
5
 
6
6
__all__ = [
 
7
    "find_log_lines",
7
8
    "make_event",
8
9
    "make_log_text",
9
10
    "pick_log_level",
11
12
]
12
13
 
13
14
import random
 
15
import re
14
16
import time
15
17
 
16
18
from maastesting.factory import factory
17
19
from twisted.logger import LogLevel
18
20
 
19
21
 
20
 
def make_event(log_text=None, log_level=None, log_time=None):
 
22
def make_event(log_text=None, log_level=None, log_time=None, **other):
21
23
    """Make a minimal event dict for use with Twisted."""
22
 
    return {
 
24
    event = {
23
25
        "log_format": "{log_text}",
24
26
        "log_level": pick_log_level() if log_level is None else log_level,
25
27
        "log_text": make_log_text() if log_text is None else log_text,
26
28
        "log_time": pick_log_time() if log_time is None else log_time,
27
29
    }
 
30
    event.update(other)
 
31
    return event
28
32
 
29
33
 
30
34
def make_log_text():
43
47
def pick_log_time(noise=float(60 * 60)):
44
48
    """Pick a random time based on now, but with some noise."""
45
49
    return time.time() + (random.random() * noise) - (noise / 2)
 
50
 
 
51
 
 
52
# Matches lines like: 2016-10-18 14:23:55 namespace: [level] message
 
53
find_log_lines_re = re.compile(
 
54
    r"^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (.*?): [[](.*)[]] (.*)$",
 
55
    re.MULTILINE)
 
56
 
 
57
 
 
58
def find_log_lines(text):
 
59
    """Find logs in `text` that match `find_log_lines_re`.
 
60
 
 
61
    Checks for well-formed date/times but throws them away.
 
62
    """
 
63
    return [
 
64
        (ns, level, line) for (ts, ns, level, line) in
 
65
        find_log_lines_re.findall(text)
 
66
    ]