Move Elasticsearch configuration into external function "configElasticIndexes"
This commit is contained in:
@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.SerializationFeature
|
|||||||
import com.fasterxml.jackson.datatype.joda.JodaModule
|
import com.fasterxml.jackson.datatype.joda.JodaModule
|
||||||
import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
|
import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
|
||||||
import fr.dcproject.Env.PROD
|
import fr.dcproject.Env.PROD
|
||||||
|
import fr.dcproject.elasticsearch.configElasticIndexes
|
||||||
import fr.dcproject.entity.*
|
import fr.dcproject.entity.*
|
||||||
import fr.dcproject.event.EventNotification
|
import fr.dcproject.event.EventNotification
|
||||||
import fr.dcproject.event.EventSubscriber
|
import fr.dcproject.event.EventSubscriber
|
||||||
@@ -38,8 +39,6 @@ import io.ktor.routing.Routing
|
|||||||
import io.ktor.util.KtorExperimentalAPI
|
import io.ktor.util.KtorExperimentalAPI
|
||||||
import io.ktor.websocket.WebSockets
|
import io.ktor.websocket.WebSockets
|
||||||
import org.eclipse.jetty.util.log.Slf4jLog
|
import org.eclipse.jetty.util.log.Slf4jLog
|
||||||
import org.elasticsearch.client.Request
|
|
||||||
import org.elasticsearch.client.RestClient
|
|
||||||
import org.koin.core.qualifier.named
|
import org.koin.core.qualifier.named
|
||||||
import org.koin.ktor.ext.Koin
|
import org.koin.ktor.ext.Koin
|
||||||
import org.koin.ktor.ext.get
|
import org.koin.ktor.ext.get
|
||||||
@@ -192,56 +191,7 @@ fun Application.module(env: Env = PROD) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create index if not exist */
|
configElasticIndexes(get())
|
||||||
get<RestClient>().run {
|
|
||||||
if (performRequest(Request("HEAD", "/views?include_type_name=false")).statusLine.statusCode == 404) {
|
|
||||||
Request(
|
|
||||||
"PUT",
|
|
||||||
"/views?include_type_name=false"
|
|
||||||
).apply {
|
|
||||||
//language=JSON
|
|
||||||
setJsonEntity(
|
|
||||||
"""
|
|
||||||
{
|
|
||||||
"settings": {
|
|
||||||
"number_of_shards": 5
|
|
||||||
},
|
|
||||||
"mappings": {
|
|
||||||
"properties": {
|
|
||||||
"logged": {
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"type": "keyword"
|
|
||||||
},
|
|
||||||
"user_ref": {
|
|
||||||
"type": "keyword"
|
|
||||||
},
|
|
||||||
"id": {
|
|
||||||
"type": "keyword"
|
|
||||||
},
|
|
||||||
"version_id": {
|
|
||||||
"type": "keyword"
|
|
||||||
},
|
|
||||||
"ip": {
|
|
||||||
"type": "keyword"
|
|
||||||
},
|
|
||||||
"citizen_id": {
|
|
||||||
"type": "keyword"
|
|
||||||
},
|
|
||||||
"view_at": {
|
|
||||||
"type": "date"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""".trimIndent()
|
|
||||||
)
|
|
||||||
}.let {
|
|
||||||
performRequest(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
install(WebSockets) {
|
install(WebSockets) {
|
||||||
pingPeriod = Duration.ofSeconds(60) // Disabled (null) by default
|
pingPeriod = Duration.ofSeconds(60) // Disabled (null) by default
|
||||||
|
|||||||
83
src/main/kotlin/elasticsearch/Config.kt
Normal file
83
src/main/kotlin/elasticsearch/Config.kt
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
package fr.dcproject.elasticsearch
|
||||||
|
|
||||||
|
import org.elasticsearch.client.Request
|
||||||
|
import org.elasticsearch.client.RestClient
|
||||||
|
import org.slf4j.Logger
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
|
||||||
|
fun waitElasticsearchIsUp(client: RestClient) {
|
||||||
|
val logger: Logger = LoggerFactory.getLogger("fr.dcproject.elasticsearch")
|
||||||
|
val request = Request("GET", "/_cluster/health")
|
||||||
|
repeat(40) {
|
||||||
|
runCatching {
|
||||||
|
client.performRequest(request).statusLine.statusCode
|
||||||
|
}.onSuccess {
|
||||||
|
if (it == 200) {
|
||||||
|
logger.debug("Elasticsearch is Ready! Continue...")
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
logger.debug("sleep 2s and retry...")
|
||||||
|
Thread.sleep(2000)
|
||||||
|
}
|
||||||
|
}.onFailure {
|
||||||
|
logger.debug("${it.message}, sleep 2s and retry...")
|
||||||
|
Thread.sleep(2000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
error("Elasticsearch is not ready")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun configElasticIndexes(client: RestClient) {
|
||||||
|
waitElasticsearchIsUp(client)
|
||||||
|
|
||||||
|
/* Create index if not exist */
|
||||||
|
client.run {
|
||||||
|
if (performRequest(Request("HEAD", "/views?include_type_name=false")).statusLine.statusCode == 404) {
|
||||||
|
Request(
|
||||||
|
"PUT",
|
||||||
|
"/views?include_type_name=false"
|
||||||
|
).apply {
|
||||||
|
//language=JSON
|
||||||
|
setJsonEntity(
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"number_of_shards": 5
|
||||||
|
},
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"logged": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"user_ref": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"version_id": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"ip": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"citizen_id": {
|
||||||
|
"type": "keyword"
|
||||||
|
},
|
||||||
|
"view_at": {
|
||||||
|
"type": "date"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""".trimIndent()
|
||||||
|
)
|
||||||
|
}.let {
|
||||||
|
performRequest(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user