source: src/logger.py@ 18:8c35931dd0ae

Last change on this file since 18:8c35931dd0ae was 17:fd24bfeda1d7, checked in by István Váradi <ivaradi@…>, 13 years ago

Added function for untimed messages.

File size: 3.0 KB
RevLine 
[8]1# Module for the logging.
2
3#--------------------------------------------------------------------------------------
4
5import const
6
7import sys
8import time
9
10#--------------------------------------------------------------------------------------
11
12class Logger(object):
13 """The class with the interface to log the various events."""
[11]14 # FIXME: shall we use const.stage2string() instead?
[8]15 _stages = { const.STAGE_BOARDING : "Boarding",
16 const.STAGE_PUSHANDTAXI : "Pushback and Taxi",
17 const.STAGE_TAKEOFF : "Takeoff",
18 const.STAGE_RTO : "RTO",
19 const.STAGE_CLIMB : "Climb",
20 const.STAGE_CRUISE : "Cruise",
21 const.STAGE_DESCENT : "Descent",
22 const.STAGE_LANDING : "Landing",
23 const.STAGE_TAXIAFTERLAND : "Taxi",
24 const.STAGE_PARKING : "Parking",
25 const.STAGE_GOAROUND : "Go-Around",
26 const.STAGE_END : "End" }
27
[11]28 _noGoScore = 10000
29
[8]30 def __init__(self, output = sys.stdout):
31 """Construct the logger."""
[11]32 self._faults = {}
[8]33 self._output = output
34
35 @staticmethod
36 def _getTimeStr(timestamp):
37 """Get the string representation of the given timestamp."""
38 return time.strftime("%H:%M:%S", time.gmtime(timestamp))
39
40 def message(self, timestamp, msg):
41 """Put a simple textual message into the log with the given timestamp."""
42 timeStr = Logger._getTimeStr(timestamp)
43 print >> self._output, timeStr + ":", msg
44 print timeStr + ":", msg
45
[17]46 def untimedMessage(self, msg):
47 """Put an untimed message into the log."""
48 print >> self._output, msg
49 print msg
50
[9]51 def debug(self, msg):
[8]52 """Log a debug message."""
[17]53 print >> self._output, "[DEBUG]", msg
[9]54 print "[DEBUG]", msg
[8]55
56 def stage(self, timestamp, stage):
57 """Report a change in the flight stage."""
58 s = Logger._stages[stage] if stage in Logger._stages else "<Unknown>"
59 self.message(timestamp, "--- %s ---" % (s,))
60
[11]61 def fault(self, faultID, timestamp, what, score):
62 """Report a fault.
[8]63
[11]64 faultID as a unique ID for the given kind of fault. If another fault of
65 this ID has been reported earlier, it will be reported again only if
66 the score is greater than last time. This ID can be, e.g. the checker
67 the report comes from."""
68 if faultID in self._faults:
69 if score<=self._faults[faultID]:
70 return
71 self._faults[faultID] = score
72 if score==Logger._noGoScore:
73 self.message(timestamp, "%s (NO GO)" % (what))
74 else:
75 self.message(timestamp, "%s (%f)" % (what, score))
76
77 def noGo(self, faultID, timestamp, what, shortReason):
[8]78 """Report a No-Go fault."""
[11]79 self.fault(faultID, timestamp, what, Logger._noGoScore)
[8]80
81#--------------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.