1
2
3
4
5
6
7
8
9
10
11 import re
12 import logging
13
14 from Products.ZenRRD.CommandParser import CommandParser
15
16
17 log = logging.getLogger("zen.zencommand")
18
19
20 UPTIME_PATTERN = re.compile(
21 r"up +(?:(?P<days>\d+) day\(?s?\)?, +)?(?:(?P<hours>\d+):)?(?P<minutes>\d+)")
22
23 UPTIME_FORMAT = "uptime: days=%(days)s, hours=%(hours)s, minutes=%(minutes)s"
24
25
27 """
28 Parse the uptime command's output capturing the days, hours and minutes
29 that the system has been up. Returns a dictionary of the captured values.
30
31 >>> UPTIME_FORMAT % parseUptime("up 12 day(s), 1:42")
32 'uptime: days=12, hours=1, minutes=42'
33
34 >>> UPTIME_FORMAT % parseUptime("up 1 day, 1:42")
35 'uptime: days=1, hours=1, minutes=42'
36
37 >>> UPTIME_FORMAT % parseUptime("up 5 days, 1:42")
38 'uptime: days=5, hours=1, minutes=42'
39
40 >>> UPTIME_FORMAT % parseUptime("up 3 days, 6 min")
41 'uptime: days=3, hours=0, minutes=6'
42
43 >>> UPTIME_FORMAT % parseUptime("up 1:14")
44 'uptime: days=0, hours=1, minutes=14'
45
46 >>> UPTIME_FORMAT % parseUptime("up 4 min")
47 'uptime: days=0, hours=0, minutes=4'
48
49 """
50
51 match = UPTIME_PATTERN.search(output)
52
53 if match:
54 uptime = dict((k, int(v)) for k, v in match.groupdict(0).items())
55 log.debug(UPTIME_FORMAT % uptime)
56 else:
57 uptime = None
58 log.debug("uptime: no match")
59
60 return uptime
61
62
64 return ((days * 24 + hours) * 60 + minutes) * 60 * 100
65
66
78
79
105