-
-
Save dalexandrov/6e7d0e668abb821b89dca9e968b37ab5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package io.helidon.kotlin.examples.quickstart.se | |
import healthSupport | |
import io.helidon.common.LogConfig | |
import io.helidon.config.Config | |
import io.helidon.health.checks.HealthChecks | |
import io.helidon.media.jsonp.JsonpSupport | |
import io.helidon.metrics.MetricsSupport | |
import io.helidon.webserver.Routing | |
import io.helidon.webserver.WebServer | |
import routing | |
/** | |
* Application main entry point. | |
* @param args command line arguments. | |
*/ | |
fun main(args: Array<String>) { | |
startServer() | |
} | |
/** | |
* Start the server. | |
* @return the created [WebServer] instance | |
*/ | |
fun startServer(): WebServer { | |
// load logging configuration | |
LogConfig.configureRuntime() | |
// By default this will pick up application.yaml from the classpath | |
val config = Config.create() | |
val server = WebServer.builder(createRouting(config)) | |
.config(config["server"]) | |
.addMediaSupport(JsonpSupport.create()) | |
.build() | |
// Try to start the server. If successful, print some info and arrange to | |
// print a message at shutdown. If unsuccessful, print the exception. | |
server.start() | |
.thenAccept { ws: WebServer -> | |
println( | |
"WEB server is up! http://localhost:" + ws.port() + "/greet" | |
) | |
ws.whenShutdown().thenRun { println("WEB server is DOWN. Good bye!") } | |
} | |
.exceptionally { t: Throwable -> | |
System.err.println("Startup failed: " + t.message) | |
t.printStackTrace(System.err) | |
null | |
} | |
// Server threads are not daemon. No need to block. Just react. | |
return server | |
} | |
/** | |
* Creates new [Routing]. | |
* | |
* @return routing configured with JSON support, a health check, and a service | |
* @param config configuration of this server | |
*/ | |
private fun createRouting(config: Config): Routing { | |
val metrics = MetricsSupport.create() | |
val greetService = GreetService(config) | |
val health = healthSupport { | |
addLiveness(*HealthChecks.healthChecks()) | |
} | |
return routing { | |
register(health) // Health at "/health" | |
register(metrics) // Metrics at "/metrics" | |
register("/greet", greetService) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment