@@ -21,6 +21,11 @@ import spp.cli.PlatformCLI
21
21
import spp.protocol.SourceMarkerServices
22
22
import spp.protocol.extend.TCPServiceFrameParser
23
23
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
24
29
25
30
class SubscribeEvents : CliktCommand (
26
31
help = " Listens for and outputs live events. Subscribes to all events by default"
@@ -30,22 +35,17 @@ class SubscribeEvents : CliktCommand(
30
35
name = " Instrument IDs" ,
31
36
help = " Capture events from specific live instruments"
32
37
).multiple()
38
+
33
39
val includeBreakpoints by option(" --breakpoints" , " -b" , help = " Include live breakpoint events" )
34
40
.flag(default = false )
35
41
val includeLogs by option(" --logs" , " -l" , help = " Include live log events" )
36
42
.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" )
38
44
.flag(default = false )
39
45
val includeTraces by option(" --traces" , " -t" , help = " Include live trace events" )
40
46
.flag(default = false )
41
47
42
48
override fun run () {
43
- if (! includeBreakpoints && ! includeLogs && ! includeMetrics && ! includeTraces) {
44
- // listen for all events
45
- } else {
46
- // listen for specific events
47
- }
48
-
49
49
var eventCount = 1
50
50
runBlocking {
51
51
val vertx = Vertx .vertx()
@@ -73,12 +73,75 @@ class SubscribeEvents : CliktCommand(
73
73
socket!! .handler(FrameParser (TCPServiceFrameParser (vertx, socket)))
74
74
75
75
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
+ }
82
145
}
83
146
84
147
// register listener
0 commit comments