Add the ability to download the current perfetto trace in Spinner.

This commit is contained in:
Greyson Parrelli 2023-11-07 09:07:59 -05:00
parent 07aa058a46
commit cfe5ea3f9b
2 changed files with 17 additions and 0 deletions

View file

@ -9,6 +9,12 @@
{{/each}}
</table>
<div>
Download Trace: <a href="/trace">Link</a>
</div>
<br />
<div>
Database:
<select id="database-selector">

View file

@ -12,7 +12,9 @@ import org.signal.core.util.ExceptionUtil
import org.signal.core.util.ForeignKeyConstraint
import org.signal.core.util.getForeignKeys
import org.signal.core.util.logging.Log
import org.signal.core.util.tracing.Tracer
import org.signal.spinner.Spinner.DatabaseConfig
import java.io.ByteArrayInputStream
import java.lang.IllegalArgumentException
import java.security.NoSuchAlgorithmException
import java.text.SimpleDateFormat
@ -71,6 +73,7 @@ internal class SpinnerServer(
session.method == Method.GET && session.uri == "/query" -> getQuery(dbParam)
session.method == Method.POST && session.uri == "/query" -> postQuery(dbParam, dbConfig, session)
session.method == Method.GET && session.uri == "/recent" -> getRecent(dbParam)
session.method == Method.GET && session.uri == "/trace" -> getTrace()
session.method == Method.GET && session.uri == "/logs" -> getLogs(dbParam)
isWebsocketRequested(session) && session.uri == "/logs/websocket" -> getLogWebSocket(session)
else -> {
@ -217,6 +220,14 @@ internal class SpinnerServer(
)
}
private fun getTrace(): Response {
return newChunkedResponse(
Response.Status.OK,
"application/octet-stream",
ByteArrayInputStream(Tracer.getInstance().serialize())
)
}
private fun getLogs(dbName: String): Response {
return renderTemplate(
"logs",