From 72931fcc9fdcd20a914799fcd8a0a7cb0b406ecf Mon Sep 17 00:00:00 2001 From: Izabela Zawadzka Date: Fri, 8 Mar 2019 09:14:56 +0100 Subject: Use netty HttpServer in DcaeAppApiServer Change-Id: I895ad192babd9cc40266d0bec3830fcd4b0e054b Issue-ID: DCAEGEN2-1325 Signed-off-by: Izabela Zawadzka --- .../onap/dcae/collectors/veshv/utils/http/netty.kt | 69 ++++++++++++++++++++++ .../dcae/collectors/veshv/utils/http/ratpack.kt | 11 +--- 2 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/netty.kt (limited to 'sources/hv-collector-utils/src/main/kotlin/org') diff --git a/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/netty.kt b/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/netty.kt new file mode 100644 index 00000000..33e65e4d --- /dev/null +++ b/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/netty.kt @@ -0,0 +1,69 @@ +/* + * ============LICENSE_START======================================================= + * dcaegen2-collectors-veshv + * ================================================================================ + * Copyright (C) 2019 NOKIA + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.dcae.collectors.veshv.utils.http + +import arrow.effects.IO +import org.onap.dcae.collectors.veshv.utils.logging.Logger +import reactor.core.publisher.Mono +import reactor.netty.NettyOutbound +import reactor.netty.http.server.HttpServerResponse +import javax.json.Json + +private val logger = Logger("org.onap.dcae.collectors.veshv.utils.http.netty") + +fun HttpServerResponse.sendOrError(action: IO): NettyOutbound = + sendAndHandleErrors(action.map { + Response( + HttpStatus.OK, + Content( + ContentType.JSON, + Json.createObjectBuilder().add("response", "Request accepted").build() + ) + ) + }) + + +fun HttpServerResponse.sendAndHandleErrors(response: IO): NettyOutbound = + response.attempt().unsafeRunSync().fold( + { err -> + logger.withWarn { log("Error occurred. Sending .", err) } + val message = err.message + sendResponse(errorResponse(message)) + }, + { + sendResponse(it) + } + ) + +private fun HttpServerResponse.sendResponse(response: Response): NettyOutbound { + val respWithStatus = status(response.status.number) + val responseContent = response.content + + return respWithStatus.sendString(Mono.just(responseContent.serializer.run { responseContent.value.show() })) +} + +private fun errorResponse(message: String?): Response = + Response( + HttpStatus.INTERNAL_SERVER_ERROR, + Content( + ContentType.JSON, + Json.createObjectBuilder().add("error", message).build() + ) + ) diff --git a/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/ratpack.kt b/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/ratpack.kt index a25b2912..529804a3 100644 --- a/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/ratpack.kt +++ b/sources/hv-collector-utils/src/main/kotlin/org/onap/dcae/collectors/veshv/utils/http/ratpack.kt @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * dcaegen2-collectors-veshv * ================================================================================ - * Copyright (C) 2018 NOKIA + * Copyright (C) 2018-2019 NOKIA * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,15 +31,6 @@ import javax.json.Json private val logger = Logger("org.onap.dcae.collectors.veshv.utils.arrow.ratpack") -fun ratpack.http.Response.sendOrError(action: IO) { - sendAndHandleErrors(action.map { - Response( - HttpStatus.OK, - Content( - ContentType.JSON, - Json.createObjectBuilder().add("response", "Request accepted").build())) - }) -} fun ratpack.http.Response.sendEitherErrorOrResponse(response: Either) { when (response) { -- cgit 1.2.3-korg