Created
May 10, 2012 01:59
-
-
Save michaelneale/2650446 to your computer and use it in GitHub Desktop.
Basic request and error counter for Play! Framework v2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.{TimerTask, Timer} | |
import play.api.GlobalSettings | |
import play.api.mvc.{Action, RequestHeader} | |
import play.api.mvc.Results._ | |
/** | |
* @author michael neale | |
*/ | |
object Global extends GlobalSettings { | |
val requestCounter = new ReqCounter | |
val errorCounter = new ReqCounter | |
override def onRouteRequest(request: RequestHeader) = { | |
requestCounter.increment() | |
if (request.uri == "/_stats") { | |
val echo = Action { request => | |
Ok("requestCountPerMinute=" + requestCounter.rate + | |
"\nerrorCountPerMinute=" + errorCounter.rate) | |
} | |
Some(echo) | |
} else { | |
super.onRouteRequest(request) | |
} | |
} | |
override def onError(request: RequestHeader, ex: Throwable) = { | |
errorCounter.increment() | |
super.onError(request, ex) | |
} | |
class ReqCounter(val timer: Timer) { | |
var currentRate = 0.0 | |
var requestCount = 0 | |
def this() = { | |
this(new Timer) | |
timer.scheduleAtFixedRate(new TimerTask { | |
def run() { | |
currentRate = requestCount | |
requestCount = 0 | |
} | |
}, 0, 60000) | |
} | |
def increment() { | |
requestCount = requestCount + 1 | |
} | |
def rate = currentRate | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment