def main(dataPath, datacollector, display): """Main function of the odb2collector. :param String dataPath: Directory where the data will be stored. :param DataCollector datacollector: DataCollector instance used. :param Display display: Display instance used to show messages. """ ## Numer of bytes stored loggedBytes = 0 ## Initiate the compressor gzip = Compressor() gzip.start() logEnding = CONFIGURATION["logending"] while True: message = [ "Logged %skB" % (loggedBytes / 1024) ] print "\n".join(message) display.write_message(message) datafile = "%s/%s.%s" % (dataPath, _getCurrentTime(), logEnding) loggedBytes += datacollector.write_data_log( datafile, nbrOfOBDFrames=1000, messagesPerTimestamp=20 ) print "Collected data log..." gzip.add_file_for_compression(datafile)
def main(dataPath, datacollector, display): """Main function of the odb2collector. :param String dataPath: Directory where the data will be stored. :param DataCollector datacollector: DataCollector instance used. :param Display display: Display instance used to show messages. """ ## Numer of bytes stored loggedBytes = 0 ## Initiate the compressor gzip = Compressor() gzip.start() logEnding = CONFIGURATION["logending"] while True: message = ["Logged %skB" % (loggedBytes / 1024)] print "\n".join(message) display.write_message(message) datafile = "%s/%s.%s" % (dataPath, _getCurrentTime(), logEnding) loggedBytes += datacollector.write_data_log(datafile, nbrOfOBDFrames=1000, messagesPerTimestamp=20) print "Collected data log..." gzip.add_file_for_compression(datafile)
def main(dataPath, datacollector, display): """Main function of the odb2collector. :param String dataPath: Directory where the data will be stored. :param DataCollector datacollector: DataCollector instance used. :param Display display: Display instance used to show messages. """ ## Numer of bytes stored loggedBytes = 0 while True: message = [ "Logged %skB" % (loggedBytes / 1024) ] print "\n".join(message) display.write_message(message) datafile = "%s/%s.log_v2" % (dataPath, _getCurrentTime()) loggedBytes += datacollector.write_data_log( datafile, nbrOfOBDFrames=50000, messagesPerTimestamp=50 )
def write_data_log(self, logFileName, nbrOfOBDFrames, messagesPerTimestamp): """Stores an data log file to the given location. :param String logFileName: Path to store the log file. :param Integer nbrOfOBDFrames: Number of OBD frames to be stored inside the log. This parameter does NOT affect the number of time stamps or GPS reports. :param Integer messagesPerTimestamp: Number of OBD2 frames share the same time stamp. :return: Returns the number of bytes stored in the log. :rtype: Integer """ ## create the log file logf = file(logFileName, "ab") ## performance optimization ## reduces the __getattr__ calls for the major instances write = logf.write gpsreader = self._gpsreader obd2reader = self._obd2reader ## number of bytes written bytes = 0 ## collect the requested number of OBD2 frames for idx in xrange(0, nbrOfOBDFrames, messagesPerTimestamp): ## time stamp timestamp = "#TIME__%s\n" % _getCurrentTime() write(timestamp) bytes += len(timestamp) ## read the number of frames requested try: logEntries = obd2reader.read_frames(nbrOfOBDFrames) except: obd2reader.reconnect() continue ## store the frames in the log logEntries = "\n".join(logEntries) write("%s\n" % logEntries) bytes += len(logEntries) + 1 ## append the gpslog entries, when there are any gpsreports = ["#GPS__%s\n" % entry for entry in gpsreader.get_current_gps_entries()] ## no GPS report collected since last run if not gpsreports: continue ## store the reports in the log gpsreports = "\n".join(gpsreports) write("%s\n" % gpsreports) bytes += len(gpsreports) + 1 # close the log file logf.close() ## return the number of bytes written return bytes
def write_data_log(self, logFileName, nbrOfOBDFrames, messagesPerTimestamp): """Stores an data log file to the given location. :param String logFileName: Path to store the log file. :param Integer nbrOfOBDFrames: Number of OBD frames to be stored inside the log. This parameter does NOT affect the number of time stamps or GPS reports. :param Integer messagesPerTimestamp: Number of OBD2 frames share the same time stamp. :return: Returns the number of bytes stored in the log. :rtype: Integer """ ## create the log file logf = file(logFileName, "ab") ## performance optimization ## reduces the __getattr__ calls for the major instances write = logf.write gpsreader = self._gpsreader obd2reader = self._obd2reader ## number of bytes written bytes = 0 ## collect the requested number of OBD2 frames for idx in xrange(0, nbrOfOBDFrames, messagesPerTimestamp): ## time stamp timestamp = "#TIME__%s\n" % _getCurrentTime() write(timestamp) bytes += len(timestamp) ## read the number of frames requested try: logEntries = obd2reader.read_frames(nbrOfOBDFrames) except: obd2reader.reconnect() continue ## store the frames in the log logEntries = "\n".join(logEntries) write("%s\n" % logEntries) bytes += len(logEntries) + 1 ## append the gpslog entries, when there are any gpsreports = [ "#GPS__%s\n" % entry for entry in gpsreader.get_current_gps_entries() ] ## no GPS report collected since last run if not gpsreports: continue ## store the reports in the log gpsreports = "\n".join(gpsreports) write("%s\n" % gpsreports) bytes += len(gpsreports) + 1 # close the log file logf.close() ## return the number of bytes written return bytes