@@ -21,6 +21,11 @@ import spp.cli.PlatformCLI
2121import spp.protocol.SourceMarkerServices
2222import spp.protocol.extend.TCPServiceFrameParser
2323import 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
2530class 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- " \n Event (${eventCount++ } ):\n " +
79- " \t Type: ${event.eventType} \n " +
80- " \t Data: ${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+ " \n Event (${eventCount++ } ):\n " +
113+ " \t Type: ${liveEvent.eventType} \n " +
114+ " \t Data: ${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+ " \n Event (${eventCount++ } ):\n " +
122+ " \t Type: ${liveEvent.eventType} \n " +
123+ " \t Data: ${liveEvent.data} "
124+ )
125+ } else if (includeLogs && liveEvent.eventType.name.startsWith(" log" , true )) {
126+ println (
127+ " \n Event (${eventCount++ } ):\n " +
128+ " \t Type: ${liveEvent.eventType} \n " +
129+ " \t Data: ${liveEvent.data} "
130+ )
131+ } else if (includeMeters && liveEvent.eventType.name.startsWith(" meter" , true )) {
132+ println (
133+ " \n Event (${eventCount++ } ):\n " +
134+ " \t Type: ${liveEvent.eventType} \n " +
135+ " \t Data: ${liveEvent.data} "
136+ )
137+ } else if (includeTraces && liveEvent.eventType.name.startsWith(" trace" , true )) {
138+ println (
139+ " \n Event (${eventCount++ } ):\n " +
140+ " \t Type: ${liveEvent.eventType} \n " +
141+ " \t Data: ${liveEvent.data} "
142+ )
143+ }
144+ }
82145 }
83146
84147 // register listener
0 commit comments