Skip to content

Commit

Permalink
Merge pull request #6 from wasimshigri/feature/custom_filter
Browse files Browse the repository at this point in the history
Feature/custom filter
  • Loading branch information
umair13adil authored Aug 31, 2023
2 parents 2819961 + b1a13be commit 22f5585
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 1 deletion.
13 changes: 13 additions & 0 deletions plog/src/main/java/com/blackbox/plog/pLogs/PLog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.blackbox.plog.pLogs.events.EventTypes
import com.blackbox.plog.pLogs.events.LogEvents
import com.blackbox.plog.pLogs.exporter.ExportType
import com.blackbox.plog.pLogs.exporter.LogExporter
import com.blackbox.plog.pLogs.filter.PlogFilters
import com.blackbox.plog.pLogs.impl.AutoExportHelper
import com.blackbox.plog.pLogs.impl.PLogImpl
import com.blackbox.plog.pLogs.models.LogLevel
Expand Down Expand Up @@ -290,6 +291,18 @@ object PLog : PLogImpl() {
return LogExporter.getZippedLogs(type.type, exportDecrypted)
}

/**
* Gets logs.
*
* This will export logs based on filters to export location with export name provided.
*
* @param filters the filters for the files
* @return the logs
*/
fun exportLogsForFilters(filters: PlogFilters, exportDecrypted: Boolean = false): Observable<String> {
return LogExporter.getZippedLogs(filters, exportDecrypted)
}

/**
* Gets logs.
*
Expand Down
39 changes: 39 additions & 0 deletions plog/src/main/java/com/blackbox/plog/pLogs/exporter/ExportTypes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package com.blackbox.plog.pLogs.exporter
import android.util.Log
import com.blackbox.plog.pLogs.PLog
import com.blackbox.plog.pLogs.filter.FileFilter
import com.blackbox.plog.pLogs.filter.FilterUtils
import com.blackbox.plog.pLogs.filter.FilterUtils.getPathForType
import com.blackbox.plog.pLogs.filter.PlogFilters
import com.blackbox.plog.pLogs.impl.PLogImpl
import java.io.File

Expand Down Expand Up @@ -56,6 +58,28 @@ private fun getLogsForToday(): Triple<String, List<File>, String> {
return Triple(zipName, files.first, files.second)
}



/*
* Get file path of logs for Custom dates
*/
fun getLogsForCustomFilter(filters: PlogFilters): Triple<String, List<File>, String> {
val allFiles = mutableListOf<File>()
var tempOutfile = ""
filters.dates.forEach { date ->
val path = FilterUtils.rootFolderPath + date
var fileNames = filters.files + filters.hours.map {h -> "$date$h" }
val files = FileFilter.getFilesForDate(path, fileNames)
tempOutfile = files.third
allFiles.addAll(files.first)
}

val zipName = composeZipName(allFiles, "custom")
Log.i(TAG,"getLogsForCustomFilter: Path: $path, Files: ${allFiles.size}")
return Triple(zipName, allFiles, tempOutfile)
}


/*
* Get file path of logs for 'Last Hour'
*/
Expand Down Expand Up @@ -120,5 +144,20 @@ private fun composeZipName(files: Pair<List<File>, String>, exportType: ExportTy
val zName = PLogImpl.getConfig()?.zipFileName!!
val postName = PLogImpl.getConfig()?.exportFileNamePostFix!!

return "$preName$zName$timeStamp$noOfFiles$postName.zip"
}

private fun composeZipName(files: List<File>, name: String): String {

if (PLogImpl.getConfig()?.attachTimeStamp!!)
timeStamp = PLog.getTimeStampForOutputFile() + "_" + name

if (PLogImpl.getConfig()?.attachNoOfFiles!!)
noOfFiles = "_[${files.size}]"

val preName = PLogImpl.getConfig()?.exportFileNamePreFix!!
val zName = PLogImpl.getConfig()?.zipFileName!!
val postName = PLogImpl.getConfig()?.exportFileNamePostFix!!

return "$preName$zName$timeStamp$noOfFiles$postName.zip"
}
27 changes: 27 additions & 0 deletions plog/src/main/java/com/blackbox/plog/pLogs/exporter/LogExporter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.blackbox.plog.pLogs.PLog
import com.blackbox.plog.pLogs.events.EventTypes
import com.blackbox.plog.pLogs.events.LogEvents
import com.blackbox.plog.pLogs.filter.FilterUtils
import com.blackbox.plog.pLogs.filter.PlogFilters
import com.blackbox.plog.pLogs.impl.PLogImpl
import com.blackbox.plog.utils.RxBus
import com.blackbox.plog.utils.zip
Expand Down Expand Up @@ -59,6 +60,32 @@ object LogExporter {
}
}


