2 * ============LICENSE_START=======================================================
3 * dcaegen2-collectors-veshv
4 * ================================================================================
5 * Copyright (C) 2018 NOKIA
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.onap.dcae.collectors.veshv.utils.http
22 import arrow.core.Either
23 import arrow.effects.IO
24 import org.onap.dcae.collectors.veshv.utils.logging.Logger
25 import javax.json.Json
28 * @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
32 private val logger = Logger("org.onap.dcae.collectors.veshv.utils.arrow.ratpack")
34 fun ratpack.http.Response.sendOrError(action: IO<Unit>) {
35 sendAndHandleErrors(action.map {
40 Json.createObjectBuilder().add("response", "Request accepted").build()))
44 fun <A> ratpack.http.Response.sendEitherErrorOrResponse(response: Either<A, Response>) {
46 is Either.Left -> send(errorResponse(response.a.toString()))
47 is Either.Right -> sendAndHandleErrors(IO.just(response.b))
51 fun ratpack.http.Response.sendAndHandleErrors(response: IO<Response>) {
52 response.attempt().unsafeRunSync().fold(
54 logger.warn("Error occurred. Sending .", err)
55 val message = err.message
56 send(errorResponse(message))
62 private fun errorResponse(message: String?): Response {
64 HttpStatus.INTERNAL_SERVER_ERROR,
67 Json.createObjectBuilder().add("error", message).build()))
70 fun ratpack.http.Response.send(response: Response) {
71 val respWithStatus = status(response.status.number)
72 response.content.apply {
75 serializer.run { value.show() })