Skip to content

Commit 2dde400

Browse files
committed
temp impl
1 parent fdbad7b commit 2dde400

File tree

3 files changed

+92
-18
lines changed

3 files changed

+92
-18
lines changed

build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ dependencies {
5252
implementation("eu.geekplace.javapinning:java-pinning-core:1.2.0")
5353

5454
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion")
55+
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.1")
5556

5657
testImplementation("org.junit.jupiter:junit-jupiter-engine:$jupiterVersion")
5758
}

src/main/kotlin/spp/cli/PlatformCLI.kt

+15-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,18 @@ package spp.cli
33
import com.apollographql.apollo.ApolloClient
44
import com.auth0.jwt.JWT
55
import com.auth0.jwt.algorithms.Algorithm
6+
import com.fasterxml.jackson.databind.module.SimpleModule
67
import com.github.ajalt.clikt.core.CliktCommand
78
import com.github.ajalt.clikt.parameters.options.default
89
import com.github.ajalt.clikt.parameters.options.flag
910
import com.github.ajalt.clikt.parameters.options.option
1011
import com.github.ajalt.clikt.parameters.types.file
1112
import eu.geekplace.javapinning.JavaPinning
13+
import io.vertx.core.json.jackson.DatabindCodec
14+
import kotlinx.datetime.Clock
15+
import kotlinx.datetime.DateTimeUnit
16+
import kotlinx.datetime.Instant
17+
import kotlinx.datetime.plus
1218
import okhttp3.OkHttpClient
1319
import okhttp3.Request
1420
import org.bouncycastle.cert.X509CertificateHolder
@@ -18,14 +24,13 @@ import org.bouncycastle.openssl.PEMKeyPair
1824
import org.bouncycastle.openssl.PEMParser
1925
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter
2026
import org.bouncycastle.util.encoders.Hex
27+
import spp.protocol.util.KSerializers
2128
import java.io.File
2229
import java.io.StringReader
2330
import java.security.SecureRandom
2431
import java.security.cert.X509Certificate
2532
import java.security.interfaces.RSAPrivateKey
2633
import java.security.interfaces.RSAPublicKey
27-
import java.time.Instant
28-
import java.time.temporal.ChronoUnit
2934
import javax.net.ssl.SSLContext
3035
import javax.net.ssl.TrustManager
3136
import javax.net.ssl.X509TrustManager
@@ -56,7 +61,12 @@ object PlatformCLI : CliktCommand(name = "spp-cli", allowMultipleSubcommands = t
5661
}
5762
}
5863

59-
override fun run() = Unit
64+
override fun run() {
65+
val module = SimpleModule()
66+
module.addSerializer(Instant::class.java, KSerializers.KotlinInstantSerializer())
67+
module.addDeserializer(Instant::class.java, KSerializers.KotlinInstantDeserializer())
68+
DatabindCodec.mapper().registerModule(module)
69+
}
6070

