Skip to content

Commit fe2e076

Browse files
authored
feat: adding emission time to events and a timer to measure event lat… (#114)
1 parent d32bf5d commit fe2e076

6 files changed

Lines changed: 15 additions & 9 deletions

File tree

src/main/kotlin/at/ac/uibk/dps/cirrina/execution/object/Event.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package at.ac.uibk.dps.cirrina.execution.`object`
33
import at.ac.uibk.dps.cirrina.csm.Csml.EventChannel
44
import at.ac.uibk.dps.cirrina.csm.Csml.EventDescription
55
import at.ac.uibk.dps.cirrina.util.getInsecureUuid
6-
import kotlin.time.Clock
76

87
data class Event(
98
val topic: String,
@@ -12,7 +11,7 @@ data class Event(
1211
val target: String = "",
1312
val source: String = "",
1413
val id: String = getInsecureUuid().toString(),
15-
val createdTime: Long = Clock.System.now().epochSeconds,
14+
val emittedTime: Long = 0L,
1615
) {
1716
fun evaluateData(extent: Extent): Event = copy(data = data.map { it.evaluate(extent) })
1817

src/main/kotlin/at/ac/uibk/dps/cirrina/execution/object/StateMachine.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import at.ac.uibk.dps.cirrina.csm.Csml.EventChannel
66
import at.ac.uibk.dps.cirrina.execution.`object`.StateMachine.Factory
77
import at.ac.uibk.dps.cirrina.spec.Instance
88
import at.ac.uibk.dps.cirrina.spec.StateMachine as StateMachineSpec
9+
import com.codahale.metrics.Timer
910
import dagger.assisted.Assisted
1011
import dagger.assisted.AssistedFactory
1112
import dagger.assisted.AssistedInject
13+
import java.util.concurrent.TimeUnit
1214
import kotlin.properties.Delegates
1315
import kotlinx.coroutines.*
1416
import kotlinx.coroutines.channels.Channel
@@ -78,6 +80,8 @@ internal constructor(
7880

7981
override val extent: Extent
8082

83+
private val eventTimer: Timer = runtime.metricRegistry.timer("event.latency")
84+
8185
init {
8286
val transientContext = Context.from(specification.transient)
8387
val instanceData = Context.from(instance.data).getAll()
@@ -132,6 +136,8 @@ internal constructor(
132136
private fun processEvent(event: Event) {
133137
if (isTerminated()) return
134138

139+
eventTimer.update((System.nanoTime() - event.emittedTime) / 1_000, TimeUnit.MICROSECONDS)
140+
135141
handleEvent(event)?.let { transition -> step(transition) }
136142

137143
if (event.channel == EventChannel.INTERNAL) stateMachineEventHandler.propagateToNested(event)
@@ -255,7 +261,8 @@ internal constructor(
255261
override fun toString() = "StateMachine(name='$name')"
256262

257263
inner class StateMachineEventHandler(val eventHandler: EventHandler) {
258-
fun emit(event: Event) = eventHandler.emit(event.copy(source = name))
264+
fun emit(event: Event) =
265+
eventHandler.emit(event.copy(source = name, emittedTime = System.nanoTime()))
259266

260267
fun propagateToParent(event: Event) {
261268
parent?.stateMachineEventHandler?.propagateToParent(event) ?: pushEvent(event)

src/main/kotlin/at/ac/uibk/dps/cirrina/execution/util/EventExchange.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ object EventExchange {
2828
.setTarget(event.target)
2929
.setSource(event.source)
3030
.setId(event.id)
31-
.setCreatedTime(event.createdTime)
31+
.setEmittedTime(event.emittedTime)
3232

3333
event.data.forEach { variable -> builder.addData(ContextVariableExchange.toProto(variable)) }
3434

@@ -66,7 +66,7 @@ object EventExchange {
6666
proto.target,
6767
proto.source,
6868
proto.id,
69-
proto.createdTime,
69+
proto.emittedTime,
7070
)
7171
}
7272
}

src/main/proto/Event.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ message Event {
2222
string target = 4;
2323
string source = 5;
2424
string id = 6;
25-
int64 createdTime = 7;
25+
int64 emittedTime = 7;
2626
}

src/test/kotlin/at/ac/uibk/dps/cirrina/CompleteTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class CompleteTest {
9898
.addData(contextVariable)
9999
.setSource("source")
100100
.setId("someId")
101-
.setCreatedTime(1)
101+
.setEmittedTime(1)
102102
.build()
103103

104104
assertThrows<NullPointerException> {

src/test/kotlin/at/ac/uibk/dps/cirrina/execution/util/EventExchangeTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class EventExchangeTest {
3030
assertEquals(originalEvent.data[0].value, "some string")
3131
assertEquals(originalEvent.source, "source")
3232
assertEquals(originalEvent.id, "id")
33-
assertEquals(originalEvent.createdTime, 1)
33+
assertEquals(originalEvent.emittedTime, 1)
3434

3535
// Perform round-trip and verify the event properties
3636
originalEvent.roundTrip().let { receivedEvent ->
@@ -40,7 +40,7 @@ class EventExchangeTest {
4040
assertEquals(originalEvent.target, receivedEvent.target)
4141
assertEquals(originalEvent.source, receivedEvent.source)
4242
assertEquals(originalEvent.id, receivedEvent.id)
43-
assertEquals(originalEvent.createdTime, receivedEvent.createdTime)
43+
assertEquals(originalEvent.emittedTime, receivedEvent.emittedTime)
4444
}
4545
}
4646

0 commit comments

Comments
 (0)