CLoggerDefaultBackEnd::CLoggerDefaultBackEnd(){ std::string tmpFilePath; tmpFilePath = "Logs/"; tmpFilePath += getDate(); for(int counter = 1; true; counter++){ std::string logFilePathCheck; logFilePathCheck = tmpFilePath; logFilePathCheck += "_"; logFilePathCheck += std::to_string(counter); logFilePathCheck += ".log"; bool doesFileExistCheck = doesFileExist(logFilePathCheck); bool isFileEmptyCheck = isFileEmpty(logFilePathCheck); if((doesFileExistCheck && isFileEmptyCheck) || !doesFileExistCheck){ logFilePath = logFilePathCheck; break; } } }
//------------------------------------------------------------------------------ // processRecordImp //------------------------------------------------------------------------------ void PrintSelected::processRecordImp(const DataRecordHandle* const handle) { if (handle == nullptr) return; // cannot continue const pb::DataRecord* dataRecord = handle->getRecord(); if (dataRecord == nullptr) return; // cannot continue // using reflection: // save to: const google::protobuf::Message* recMsg recMsg = dataRecord; //const google::protobuf::Message& root = *recMsg; const google::protobuf::Descriptor* descriptor = recMsg->GetDescriptor(); const google::protobuf::Reflection* reflection = recMsg->GetReflection(); const google::protobuf::FieldDescriptor* idField = descriptor->FindFieldByName("id"); unsigned int id = reflection->GetUInt32(*recMsg, idField); foundSelected = false; // Process time message processMessage( &dataRecord->time()); // Process the event message const google::protobuf::Message* processMsg = nullptr; std::string msgCat = ""; std::string msgType = ""; switch (msgToken) { case REID_FILE_ID: { processMsg = &dataRecord->file_id_msg(); msgCat = "FILE "; msgType = "ID "; static bool firstTime = true; if ((firstTime) || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_NEW_PLAYER: { processMsg = &dataRecord->new_player_event_msg(); msgCat = "PLAYER "; msgType = "NEW "; static bool firstTime = true; if ((firstTime) || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_PLAYER_REMOVED: { processMsg = &dataRecord->player_removed_event_msg(); msgCat = "PLAYER "; msgType = "REMOVED "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_PLAYER_DATA: { processMsg = &dataRecord->player_data_msg(); msgCat = "PLAYER "; msgType = "DATA "; static bool firstTime = true; if (firstTime || isFileEmpty()) { printHeader = true; } firstTime = false; break; } case REID_PLAYER_DAMAGED: { processMsg = &dataRecord->player_damaged_event_msg(); msgCat = "PLAYER "; msgType = "DAMAGED "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_PLAYER_COLLISION: { processMsg = &dataRecord->player_collision_event_msg(); msgCat = "PLAYER "; msgType = "COLLISION"; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_PLAYER_CRASH: { processMsg = &dataRecord->player_crash_event_msg(); msgCat = "PLAYER "; msgType = "CRASH "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_PLAYER_KILLED: { processMsg = &dataRecord->player_killed_event_msg(); msgCat = "PLAYER "; msgType = "KILLED "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_WEAPON_RELEASED: { processMsg = &dataRecord->weapon_release_event_msg(); msgCat = "WEAPON "; msgType = "RELEASED "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_WEAPON_HUNG: { processMsg = &dataRecord->weapon_hung_event_msg(); msgCat = "WEAPON "; msgType = "HUNG "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_WEAPON_DETONATION: { processMsg = &dataRecord->weapon_detonation_event_msg(); msgCat = "WEAPON "; msgType = "DETONATE"; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_GUN_FIRED: { processMsg = &dataRecord->gun_fired_event_msg(); msgCat = "GUN "; msgType = "FIRED "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_NEW_TRACK: { processMsg = &dataRecord->new_track_event_msg(); msgCat = "TRACK "; msgType = "NEW "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_TRACK_REMOVED: { processMsg = &dataRecord->track_removed_event_msg(); msgCat = "TRACK "; msgType = "REMOVED "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } case REID_TRACK_DATA: { processMsg = &dataRecord->track_data_msg(); msgCat = "TRACK "; msgType = "DATA "; static bool firstTime = true; if (firstTime || isFileEmpty()) printHeader = true; firstTime = false; break; } default: break; } // Process the message and see if the conditions are found if (!timeOnly && (processMsg != nullptr)) { processMessage(processMsg); } // If the condition has been found and this is the message we want, print it std::stringstream soutFields; std::stringstream soutVals; if (foundSelected && timeOnly) { // print the message, whatever it is, because it matches the time criteria std::string msgName = getEventMsgName(recMsg); // This also sets the event message if (eventMsg != nullptr) { soutFields << std::left << std::setw(32) << msgName << "\t" << "HEADER" << "\t"; soutVals << std::left << std::setw(32) << msgName << "\t" "VALUES" << "\t"; soutFields << std::left << std::setw(12)<< "exec time " << "\t"; soutFields << std::left << std::setw(12)<< "sim time " << "\t"; soutFields << std::left << std::setw(12)<< "utc time "<< "\t" ; std::string timeStr = ""; timeStr = printTimeMsg(dataRecord->time().exec_time()); soutVals << std::left << std::setw(12) << timeStr << "\t"; timeStr = printTimeMsg(dataRecord->time().sim_time()); soutVals << std::left << std::setw(12) << timeStr << "\t"; timeStr = printTimeMsg(dataRecord->time().utc_time()); soutVals << std::left << std::setw(12) << timeStr << "\t"; // soutVals << std::left << std::setw(12) << dataRecord->time().sim_time() << "\t"; // soutVals << std::left << std::setw(12) << dataRecord->time().exec_time() << "\t"; // soutVals << std::left << std::setw(12) << dataRecord->time().utc_time() << "\t"; // printMessage(soutFields, soutVals, recMsg); // Use this to include time and message ID printMessage(soutFields, soutVals, eventMsg); printToOutput( soutFields.str().c_str() ); printToOutput( soutVals.str().c_str() ); } } else if (foundSelected && (id == msgToken)) { // Print the message name soutFields << msgCat << "\t" << "HEADER" << "\t"; soutVals << msgCat << "\t" << msgType << "\t"; // Print the time // const pb::Time* timeMsg = &dataRecord->time(); // printMessage(soutFields, soutVals, timeMsg); // print out the time message soutFields << std::left << std::setw(12)<< "exec time " << "\t"; soutFields << std::left << std::setw(12)<< "sim time " << "\t"; soutFields << std::left << std::setw(12)<< "utc time "<< "\t" ; std::string timeStr = ""; timeStr = printTimeMsg(dataRecord->time().exec_time()); soutVals << std::left << std::setw(12) << timeStr << "\t"; timeStr = printTimeMsg(dataRecord->time().sim_time()); soutVals << std::left << std::setw(12) << timeStr << "\t"; timeStr = printTimeMsg(dataRecord->time().utc_time()); soutVals << std::left << std::setw(12) << timeStr << "\t"; // Print out the event message // print the message, whatever it is, because it matches the time criteria std::string msgName = getEventMsgName(recMsg); // This also sets event message if (eventMsg != nullptr) { printMessage(soutFields, soutVals, eventMsg); } // if (processMsg != 0) printMessage(soutFields, soutVals, processMsg); // print out the event message // Print to output: if (printHeader) { printHeader = false; printToOutput( soutFields.str().c_str() ); } printToOutput( soutVals.str().c_str() ); } }