b21d187173491dcda82fa08caf46fe608f934a0d
[dcaegen2/collectors/hv-ves.git] /
1 /*
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20 package org.onap.dcae.collectors.veshv.healthcheck.api
21
22 import arrow.effects.IO
23 import ratpack.handling.Chain
24 import ratpack.server.RatpackServer
25 import ratpack.server.ServerConfig
26 import java.util.concurrent.atomic.AtomicReference
27
28 /**
29  * @author Jakub Dudycz <jakub.dudycz@nokia.com>
30  * @since August 2018
31  */
32 class HealthCheckApiServer(private val healthStateProvider: HealthStateProvider) {
33
34     private val healthState: AtomicReference<HealthState> = AtomicReference(HealthState.STARTING)
35
36     fun start(port: Int): IO<RatpackServer> = IO {
37         healthStateProvider().subscribe(healthState::set)
38         RatpackServer
39                 .start {
40                     it
41                             .serverConfig(ServerConfig.embedded().port(port).development(false))
42                             .handlers(this::configureHandlers)
43                 }
44     }
45
46     private fun configureHandlers(chain: Chain) {
47         chain
48                 .get("healthcheck") { ctx ->
49                     healthState.get().run {
50                         ctx.response.status(responseCode).send(message)
51                     }
52                 }
53     }
54 }