diff --git a/scripts/artifacts/logparser.py b/scripts/artifacts/logparser.py new file mode 100644 index 0000000..acfd34c --- /dev/null +++ b/scripts/artifacts/logparser.py @@ -0,0 +1,79 @@ +import csv +import os +import re +import tarfile +import datetime +from pathlib import Path + +from scripts.artifact_report import ArtifactHtmlReport +from scripts.ilapfuncs import logfunc, tsv, logdevinfo, kmlgen, timeline, is_platform_windows + +#Compatability Data +vehicles = ['RAM 1500'] +platforms = [] + +def timeorder(line): + month = line.split('/', 3)[0] + day = line.split('/', 3)[1] + yeartime = line.split('/', 3)[2] + year = yeartime.split(' ')[0] + time = yeartime.split(' ')[1] + timestamp = f'{year}-{month}-{day} {time}' + return timestamp + +def get_logparser(files_found, report_folder, seeker, wrap_text, time_offset): + data_list = [] + + for file_found in files_found: + #logfunc(' ') + #logfunc(file_found) + basename = os.path.basename(file_found) + with open(file_found, 'r', encoding='cp437') as f: + for line in f: + if '[INFO] LocationDistributor[KONA-LIB] Location details: ' in line: + linesplit = line.split('[INFO] LocationDistributor[KONA-LIB] Location details: ')[1] + linesplit = linesplit.split(';') + latitude = linesplit[1].split(' ')[2] + longitude = linesplit[2].split(' ')[2] + altitude = linesplit[4].split(' ')[2] + horzac = linesplit[5].split(' ')[3] + vertac = linesplit[6].split(' ')[3] + times = linesplit[7].split(' ')[3] + times = int(times) + times = datetime.datetime.utcfromtimestamp(times).strftime('%Y-%m-%d %H:%M:%S') + course = linesplit[8].split(' ')[2] + speed = linesplit[9].split(' ')[2] + azimuth = linesplit[10].split(' ')[2] + locm = linesplit[11].split(' ')[3] + + data_list.append((times, latitude, longitude, horzac, vertac, altitude, course, speed, azimuth, basename)) + + if len(data_list) > 0: + report = ArtifactHtmlReport('GPS Locations from Logs') + report.start_artifact_report(report_folder, f'GPS Locations from Logs') + report.add_script() + data_headers_dev = ('Timestamp','Latitude','Longitude', 'Horizontal Accuracy', 'Vertical Accuracy', 'Altitude', 'Course', 'Speed', 'Azimuth', 'Log Filename') + pathname = os.path.dirname(file_found) + report.write_artifact_data_table(data_headers_dev, data_list, pathname) + report.end_artifact_report() + + tsvname = f'GPS Locations from Logs' + tsv(report_folder, data_headers_dev , data_list, tsvname) + + tlactivity = 'GPS Locations from Logs' + timeline(report_folder, tlactivity, data_list, data_headers_dev) + + kmlactivity = 'GPS Locations from Logs' + kmlgen(report_folder, kmlactivity, data_list, data_headers_dev) + + else: + logfunc(f'No GPS Locations from Logs results available') + + + +__artifacts__ = { + "logparser": ( + "logparser", + ('*/persistentLogs/*/Log*'), + get_logparser) +} \ No newline at end of file diff --git a/scripts/artifacts/pasDeGeoTarGz.py b/scripts/artifacts/pasDeGeoTarGz.py index 8a09333..790d47f 100644 --- a/scripts/artifacts/pasDeGeoTarGz.py +++ b/scripts/artifacts/pasDeGeoTarGz.py @@ -8,8 +8,8 @@ from scripts.ilapfuncs import logfunc, tsv, logdevinfo, kmlgen, timeline, is_platform_windows #Compatability Data -vehicles = ['Ford Mustang','F-150'] -platforms = ['SYNC3.2V2','SYNCGen3.0_3.0.18093_PRODUCT','SyncGen3_v2_b', 'SYNCGen3.0_1.0.15139_PRODUCT'] +vehicles = ['RAM 1500'] +platforms = [] def timeorder(line): month = line.split('/', 3)[0] @@ -84,9 +84,12 @@ def get_pasDeGeoTarGz(files_found, report_folder, seeker, wrap_text, time_offset data_list_apinfo.append((timestamp, extractedbssid, ssid, signalstrenght, basename)) if 'nv_navigation/main/CI->SI' and '] currentRoad' in line: - timestamp = timeorder(line) - currentroad = line.split('panaAPI notice - ] [')[1].split('] currentRoad')[0] - data_list_curroad.append((timestamp, currentroad, basename)) + try: + timestamp = timeorder(line) + currentroad = line.split('panaAPI notice - ] [')[1].split('] currentRoad')[0] + data_list_curroad.append((timestamp, currentroad, basename)) + except: + logfunc(f'Error on current road: {line}') #Done if '[SAL_SWITCH_DISPLAY] Received speed:' in line: @@ -136,11 +139,9 @@ def get_pasDeGeoTarGz(files_found, report_folder, seeker, wrap_text, time_offset lineparts = line.strip().split(':') data_list_odometer.append((timestampLink, lineparts[-1].strip(), basename)) - if '"vin" :' in line: - #print(timestampLink) - #print(line) - lineparts = line.strip().split(':') - vin = lineparts[-1].strip().replace('"','') + if '"vin":' in line: + vind = (line.split('vin')[1].split(',')[0]) + vin = (vind.split('"')[2]) if vin not in vinlist: vinlist.append(vin) @@ -154,9 +155,21 @@ def get_pasDeGeoTarGz(files_found, report_folder, seeker, wrap_text, time_offset linepartsma = line.strip().split(':') make = linepartsma[-1].strip().replace('"','') - if '"model"' in line: - linepartsmo = line.strip().split(':') - model = linepartsmo[-1].strip().replace('"','') + if 'Model_Id::' in line: + model = (line.split('Model_Id::')[1].split(' ')[0]) + number = (line.split('Model_Id::')[1].split(' ')[1]) + model = f'{model} {number}' + + if '=Vehicle Model Year = ' in line: + yearc = line.split('=Vehicle Model Year = ')[1] + + + try: + if yearc: + logdevinfo(f'Model Year from pas_debug in tar.gz: {yearc}') + except: + pass + try: if make: logdevinfo(f'Make from pas_debug: {make}') @@ -165,13 +178,13 @@ def get_pasDeGeoTarGz(files_found, report_folder, seeker, wrap_text, time_offset try: if model: - logdevinfo(f'Model from pas_debug: {model}') + logdevinfo(f'Model from pas_debug in tar.gz: {model}') except: pass if len(vinlist) > 0: for item in vinlist: - logdevinfo(f"VIN from pas_debug: {item}") + logdevinfo(f"VIN from pas_debug in tar.gz: {item}") if len(platformversion) > 0: for item in platformversion: diff --git a/scripts/report.py b/scripts/report.py index 949c50f..5c59e29 100755 --- a/scripts/report.py +++ b/scripts/report.py @@ -540,6 +540,11 @@ 'APPLE MAPS SEARCH HISTORY': 'search', 'default': 'map-pin', }, + 'LOGPARSER': { + 'GPS LOCATIONS FROM LOGS': 'map-pin', + 'USER': 'user', + '_mode': 'search', + }, 'MAP-MY-WALK': { 'ACTIVITIES': 'map', 'USER': 'user', @@ -627,6 +632,17 @@ 'ODOMETER': 'plus-circle', 'default': 'archive', }, + 'PAS_DEBUGTARGZ': { + 'GPS LOCATIONS': 'map-pin', + 'CURRENT ROAD': 'map', + 'ROAD SPEED LIMITS': 'target', + 'ACCESS POINT LIST': 'wifi', + 'VEHICLE SPEED': 'trending-up', + 'TRANSMISSION STATUS': 'corner-up-right', + 'OUTSIDE TEMPERATURE': 'thermometer', + 'ODOMETER': 'plus-circle', + 'default': 'archive', + }, 'PERMISSIONS': 'check', 'PHONE BOOK DB': 'smartphone', 'PHONE CONFIG': 'smartphone', @@ -1134,3 +1150,4 @@ def mark_item_active(data, itemname): ret = data[0: pos] + " active" + data[pos:] return ret + \ No newline at end of file