dave
02/18/2018, 10:05 PMpackage quickstart
import org.http4k.core.Filter
import org.http4k.core.Method.DELETE
import org.http4k.core.Method.GET
import <http://org.http4k.core.Method.POST|org.http4k.core.Method.POST>
import org.http4k.core.Method.PUT
import org.http4k.core.Request
import org.http4k.core.RequestContexts
import org.http4k.core.Response
import org.http4k.core.Status.Companion.OK
import org.http4k.core.then
import org.http4k.filter.ResponseFilters
import org.http4k.filter.ServerFilters
import org.http4k.lens.RequestContextKey
import org.http4k.routing.bind
import org.http4k.routing.routes
val contexts = RequestContexts()
data class Dimension(val a: String, val v: String)
fun emitMetric(listOf: List<Dimension>, s: String, toMillis: Long) {
println(listOf + s + toMillis)
}
val mapsRoute = routes(
"/{id}" bind PUT to name("UpdateMap").then { _: Request -> Response(OK) },
"/" bind POST to name("CreateMap").then { _: Request -> Response(OK) },
"/{id}" bind DELETE to name("DeleteMap").then { _: Request -> Response(OK) },
"/{id}" bind GET to name("ReadMap").then { _: Request -> Response(OK) }
)
val nameKey = RequestContextKey.required<String>(contexts)
val filters = ServerFilters.InitialiseRequestContext(contexts)
.then(ResponseFilters.ReportHttpTransaction {
emitMetric(listOf(
Dimension("URI", nameKey(it.request)),
Dimension("Method", it.request.method.name)
), "Latency", it.duration.toMillis())
})
val app = filters.then(routes(
"/maps" bind mapsRoute
// More routes here
))
fun name(name: String) = Filter { next ->
{
nameKey[it] = name
next(it)
}
}
fun main(args: Array<String>) {
app(Request(GET, "/maps/123"))
app(Request(POST, "/maps/"))
}