1 import datetime as _datetime
3 from ..date import parse_time as _parse_time
4 from . import Processor as _Processor
7 class LogTimeProcessor (_Processor):
8 r"""Track the initial and final request times.
11 >>> from apachelog.parser import Parser, FORMATS
12 >>> from apachelog.processor import Processor, process
13 >>> class PrintLogTimeProcessor (Processor):
14 ... def __init__(self, log_time_processor):
15 ... self.log_time_processor = log_time_processor
16 ... def process(self, data):
17 ... print('{}: {}'.format(data['%t'], self.log_time_processor.last_time))
18 >>> stream = StringIO.StringIO('\n'.join([
19 ... '192.168.0.1 - - [18/Feb/2012:10:25:43 -0500] "GET / HTTP/1.1" 200 561 "-" "Mozilla/5.0 (...)"',
20 ... '192.168.0.2 - - [18/Feb/2012:10:25:58 -0500] "GET / HTTP/1.1" 200 561 "-" "Mozilla/5.0 (...)"',
22 >>> parser = Parser(FORMATS['extended'])
23 >>> ltp = LogTimeProcessor()
24 >>> processors = [ltp, PrintLogTimeProcessor(ltp)]
25 >>> process(stream, parser, processors)
26 [18/Feb/2012:10:25:43 -0500]: 2012-02-18 10:25:43-05:00
27 [18/Feb/2012:10:25:58 -0500]: 2012-02-18 10:25:58-05:00
28 >>> ltp.total_seconds()
32 self.last_time = self.start_time = self.stop_time = None
34 def process(self, data):
35 time = _parse_time(data['%t'])
36 self.last_time = time # for use by subclasses or other processors
37 if self.start_time is None or time < self.start_time:
38 self.start_time = time
39 if self.stop_time is None or time > self.stop_time:
42 def total_seconds(self):
43 if self.start_time is None:
45 dt = self.stop_time - self.start_time
46 return dt.total_seconds()