6171
private fun connectToPlatform(): ApolloClient {
6272
val serverUrl = if (platformHost.startsWith("http")) {
@@ -99,8 +109,8 @@ object PlatformCLI : CliktCommand(name = "spp-cli", allowMultipleSubcommands = t
99109
jwtToken = JWT.create()
100110
.withIssuer("cli")
101111
.withClaim("developer_id", "system") //users with key are automatically considered system
102-
.withClaim("created_at", Instant.now().toEpochMilli())
103-
.withClaim("expires_at", Instant.now().plus(365, ChronoUnit.DAYS).toEpochMilli())
112+
.withClaim("created_at", Clock.System.now().toEpochMilliseconds())
113+
.withClaim("expires_at", Clock.System.now().plus(8760, DateTimeUnit.HOUR).toEpochMilliseconds())
104114
.sign(algorithm)
105115
} else {
106116
val tokenUri = "$serverUrl/api/new-token?access_token=$accessToken"

src/main/kotlin/spp/cli/commands/instrument/SubscribeEvents.kt

+76-13
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ import spp.cli.PlatformCLI
2121
import spp.protocol.SourceMarkerServices
2222
import spp.protocol.extend.TCPServiceFrameParser
2323
import spp.protocol.instrument.LiveInstrumentEvent
24+
import spp.protocol.instrument.LiveInstrumentEventType
25+
import spp.protocol.instrument.breakpoint.event.LiveBreakpointHit
26+
import spp.protocol.instrument.breakpoint.event.LiveBreakpointRemoved
27+
import spp.protocol.instrument.log.event.LiveLogHit
28+
import spp.protocol.instrument.log.event.LiveLogRemoved
2429

2530
class SubscribeEvents : CliktCommand(
2631
help = "Listens for and outputs live events. Subscribes to all events by default"
@@ -30,22 +35,17 @@ class SubscribeEvents : CliktCommand(
3035
name = "Instrument IDs",
3136
help = "Capture events from specific live instruments"
3237
).multiple()
38+
3339
val includeBreakpoints by option("--breakpoints", "-b", help = "Include live breakpoint events")
3440
.flag(default = false)
3541
val includeLogs by option("--logs", "-l", help = "Include live log events")
3642
.flag(default = false)
37-
val includeMetrics by option("--metrics", "-m", help = "Include live metric events")
43+
val includeMeters by option("--meters", "-m", help = "Include live meter events")
3844
.flag(default = false)
3945
val includeTraces by option("--traces", "-t", help = "Include live trace events")
4046
.flag(default = false)
4147

4248
override fun run() {
43-
if (!includeBreakpoints && !includeLogs && !includeMetrics && !includeTraces) {
44-
//listen for all events
45-
} else {
46-
//listen for specific events
47-
}
48-
4949
var eventCount = 1
5050
runBlocking {
5151
val vertx = Vertx.vertx()
@@ -73,12 +73,75 @@ class SubscribeEvents : CliktCommand(
7373
socket!!.handler(FrameParser(TCPServiceFrameParser(vertx, socket)))
7474

7575
vertx.eventBus().consumer<JsonObject>("local." + SourceMarkerServices.Provide.LIVE_INSTRUMENT_SUBSCRIBER) {
76-
val event = Json.decodeValue(it.body().toString(), LiveInstrumentEvent::class.java)
77-
println(
78-
"\nEvent (${eventCount++}):\n" +
79-
"\tType: ${event.eventType}\n" +
80-
"\tData: ${event.data}"
81-
)
76+
val liveEvent = Json.decodeValue(it.body().toString(), LiveInstrumentEvent::class.java)
77+
78+
//todo: impl filter on platform
79+
if (instrumentIds.isNotEmpty()) {
80+
when (liveEvent.eventType) {
81+
LiveInstrumentEventType.LOG_HIT -> {
82+
val logHit = Json.decodeValue(liveEvent.data, LiveLogHit::class.java)
83+
if (logHit.logId !in instrumentIds) {
84+
return@consumer
85+
}
86+
}
87+
LiveInstrumentEventType.BREAKPOINT_HIT -> {
88+
val breakpointHit = Json.decodeValue(liveEvent.data, LiveBreakpointHit::class.java)
89+
if (breakpointHit.breakpointId !in instrumentIds) {
90+
return@consumer
91+
}
92+
}
93+
LiveInstrumentEventType.BREAKPOINT_REMOVED -> {
94+
val breakpointRemoved = Json.decodeValue(liveEvent.data, LiveBreakpointRemoved::class.java)
95+
if (breakpointRemoved.breakpointId !in instrumentIds) {
96+
return@consumer
97+
}
98+
}
99+
LiveInstrumentEventType.LOG_REMOVED -> {
100+
val logRemoved = Json.decodeValue(liveEvent.data, LiveLogRemoved::class.java)
101+
if (logRemoved.logId !in instrumentIds) {
102+
return@consumer
103+
}
104+
}
105+
else -> TODO("Unhandled event type: ${liveEvent.eventType}")
106+
}
107+
}
108+
109+
if (!includeBreakpoints && !includeLogs && !includeMeters && !includeTraces) {
110+
//listen for all events
111+
println(
112+
"\nEvent (${eventCount++}):\n" +
113+
"\tType: ${liveEvent.eventType}\n" +
114+
"\tData: ${liveEvent.data}"
115+
)
116+
} else {
117+
//todo: impl filtering on platform
118+
//listen for specific events
119+
if (includeBreakpoints && liveEvent.eventType.name.startsWith("breakpoint", true)) {
120+
println(
121+
"\nEvent (${eventCount++}):\n" +
122+
"\tType: ${liveEvent.eventType}\n" +
123+
"\tData: ${liveEvent.data}"
124+
)
125+
} else if (includeLogs && liveEvent.eventType.name.startsWith("log", true)) {
126+
println(
127+
"\nEvent (${eventCount++}):\n" +
128+
"\tType: ${liveEvent.eventType}\n" +
129+
"\tData: ${liveEvent.data}"
130+
)
131+
} else if (includeMeters && liveEvent.eventType.name.startsWith("meter", true)) {
132+
println(
133+
"\nEvent (${eventCount++}):\n" +
134+
"\tType: ${liveEvent.eventType}\n" +
135+
"\tData: ${liveEvent.data}"
136+
)
137+
} else if (includeTraces && liveEvent.eventType.name.startsWith("trace", true)) {
138+
println(
139+
"\nEvent (${eventCount++}):\n" +
140+
"\tType: ${liveEvent.eventType}\n" +
141+
"\tData: ${liveEvent.data}"
142+
)
143+
}
144+
}
82145
}
83146

84147
//register listener

0 commit comments

Comments
 (0)