orangy
metrics
branch. What are metrics you would like to have out of the box?Marcus Fihlon
08/06/2017, 5:29 PMmkporwit
08/06/2017, 7:34 PMorangy
mkporwit
08/06/2017, 7:47 PMorangy
orangy
get("/a/b/{param}/{...}")
orangy
mkporwit
08/06/2017, 7:50 PMmkporwit
08/06/2017, 7:50 PMmkporwit
08/06/2017, 7:52 PMorangy
mkporwit
08/06/2017, 7:55 PMmkporwit
08/06/2017, 7:56 PMmkporwit
08/06/2017, 7:57 PMmkporwit
08/06/2017, 7:59 PMApplication.main()
, I do the registrations:
/ TODO add proper healthcheck endpoint for monitoring that does not need authentication
val documentIdMetrics : MetricRegistry = MetricsServletContextListener.METRIC_REGISTRY
val getMeter : Meter = documentIdMetrics.meter("GET requests")
val postMeter : Meter = documentIdMetrics.meter("POST requests")
val getTimer : Timer = documentIdMetrics.timer("GET timer")
val postTimer : Timer = documentIdMetrics.timer("POST timer")
val getVersionMeter: Meter = documentIdMetrics.meter("GET Version requests")
val getVersionSuccessMeter: Meter = documentIdMetrics.meter("GET version success requests")
val getVersionDenyMeter: Meter = documentIdMetrics.meter("GET version deny requests")
val getVersionTimer : Timer = documentIdMetrics.timer("GET version timer")
val documentIdServiceHealthChecks : HealthCheckRegistry = HealthCheckServletContextListener.HEALTH_CHECK_REGISTRY
mkporwit
08/06/2017, 8:00 PMget("/checkVersion/{versionId}") {
getVersionMeter.mark()
val context : Timer.Context = getVersionTimer.time()
try {
val versionString: String = if (call.parameters["versionId"] != null) call.parameters["versionId"].toString() else ""
val (versionStatus, versionStatusMessage) = VersionCheck().getVersionStatus(versionString)
if (versionStatus == VersionCheckStatus.Current || versionStatus == VersionCheckStatus.Upgradeable) {
getVersionSuccessMeter.mark()
call.response.status(HttpStatusCode.OK)
} else if (versionStatus == VersionCheckStatus.Blocked || versionStatus == VersionCheckStatus.TooOld) {
getVersionDenyMeter.mark()
call.response.status(HttpStatusCode.Forbidden)
} else {
call.response.status(HttpStatusCode.BadRequest)
}
val model = VersionCheckResponseModel(versionStatus, versionStatusMessage)
call.respond(JsonResponse(model))
} finally {
context.stop()
}
}
mkporwit
08/06/2017, 8:00 PMorangy
mark
calls manually. Indeed, you need an interceptor 🙂mkporwit
08/06/2017, 8:07 PMorangy
routing {
intercept(ApplicationCallPipeline.Infrastructure) {
val routingCall = call as RoutingApplicationCall
val name = routingCall.route.toString()
val meter = metrics.registry.meter(name)
meter.mark()
}
… your code …
}
orangy
intercept(ApplicationCallPipeline.Infrastructure) {
val routingCall = call as RoutingApplicationCall
val name = routingCall.route.toString()
val meter = metrics.registry.meter(MetricRegistry.name(name, "meter"))
val timer = metrics.registry.timer(MetricRegistry.name(name, "timer"))
meter.mark()
val context = timer.time()
try {
proceed()
} finally {
val status = routingCall.response.status() ?: 0
val statusMeter = metrics.registry.meter(MetricRegistry.name(name, status.toString()))
statusMeter.mark()
context.stop()
}
}