@@ -6,9 +6,11 @@ import at.ac.uibk.dps.cirrina.csm.Csml.EventChannel
66import at.ac.uibk.dps.cirrina.execution.`object`.StateMachine.Factory
77import at.ac.uibk.dps.cirrina.spec.Instance
88import at.ac.uibk.dps.cirrina.spec.StateMachine as StateMachineSpec
9+ import com.codahale.metrics.Timer
910import dagger.assisted.Assisted
1011import dagger.assisted.AssistedFactory
1112import dagger.assisted.AssistedInject
13+ import java.util.concurrent.TimeUnit
1214import kotlin.properties.Delegates
1315import kotlinx.coroutines.*
1416import 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)
0 commit comments