aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien
diff options
context:
space:
mode:
authorpacien2018-03-04 18:05:16 +0100
committerpacien2018-03-04 18:07:33 +0100
commit44d00258bf0c7786ec6db9c19809db126e6c8172 (patch)
treea5ec66a2fc0c68f76d5a3a860a6eef3578b80594 /app/src/main/java/org/pacien
parentc19a82fd6af5e4b6bb0f11933408c83aff66651f (diff)
downloadtincapp-44d00258bf0c7786ec6db9c19809db126e6c8172.tar.gz
Log view performance tweak and limiting
Diffstat (limited to 'app/src/main/java/org/pacien')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt36
1 files changed, 25 insertions, 11 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt b/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt
index d9fb733..ebdd22a 100644
--- a/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt
+++ b/app/src/main/java/org/pacien/tincapp/activities/ViewLogActivity.kt
@@ -10,16 +10,22 @@ import org.pacien.tincapp.R
10import org.pacien.tincapp.commands.Executor 10import org.pacien.tincapp.commands.Executor
11import org.pacien.tincapp.commands.Tinc 11import org.pacien.tincapp.commands.Tinc
12import org.pacien.tincapp.service.TincVpnService 12import org.pacien.tincapp.service.TincVpnService
13import java.util.*
14import kotlin.concurrent.timer
13 15
14/** 16/**
15 * @author pacien 17 * @author pacien
16 */ 18 */
17class ViewLogActivity : BaseActivity() { 19class ViewLogActivity : BaseActivity() {
18 companion object { 20 companion object {
21 private const val LOG_LINES = 250
19 private const val LOG_LEVEL = 5 22 private const val LOG_LEVEL = 5
20 private const val NEW_LINE = "\n" 23 private const val NEW_LINE = "\n"
24 private const val UPDATE_INTERVAL = 250L // ms
21 } 25 }
22 26
27 private val log = LinkedList<String>()
28 private var logUpdateTimer: Timer? = null
23 private var logger: Process? = null 29 private var logger: Process? = null
24 30
25 override fun onCreate(savedInstanceState: Bundle?) { 31 override fun onCreate(savedInstanceState: Bundle?) {
@@ -59,32 +65,40 @@ class ViewLogActivity : BaseActivity() {
59 } 65 }
60 66
61 private fun startLogging(level: Int = LOG_LEVEL) { 67 private fun startLogging(level: Int = LOG_LEVEL) {
62 text_log.append(NEW_LINE) 68 appendLog(resources.getString(R.string.message_log_level_set, level))
63 text_log.append(resources.getString(R.string.message_log_level_set, level))
64 text_log.append(NEW_LINE)
65
66 Tinc.log(TincVpnService.getCurrentNetName()!!, level).let { process -> 69 Tinc.log(TincVpnService.getCurrentNetName()!!, level).let { process ->
67 logger = process 70 logger = process
68 Executor.runAsyncTask { printLog(process) } 71 Executor.runAsyncTask { printLog(process) }
69 } 72 }
73 logUpdateTimer = timer(period = UPDATE_INTERVAL, action = { updateLog() })
70 } 74 }
71 75
72 private fun stopLogging() { 76 private fun stopLogging() {
73 logger?.destroy() 77 logger?.destroy()
74 logger = null 78 logger = null
79 logUpdateTimer?.cancel()
80 logUpdateTimer?.purge()
81 logUpdateTimer = null
82 appendLog(resources.getString(R.string.message_log_paused))
83 updateLog()
75 } 84 }
76 85
77 private fun printLog(logger: Process) { 86 private fun printLog(logger: Process) {
78 logger.inputStream?.use { inputStream -> 87 logger.inputStream?.use { inputStream ->
79 inputStream.bufferedReader().useLines { lines -> 88 inputStream.bufferedReader().useLines { lines ->
80 lines.forEach { 89 lines.forEach { appendLog(it) }
81 text_log.post {
82 text_log.append(NEW_LINE)
83 text_log.append(it)
84 text_log.append(NEW_LINE)
85 }
86 }
87 } 90 }
88 } 91 }
89 } 92 }
93
94 private fun appendLog(line: String) = synchronized(this) {
95 if (log.size >= LOG_LINES) log.removeFirst()
96 log.addLast(line)
97 }
98
99 private fun updateLog() = synchronized(this) {
100 log.joinToString(NEW_LINE + NEW_LINE, NEW_LINE, NEW_LINE).let {
101 text_log.post { text_log.text = it }
102 }
103 }
90} 104}