Index: shared/scripts/configuration/utility.py =================================================================== diff -u -r763c81a696187aea9bc076c1fc07f236446aae6b -r6a14a242667488bea0e14dc9faf7655b880faed6 --- shared/scripts/configuration/utility.py (.../utility.py) (revision 763c81a696187aea9bc076c1fc07f236446aae6b) +++ shared/scripts/configuration/utility.py (.../utility.py) (revision 6a14a242667488bea0e14dc9faf7655b880faed6) @@ -118,37 +118,71 @@ raise LookupError("zone object is not in view to the user after " + \ "trying 100 times") +def get_current_date_and_time(date_format='%Y/%b/%d - %H:%M:%S'): + + date = datetime.now() + return str(date.strftime(date_format)) + +def is_float(num): + """ + This function checks the value is adaptable for float conversion. + + @param num - (string) input value for conversion. + @return True/False- (bool) returns True if the value can type casted into float, else False + """ + try: + if '.' in num: + float(num) + return True + except ValueError: + return False + + +def is_intiger(num): + """ + This function checks the value is adaptable for integer conversion. + + @param num - (string) (string) input value for conversion. + @return True/False- (bool) returns True if the value can type casted into int, else False + """ + try: + if num.isdigit(): + return True + except ValueError: + return False + + def get_extracted_file(): """ This function is the handler for getting file from log folder. This handler will go inside log folder and looks for newly added log based on current time. if it satisfied that condition, it will return the exact path of newly created log. - @return latest_file - (string) returns latest file that append on log folder from sd-data + Application log file is automatically created on '/home/denali/Desktop/sd-card/log/ {current_date}_denaliSquish.log' + + @return latest_file - (string) returns latest file that append on log folder from sd-data """ try: - list_of_files = glob.glob(LOG_LOCATION) - latest_file = max(list_of_files, key=os.path.getctime) + current_date = get_current_date_and_time(date_format = "%Y_%m_%d") + latest_file = '/home/denali/Desktop/sd-card/log/'+current_date+'_denaliSquish.log' return latest_file except: - test.fail("log file is not created during application interaction") return False def get_message_from_log(file_name, message_text): """ This method intended to extract the message from application log. + For row[index], index represent column to be extracted. - The handler find a match between time displayed on log and occurrences time of event to - extract the details. For row[index], index represent column to be extracted. - @param file_name - (string) path of the latest log file created. @param message_text - (string) message text to be extracted. - @return message - (string) binary message for the event. + @return message - (list) API arguments displayed in log. """ - message = "" # Message binaries appending with for easy identification + message = [] + count = 0 try: with open(file_name, 'r') as csv_file: try: @@ -159,29 +193,40 @@ row_length = sum(1 for values in row) if row_length >= 4: if row[3]!= None and row[3] == message_text: + if count == 30: + test.fail("handler unable to find message text from log file.") message_length = sum(1 for values in row) - for column in range((message_length-1), 3, -1): - message = row[column] + message + for column in range(4, message_length, 1): + message.append(row[column]) + count +=1 + for value in range(len(message)): + float_status = is_float(message[value]) + int_status = is_intiger(message[value]) + if float_status is True: + message[value] = float(message[value]) + if int_status is True: + message[value] = int(message[value]) return message else: pass except: test.fail("application log data is corrupted") except: - test.fail("application log is protected") + test.fail("Log file is not created or log file is not created based on standard log naming format.") def get_ack_request_details(file_name, message_text): """ - This method intended to extract the ack request from application log. - - The handler find a match between time displayed on log and occurrences time of event - along with message id to extract the request acknowledgement. - For row[index], were index represent column to be extracted. - + This method intended to extract acknowledgement request status, negative requested acknowledgement + and message id from application log. + + For row[index], were index represent column to be extracted. + @param file_name - (string) path of the latest log file created. + @param message_text - (string) message text to be extracted from log. @return row[3] - (string) acknowledgement request status. - @return row[4] - (string) Negative requested acknowledgement value (Sq) + @return row[4] - (string) Negative requested acknowledgement value (Sq). + @return message_id - (string) formatted message id from log. """ try: message_id = " ID" @@ -196,25 +241,30 @@ if row[5].split(':')[0] == message_id: extracted_message_id = pyInt(row[5].split(':')[1], 16) formatted_message_id = format(extracted_message_id, '#0x') - return row[3], row[4], formatted_message_id.replace("00", "") + # MSG_ID_HD_DEBUG_EVENT (0xFFF1) and MSG_ID_DG_DEBUG_EVENT (0xFFF2) hex values are reversed in log. + string_format_id = str(formatted_message_id) + first_two_char = string_format_id[2:4] + last_two_char = string_format_id[4:6] + if last_two_char != '00': + test.log(str(('0x'+last_two_char+first_two_char))) + return row[3], row[4], ('0x'+last_two_char+first_two_char) + else: + return row[3], row[4], formatted_message_id.replace("00", "") else: pass except: test.fail("application log data is corrupted - unable to fetch data") except: - test.fail("application log is protected") + test.fail("Log file is not created or log file is not created based on standard log naming format.") def get_bak_request_details(file_name, ack_bak_value): """ - This method intended to extract the ack from application log. - - The handler find a match between time displayed on log and occurrences time of event - along with message id to extract the request acknowledgement. + This method intended to extract the acknowledgement back status from application log. + For row[index], were index represent column to be extracted. @param file_name - (string) path of the latest log file created. - @param message_id - (string) message text to be extracted. @param ack_bak_value - (string) Positive back acknowledgement value (Sq). @return row[3] - (string) acknowledgement back status. """ @@ -226,7 +276,6 @@ pass else: row_length = sum(1 for values in row) - log_time = row[0].split(':') if row_length >= 5: if row[4] == ack_bak_value: return row[3] @@ -237,33 +286,34 @@ except: test.fail("application log data is corrupted") except: - test.fail("application log is protected") + test.fail("Log file is not created or log file is not created based on standard log naming format.") -def get_current_log_details(message_ack = None, message_text = None): +def get_current_log_details(message_ack = False, message_text = None): """ This function is capable to perform data analysis from application log folder. logs are automatically created in path :"/home/denali/Desktop/sd-card/log/*.log". In row[index], index represent column to be extracted. - @param message_ack - (string) 'Y' - if ack is satisfied in log / 'N' - if ack condition is not satisfied + @param message_ack - (bool) 'True' - if ack is satisfied in log / 'False' - if ack condition is not satisfied @param message_text - (string) message text to be extracted from log. - @param message_id - (string) message id to be extracted from log. - @return content_record - (list) list contains extracted data (ack_req, ack_bak, message). + @return content_record - (list) list contains extracted data (ack_req, ack_bak, message, message_id). """ content_record = [] file_name = get_extracted_file() if message_text != None: message = get_message_from_log(file_name, message_text) content_record.append(message) - if message_ack != None: + if message_ack != False: ack_req_status, ack_req_value, message_id = get_ack_request_details(file_name, message_text) ack_bak_value = ack_req_value.replace(":-", ":") # getting negative requested ack from positive requested ack content_record.append(ack_req_status) content_record.append(message_id.lower()) - if message_ack != None and ack_bak_value != None: + if message_ack != False and ack_bak_value != None: ack_bak_status = get_bak_request_details(file_name, ack_bak_value) content_record.append(ack_bak_status) return content_record + +