Skip to content

Commit

Permalink
Merge pull request #2758 from element-hq/feature/bma/logRotation
Browse files Browse the repository at this point in the history
Let the SDK manage the file log cleanup, and keep one week of log.
  • Loading branch information
bmarty authored Apr 26, 2024
2 parents 734ffc2 + 1a2a9ac commit 27b91c2
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,13 @@ class TracingInitializer : Initializer<Unit> {
writesToLogcat = false,
writesToFilesConfiguration = WriteToFilesConfiguration.Enabled(
directory = bugReporter.logDirectory().absolutePath,
filenamePrefix = "logs"
filenamePrefix = "logs",
filenameSuffix = null,
// Keep a minimum of 1 week of log files.
numberOfFiles = 7 * 24,
)
)
}
bugReporter.cleanLogDirectoryIfNeeded()
bugReporter.setCurrentTracingFilter(tracingConfiguration.filterConfiguration.filter)
tracingService.setupTracing(tracingConfiguration)
// Also set env variable for rust back trace
Expand Down
1 change: 1 addition & 0 deletions changelog.d/2758.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Let the SDK manage the file log cleanup, and keep one week of log.
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,6 @@ interface BugReporter {
listener: BugReporterListener?
)

/**
* Clean the log files if needed to avoid wasting disk space.
*/
fun cleanLogDirectoryIfNeeded()

/**
* Provide the log directory.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package io.element.android.features.rageshake.impl.reporter

import android.content.Context
import android.os.Build
import android.text.format.DateUtils.DAY_IN_MILLIS
import androidx.core.net.toFile
import androidx.core.net.toUri
import com.squareup.anvil.annotations.ContributesBinding
Expand All @@ -39,11 +38,8 @@ import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.matrix.api.SdkMetadata
import io.element.android.libraries.network.useragent.UserAgentProvider
import io.element.android.libraries.sessionstorage.api.SessionStore
import io.element.android.services.toolbox.api.systemclock.SystemClock
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.Call
import okhttp3.MediaType.Companion.toMediaTypeOrNull
Expand Down Expand Up @@ -75,8 +71,6 @@ class DefaultBugReporter @Inject constructor(
@ApplicationContext private val context: Context,
private val screenshotHolder: ScreenshotHolder,
private val crashDataStore: CrashDataStore,
private val coroutineScope: CoroutineScope,
private val systemClock: SystemClock,
private val coroutineDispatchers: CoroutineDispatchers,
private val okHttpClient: Provider<OkHttpClient>,
private val userAgentProvider: UserAgentProvider,
Expand Down Expand Up @@ -339,13 +333,6 @@ class DefaultBugReporter @Inject constructor(
}
}

override fun cleanLogDirectoryIfNeeded() {
coroutineScope.launch(coroutineDispatchers.io) {
// delete the log files older than 1 day, except the most recent one
deleteOldLogFiles(systemClock.epochMillis() - DAY_IN_MILLIS)
}
}

suspend fun deleteAllFiles() {
withContext(coroutineDispatchers.io) {
getLogFiles().forEach { it.safeDelete() }
Expand All @@ -368,16 +355,6 @@ class DefaultBugReporter @Inject constructor(
}.orEmpty()
}

/**
* Delete the log files older than the given time except the most recent one.
* @param time the time in ms
*/
private fun deleteOldLogFiles(time: Long) {
val logFiles = getLogFiles()
val oldLogFiles = logFiles.filter { it.lastModified() < time }
oldLogFiles.deleteAllExceptMostRecent()
}

/**
* Delete all the log files except the most recent one.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,6 @@ class FakeBugReporter(val mode: FakeBugReporterMode = FakeBugReporterMode.Succes
listener?.onUploadSucceed()
}

override fun cleanLogDirectoryIfNeeded() {
// No op
}

override fun logDirectory(): File {
return File("fake")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import io.element.android.libraries.matrix.test.FakeSdkMetadata
import io.element.android.libraries.matrix.test.core.aBuildMeta
import io.element.android.libraries.network.useragent.DefaultUserAgentProvider
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
import io.element.android.tests.testutils.testCoroutineDispatchers
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
Expand Down Expand Up @@ -144,8 +143,6 @@ class DefaultBugReporterTest {
context = RuntimeEnvironment.getApplication(),
screenshotHolder = FakeScreenshotHolder(),
crashDataStore = FakeCrashDataStore(),
coroutineScope = this,
systemClock = FakeSystemClock(),
coroutineDispatchers = testCoroutineDispatchers(),
okHttpClient = { OkHttpClient.Builder().build() },
userAgentProvider = DefaultUserAgentProvider(buildMeta, FakeSdkMetadata("123456789")),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,10 @@ package io.element.android.libraries.matrix.api.tracing

sealed interface WriteToFilesConfiguration {
data object Disabled : WriteToFilesConfiguration
data class Enabled(val directory: String, val filenamePrefix: String) : WriteToFilesConfiguration
data class Enabled(
val directory: String,
val filenamePrefix: String,
val filenameSuffix: String?,
val numberOfFiles: Int?,
) : WriteToFilesConfiguration
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,7 @@ class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) :
val rustTracingConfiguration = org.matrix.rustcomponents.sdk.TracingConfiguration(
filter = tracingConfiguration.filterConfiguration.filter,
writeToStdoutOrSystem = tracingConfiguration.writesToLogcat,
writeToFiles = when (val writeToFilesConfiguration = tracingConfiguration.writesToFilesConfiguration) {
is WriteToFilesConfiguration.Disabled -> null
is WriteToFilesConfiguration.Enabled -> TracingFileConfiguration(
path = writeToFilesConfiguration.directory,
filePrefix = writeToFilesConfiguration.filenamePrefix,
fileSuffix = null,
maxFiles = null,
)
},
writeToFiles = tracingConfiguration.writesToFilesConfiguration.toTracingFileConfiguration(),
)
org.matrix.rustcomponents.sdk.setupTracing(rustTracingConfiguration)
Timber.v("Tracing config filter = $filter: ${filter.filter}")
Expand All @@ -51,3 +43,15 @@ class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) :
return RustTracingTree(retrieveFromStackTrace = buildMeta.isDebuggable)
}
}

private fun WriteToFilesConfiguration.toTracingFileConfiguration(): TracingFileConfiguration? {
return when (this) {
is WriteToFilesConfiguration.Disabled -> null
is WriteToFilesConfiguration.Enabled -> TracingFileConfiguration(
path = directory,
filePrefix = filenamePrefix,
fileSuffix = filenameSuffix,
maxFiles = numberOfFiles?.toULong(),
)
}
}

0 comments on commit 27b91c2

Please sign in to comment.