2014-05-28 8 views
3

Мне нравится принимать метрики, необходимые FSM, до тех пор, пока не достигнет определенного состояния. Вместо того, чтобы спамить мои классы с кодом метрик, я хотел бы добавить признак, который переопределяет определенные методы и выдает сообщение при вызове метода.Instrumenting Akka FSM

Например:

trait InstrumentedActorFSM[S,D] extends Actor with FSM[S,D] {self: Actor with FSM[S,D] with Logging => 
    startTimer // start measuring time here with Graphite 

    override def stop = { 
    stopTimerAndEmitMessage // emit message to graphite 
    super.stop 
    } 
} 

К сожалению все методы Whitin ФСМ объявлены окончательным и не может быть перезаписана. Я мог бы прибегнуть к шаблону Cake и встроить FSM для переопределения всех вызовов, но это кажется довольно неуклюжим. Любые хорошие идеи?

ответ

2

Вы можете использовать onTransition обработчик как:

trait InstrumentedActorFSM[S,D] extends Actor with FSM[S,D] { ... 

    onTransition { 
    case _ -> SomeState => stopTimerAndEmitMessage 
    } 

} 
+0

Это не работает для меня, как я не буду в состоянии использовать onTransition для чего-нибудь еще тогда. –

+1

Из akka docs: Поддерживается несколько таких блоков, и все они будут вызываться не только для первого соответствующего. – shutty

+0

Точно - вы можете зарегистрировать несколько блоков onTransition. –