def testCalculateTimestampInputDateAndTime1(self): time_utils = TimeUtils(self.test_date, self.test_time) actual = time_utils.calculateTimestamp(None, None, 140.320) expected = datetime.combine( self.test_date, self.test_time, tzinfo=timezone.utc) + timedelta( 0, 140.320) self.assertEqual( expected, actual, 'The calculated timestamp did not match the expected value.')
def process(input_paths, output_url, output_format, tags, output_batch_size, start_date_datum, start_time_datum): data = DataState() time_util = TimeUtils(start_date_datum, start_time_datum) data.set_data_item('DateTime', time_util.calculateTimestamp(None, None, 0.0)) last_data_time = data.state_time parser = Parser(data) formatter = FormatterFactory.getFormatter(output_format, tags) ostream = io.StringIO() header_line = formatter.formatHeading(data) if header_line is not None: if verbose > 0: print(header_line) print(header_line, end='\n', file=ostream) line_count = 0 for path in input_paths: print("Processing {0}".format(path)) with open(path, "r") as ifile: for data_line in ifile: input_line = data_line.strip() if verbose > 0: print(input_line) parser.parse(input_line) output_lines = formatter.formatData(data) if output_lines is not None: for output_line in output_lines: if verbose > 0: print(output_line) print(output_line, end='\n', file=ostream) line_count = line_count + 1 if data.state_time > last_data_time: last_data_time = data.state_time data.set_data_item( 'DateTime', time_util.calculateTimestamp( data.get_data_item('GPS_Date'), data.get_data_item('GPS_Time'), data.state_time)) output_line = formatter.formatTimeIncrement(data) if output_line is not None: if verbose > 0: print(output_line) print(output_line, end='\n', file=ostream) line_count = line_count + 1 if line_count >= output_batch_size: writeBatch(output_url, ostream) ostream.close() ostream = io.StringIO() line_count = 0 footer_line = formatter.formatFooter(data) if footer_line is not None: if verbose > 0: print(footer_line) print(footer_line, end='\n', file=ostream) writeBatch(output_url, ostream) ostream.close()
def testCalculatedTimestampInputDate3(self): time_utils = TimeUtils(self.test_date, None) test_gps_time = time(22, 38, 12) actual = time_utils.calculateTimestamp(None, test_gps_time, 2273.431) expected = datetime.combine(self.test_date, test_gps_time, tzinfo=timezone.utc) self.assertEqual( expected, actual, 'Time calculated timestamp did not match the expected value.')
def testCalculatedTimestampInputDateAndTime2(self): time_utils = TimeUtils(self.test_date, self.test_time) test_gps_date = date(1999, 12, 19) actual = time_utils.calculateTimestamp(test_gps_date, None, 1432.938) expected = datetime.combine( self.test_date, self.test_time, tzinfo=timezone.utc) + timedelta( 0, 1432.938) self.assertEqual( expected, actual, 'Time calculated timestamp did not match the expected value.')
def testCalculatedTimestampNoInput4(self): time_utils = TimeUtils(None, None) test_gps_date = date(2019, 8, 19) test_gps_time = time(22, 38, 12) actual = time_utils.calculateTimestamp(test_gps_date, test_gps_time, 1174.835) expected = datetime.combine(test_gps_date, test_gps_time, timezone.utc) self.assertEqual( expected, actual, 'Time calculated timestamp did not match the expected value.')
def testInfluxDbTimestamp(self): test_datetime = datetime(2019, 8, 15, 23, 21, 30, tzinfo=timezone.utc) actual = TimeUtils.influxDBTimestamp(test_datetime) self.assertEqual( 1565911290000, actual, 'The conversion to InfluxDB timestamp did not return the expected value.' )
def testInfluxDbTimestampMillisecond(self): test_datetime = datetime(2019, 8, 20, 12, 12, 12, 531000, tzinfo=timezone.utc) actual = TimeUtils.influxDBTimestamp(test_datetime) self.assertEqual( 1566303132531, actual, 'The conversion to InfluxDB timestamp did not return the expected value.' )
def testInfluxDbTimestampMicrosecond(self): test_datetime = datetime(2019, 8, 20, 12, 12, 12, 531999, tzinfo=timezone.utc) actual = TimeUtils.influxDBTimestamp(test_datetime) # currently truncates, consider rounding self.assertEqual( 1566303132531, actual, 'The conversion to InfluxDB timestamp did not return the expected value.' )
def formatData(self, data_state): fields = data_state.get_dirty_fields() influx_timestamp = TimeUtils.influxDBTimestamp( data_state.get_data_item( DataState.names[DataState.names.DateTime])) influx_data_lines = [] if fields.issuperset(['Latitude', 'Longitude']): influx_data_lines.append( self.buildLocation(data_state) + str(influx_timestamp)) if fields.issuperset(['X', 'Y', 'Z']): influx_data_lines.append( self.buildAcceleration(data_state) + str(influx_timestamp)) if fields.issuperset(['Steering_Angle', 'Steering_Rate']): influx_data_lines.append( self.buildSteering(data_state) + str(influx_timestamp)) if fields.issuperset(['Throttle', 'ECU_Throttle']): influx_data_lines.append( self.buildThrottle(data_state) + str(influx_timestamp)) if fields.issuperset(['Brake', 'Brake_Pressure']): influx_data_lines.append( self.buildBrake(data_state) + str(influx_timestamp)) if fields.issuperset(['Clutch']): influx_data_lines.append( self.buildClutch(data_state) + str(influx_timestamp)) if fields.issuperset(['RPM']): influx_data_lines.append( self.buildRPM(data_state) + str(influx_timestamp)) if fields.issuperset(['Coolant_Temperature']): influx_data_lines.append( self.buildCoolant(data_state) + str(influx_timestamp)) if fields.issuperset(['Oil_Pressure']): influx_data_lines.append( self.buildOilPressure(data_state) + str(influx_timestamp)) if fields.issuperset(['Oil_Temperature']): influx_data_lines.append( self.buildOilTemperature(data_state) + str(influx_timestamp)) if fields.issuperset(['LF_KPH', 'RF_KPH', 'LR_KPH', 'RR_KPH']): influx_data_lines.append( self.buildWheelSpeed(data_state) + str(influx_timestamp)) if fields.issuperset(['Sport_Mode', 'Pasm_Sport_Mode', 'PSM_Disable']): influx_data_lines.append( self.buildPModes(data_state) + str(influx_timestamp)) return influx_data_lines
def testCalculatedTimestampInputDate2(self): time_utils = TimeUtils(self.test_date, None) test_gps_date = date(1999, 12, 19) actual = time_utils.calculateTimestamp(test_gps_date, None, 1432.938) self.assertIsNone(actual, 'The calculated timestamp was expected to be None.')
def testCalculateTimestampInputDate1(self): time_utils = TimeUtils(self.test_date, None) actual = time_utils.calculateTimestamp(None, None, 140.320) self.assertIsNone(actual, 'The calculated timestamp was expected to be None.')
def testCalculatedTimestampNoInput3(self): time_utils = TimeUtils(None, None) test_gps_time = time(22, 38, 12) actual = time_utils.calculateTimestamp(None, test_gps_time, 2273.431) self.assertIsNone(actual, 'The calculated timestamp was expected to be None.')