/*
* Will filter & export log files to zip package.
*/
fun getZippedLogs(filters: PlogFilters, exportDecrypted: Boolean): Observable<String> {

return Observable.create {

val emitter = it

if (PLog.isLogsConfigSet()) {

FilterUtils.prepareOutputFile(exportPath)

this.files = getLogsForCustomFilter(filters)

compressPackage(emitter, exportDecrypted)
} else {

if (!emitter.isDisposed) {
emitter.onError(Throwable("No Logs configuration provided! Can not perform this action with logs configuration."))
}
}
}
}

/*
* Will return logged data in log files.
*/
Expand Down
47 changes: 47 additions & 0 deletions plog/src/main/java/com/blackbox/plog/pLogs/filter/FileFilter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,51 @@ internal object FileFilter {

return Pair(lisOfFiles, tempOutputPath)
}



/*
* Filter files by 'Date'.
*/
fun getFilesForDate(folderPath: String, fileNames: List<String>): Triple<List<File>, String, String> {

val path = folderPath
val lisOfFiles = FilterUtils.listFiles(path, arrayListOf())

val finalFiles = if(fileNames.isEmpty()) lisOfFiles else lisOfFiles.filter { f -> (fileNames.contains(f.nameWithoutExtension) ||
fileNames.contains(f.name.postfixRemoved()))
}

val tempDirPath = tempOutputPath + File(folderPath).name + File.separator

if (finalFiles.isNotEmpty()) {
try {
// try { File(tempDirPath).deleteRecursively() } catch (e: Exception) {}

//If folder is not created in targeted directory, then create specific folder and copy files into that folder directly.
val tempFolder = File(tempDirPath)
if(!tempFolder.exists()) {
tempFolder.mkdir()
}

if(tempFolder.exists()) {
finalFiles.forEach { f ->
f.copyRecursively(tempFolder, true)
}
}
} catch (e: Exception) {
e.printStackTrace()
Log.e(TAG, "getFilesForDate: Unable to get files for today!")
}
}

return Triple(finalFiles, tempDirPath, tempOutputPath)
}


}


private fun String.postfixRemoved(): String {
return this.split("_").first()
}
12 changes: 11 additions & 1 deletion plog/src/main/java/com/blackbox/plog/pLogs/filter/FilterUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ import java.util.zip.ZipFile
@Keep
object FilterUtils {

internal val rootFolderPath: String
get() {
//Create Root folder
val rootFolderName = LOG_FOLDER;
return PLog.logPath + rootFolderName + File.separator
}

internal fun extractDay(name: String): Int {
return Integer.parseInt(name.substring(0, 2))
}
Expand All @@ -39,7 +46,10 @@ object FilterUtils {
val fileHour = extractHour(files[i].name)

if (PLogImpl.getConfig()?.isDebuggable!!)
Log.i(FileFilter.TAG, "Last Hour: " + lastHour + " Check File Hour: " + fileHour + " " + files[i].name)
Log.i(
FileFilter.TAG,
"Last Hour: " + lastHour + " Check File Hour: " + fileHour + " " + files[i].name
)

if (fileHour == lastHour) {
found = true
Expand Down
11 changes: 11 additions & 0 deletions plog/src/main/java/com/blackbox/plog/pLogs/filter/PlogFilters.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.blackbox.plog.pLogs.filter
import androidx.annotation.Keep

@Keep
data class PlogFilters(val dates: List<String>,
val hours: List<String> = emptyList(),
val files: List<String> = emptyList()
)



0 comments on commit 22f5585

Please sign in to comment.