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