source: src/mlx/logger.py@ 133:dcbe33497899

Last change on this file since 133:dcbe33497899 was 133:dcbe33497899, checked in by István Váradi <ivaradi@…>, 12 years ago

The general message sending works and the most important messages are sent

File size: 4.5 KB
RevLine 
[8]1# Module for the logging.
2
3#--------------------------------------------------------------------------------------
4
[133]5from fs import sendMessage
[8]6import const
[97]7import util
[8]8
9import sys
10import time
11
12#--------------------------------------------------------------------------------------
13
14class Logger(object):
15 """The class with the interface to log the various events."""
[11]16 # FIXME: shall we use const.stage2string() instead?
[8]17 _stages = { const.STAGE_BOARDING : "Boarding",
18 const.STAGE_PUSHANDTAXI : "Pushback and Taxi",
19 const.STAGE_TAKEOFF : "Takeoff",
20 const.STAGE_RTO : "RTO",
21 const.STAGE_CLIMB : "Climb",
22 const.STAGE_CRUISE : "Cruise",
23 const.STAGE_DESCENT : "Descent",
24 const.STAGE_LANDING : "Landing",
25 const.STAGE_TAXIAFTERLAND : "Taxi",
26 const.STAGE_PARKING : "Parking",
27 const.STAGE_GOAROUND : "Go-Around",
28 const.STAGE_END : "End" }
[30]29
30 NO_GO_SCORE = 10000
[11]31
[96]32 def __init__(self, output):
[8]33 """Construct the logger."""
[96]34 self._lines = []
[11]35 self._faults = {}
[97]36 self._faultLineIndexes = []
[8]37 self._output = output
38
[97]39 @property
40 def lines(self):
41 """Get the lines of the log."""
42 return self._lines
43
44 @property
45 def faultLineIndexes(self):
46 """Get the array of the indexes of the log line that contains a
47 fault."""
48 return self._faultLineIndexes
[24]49
50 def reset(self):
51 """Reset the logger.
52
53 The faults logged so far will be cleared."""
[96]54 self._lines = []
[24]55 self._faults.clear()
[97]56 self._faultLineIndexes = []
[8]57
58 def message(self, timestamp, msg):
59 """Put a simple textual message into the log with the given timestamp."""
[97]60 timeStr = util.getTimestampString(timestamp)
[96]61 return self._logLine(msg, timeStr)
[8]62
[17]63 def untimedMessage(self, msg):
64 """Put an untimed message into the log."""
[96]65 return self._logLine(msg)
[17]66
[9]67 def debug(self, msg):
[8]68 """Log a debug message."""
[9]69 print "[DEBUG]", msg
[8]70
71 def stage(self, timestamp, stage):
72 """Report a change in the flight stage."""
73 s = Logger._stages[stage] if stage in Logger._stages else "<Unknown>"
74 self.message(timestamp, "--- %s ---" % (s,))
[24]75 if stage==const.STAGE_END:
[31]76 self.untimedMessage("Rating: %.0f" % (self.getRating(),))
[133]77 sendMessage(const.MESSAGETYPE_INFORMATION, "Flight stage: " + s, 3)
[8]78
[11]79 def fault(self, faultID, timestamp, what, score):
80 """Report a fault.
[8]81
[11]82 faultID as a unique ID for the given kind of fault. If another fault of
83 this ID has been reported earlier, it will be reported again only if
84 the score is greater than last time. This ID can be, e.g. the checker
85 the report comes from."""
86 if faultID in self._faults:
87 if score<=self._faults[faultID]:
88 return
89 self._faults[faultID] = score
[30]90 if score==Logger.NO_GO_SCORE:
[133]91 text = "%s (NO GO)" % (what)
[11]92 else:
[133]93 text = "%s (%.1f)" % (what, score)
94 lineIndex = self.message(timestamp, "%s (NO GO)" % (what))
[97]95 self._faultLineIndexes.append(lineIndex)
[133]96 (messageType, duration) = (const.MESSAGETYPE_NOGO, 10) \
97 if score==Logger.NO_GO_SCORE \
98 else (const.MESSAGETYPE_FAULT, 5)
99 sendMessage(messageType, text, duration)
[11]100
[30]101 def noGo(self, faultID, timestamp, what):
[8]102 """Report a No-Go fault."""
[30]103 self.fault(faultID, timestamp, what, Logger.NO_GO_SCORE)
[8]104
[31]105 def getRating(self):
106 """Get the rating of the flight so far."""
[30]107 totalScore = 100
108 for (id, score) in self._faults.iteritems():
109 if score==Logger.NO_GO_SCORE:
110 return -score
111 else:
112 totalScore -= score
113 return totalScore
[96]114
115 def updateLine(self, index, line):
116 """Update the line at the given index with the given string."""
117 (timeStr, _line) = self._lines[index]
118 self._lines[index] = (timeStr, line)
119 self._output.updateFlightLogLine(index, timeStr, line)
120
121 def _logLine(self, line, timeStr = None):
122 """Log the given line."""
123 index = len(self._lines)
124 self._lines.append((timeStr, line))
125 self._output.addFlightLogLine(timeStr, line)
126 return index
[30]127
[8]128#--------------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.