package perf import akka.actor.{ActorRef, Props} import io.gatling.core.Predef._ import io.gatling.core.action.Chainable import io.gatling.core.action.builder.ActionBuilder import io.gatling.core.config.Protocols import io.gatling.core.result.message.{KO, OK} import io.gatling.core.result.writer.{DataWriter, RequestMessage} import io.gatling.core.util.TimeHelper.nowMillis import scala.concurrent.duration._ class MyAction(val next: ActorRef, val delegate: ThriftClient, val SCENARIO: String) extends Chainable { def doTest() { delegate.runPingTest } def execute(session: Session) { //println("Action is " + this + " delegate is " + delegate + " called " + Thread.currentThread()) var start: Long = 0L var end: Long = 0L var status: Status = OK var errorMessage: Option[String] = None try { start = nowMillis doTest() // Call any custom code you wish, say an API call end = nowMillis } catch { case e: Exception => errorMessage = Some(e.getMessage) logger.error("FAILED", e) status = KO } finally { val requestName = SCENARIO val message = errorMessage val extraInfo = Nil DataWriter.dispatch(RequestMessage( session.scenarioName, session.userId, session.groupHierarchy, requestName, start, end, start, end, status, message, extraInfo)) next ! session } } }