From 609a90adc2109ded78c1c937e71b123577304b6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Fri, 22 May 2020 03:40:09 +0200 Subject: [PATCH 1/5] use uuid --- src/api/model/ApiObject.kt | 3 ++- src/api/route/OutputServiceRDBServer.kt | 3 ++- src/database/dao/ResultObjects.kt | 3 ++- src/database/service/IResultObjectService.kt | 3 ++- src/database/service/ResultObjectService.kt | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/api/model/ApiObject.kt b/src/api/model/ApiObject.kt index 6fda350..322cd60 100644 --- a/src/api/model/ApiObject.kt +++ b/src/api/model/ApiObject.kt @@ -1,8 +1,9 @@ package com.kmalbz.api.model import com.google.gson.annotations.SerializedName +import java.util.* data class ApiObject( - @SerializedName("tag") val tag: String, + @SerializedName("tag") val tag: UUID, @SerializedName("probability") val probability: Double ) \ No newline at end of file diff --git a/src/api/route/OutputServiceRDBServer.kt b/src/api/route/OutputServiceRDBServer.kt index ff756bd..9ac9d69 100644 --- a/src/api/route/OutputServiceRDBServer.kt +++ b/src/api/route/OutputServiceRDBServer.kt @@ -9,6 +9,7 @@ import io.ktor.routing.get import org.koin.ktor.ext.inject import java.time.LocalDate import java.time.format.DateTimeFormatter +import java.util.* /** * Output Service - RDB @@ -63,7 +64,7 @@ class OutputServiceRDBServer { get("/output/{tagID}") { val tagID = call.parameters["tagID"] ?: error(HttpStatusCode.NotAcceptable) - val resultObject = resultObjectService.getResultObjectbyTag(tagID) ?: call.respond(HttpStatusCode.NotFound) + val resultObject = resultObjectService.getResultObjectbyTag(UUID.fromString(tagID)) ?: call.respond(HttpStatusCode.NotFound) call.respond(resultObject) } diff --git a/src/database/dao/ResultObjects.kt b/src/database/dao/ResultObjects.kt index b27397f..ae2df3b 100644 --- a/src/database/dao/ResultObjects.kt +++ b/src/database/dao/ResultObjects.kt @@ -4,9 +4,10 @@ import org.jetbrains.exposed.dao.id.IntIdTable import org.jetbrains.exposed.sql.* import org.jetbrains.exposed.sql.`java-time`.date import java.time.LocalDate +import java.util.* object ResultObjects : IntIdTable() { - val tag: Column = varchar("tag",32) + val tag: Column = uuid("tag") val date: Column = date("date").default(LocalDate.now()) val probability: Column = double("probability") override val primaryKey = PrimaryKey(id, name = "PK_ResultObject_Id") diff --git a/src/database/service/IResultObjectService.kt b/src/database/service/IResultObjectService.kt index d612f78..a59c9bc 100644 --- a/src/database/service/IResultObjectService.kt +++ b/src/database/service/IResultObjectService.kt @@ -2,11 +2,12 @@ package com.kmalbz.database.service import com.kmalbz.api.model.ApiObject import java.time.LocalDate +import java.util.* interface IResultObjectService{ fun addOne(apiObject: ApiObject) suspend fun getAllResultObjects(): List - suspend fun getResultObjectbyTag(tag: String): ApiObject? + suspend fun getResultObjectbyTag(tag: UUID): ApiObject? suspend fun getResultObjectbyDate(date: LocalDate): List? suspend fun getResultObjectbeforeDate(date: LocalDate): List? suspend fun getResultObjectafterDate(date: LocalDate): List? diff --git a/src/database/service/ResultObjectService.kt b/src/database/service/ResultObjectService.kt index 6765e67..d67bd7f 100644 --- a/src/database/service/ResultObjectService.kt +++ b/src/database/service/ResultObjectService.kt @@ -9,6 +9,7 @@ import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.selectAll import org.jetbrains.exposed.sql.transactions.transaction import java.time.LocalDate +import java.util.* class ResultObjectService : IResultObjectService { @@ -26,7 +27,7 @@ class ResultObjectService : IResultObjectService { ResultObjects.selectAll().map { toResultObject(it) } } - override suspend fun getResultObjectbyTag(tag: String): ApiObject? = dbQuery { + override suspend fun getResultObjectbyTag(tag: UUID): ApiObject? = dbQuery { ResultObjects.select { (ResultObjects.tag eq tag) }.mapNotNull { toResultObject(it) } -- 2.40.1 From 0e5f4e593f22d87d8790158e3df7ee0938754192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Fri, 22 May 2020 03:41:40 +0200 Subject: [PATCH 2/5] remove cache --- .drone.yml | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/.drone.yml b/.drone.yml index ae38f00..6d08f4a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,42 +3,11 @@ type: docker name: default steps: -- name: restore-cache-with-filesystem - image: meltwater/drone-cache - settings: - backend: "filesystem" - restore: true - cache_key: "{{ .Repo.Name }}" - archive_format: "gzip" - filesystem_cache_root: "/tmp/cache" - mount: - - 'build' - - '.gradle' - volumes: - - name: cache - path: /tmp/cache - - name: build_application image: openjdk:11-jdk commands: - ./gradlew build -x test -- name: rebuild-cache-with-filesystem - image: meltwater/drone-cache:dev - pull: true - settings: - backend: "filesystem" - rebuild: true - cache_key: "{{ .Repo.Name }}" - archive_format: "gzip" - filesystem_cache_root: "/tmp/cache" - mount: - - 'build' - - '.gradle' - volumes: - - name: cache - path: /tmp/cache - - name: kaniko image: banzaicloud/drone-kaniko settings: @@ -51,16 +20,3 @@ steps: tags: - latest - ${DRONE_BUILD_NUMBER} - -- name: ms-teams - image: kuperiu/drone-teams - settings: - webhook: - from_secret: TEAMS_WEBHOOK - when: - status: [ failure ] - -volumes: -- name: cache - host: - path: "/tmp/cache" -- 2.40.1 From 495ebae5f93df6d466acb39badce75bd17acc46f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Fri, 22 May 2020 04:29:58 +0200 Subject: [PATCH 3/5] use a consumer to interact with db --- src/Application.kt | 23 ++------------------- src/consumer/DatabaseConsumer.kt | 35 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 src/consumer/DatabaseConsumer.kt diff --git a/src/Application.kt b/src/Application.kt index 832b98a..06293d2 100644 --- a/src/Application.kt +++ b/src/Application.kt @@ -1,8 +1,7 @@ package com.kmalbz -import com.google.gson.Gson -import com.kmalbz.api.model.ApiObject import com.kmalbz.api.route.OutputServiceRDBServer +import com.kmalbz.consumer.DatabaseConsumer import io.ktor.application.* import io.ktor.response.* import io.ktor.routing.* @@ -12,15 +11,10 @@ import io.ktor.features.* import org.apache.http.HttpException import com.kmalbz.database.DatabaseFactory import com.kmalbz.database.dao.ResultObjects -import com.kmalbz.database.service.ResultObjectService import io.ktor.util.KtorExperimentalAPI import com.rabbitmq.client.* import com.typesafe.config.ConfigFactory import io.ktor.config.HoconApplicationConfig -import com.viartemev.thewhiterabbit.channel.* -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.launch import org.jetbrains.exposed.sql.SchemaUtils import org.jetbrains.exposed.sql.transactions.transaction import org.koin.ktor.ext.Koin @@ -60,20 +54,7 @@ fun Application.module() { val queueName = channel.queueDeclare().queue channel.queueBind(queueName, rabbitExchangeName, "") - GlobalScope.launch(Dispatchers.Default) { - connection.channel { - consume(queueName) { - consumeMessageWithConfirm({ - val resultObjectService = ResultObjectService() - val rawJson = String(it.body) - val gson = Gson() - val apiObject = gson.fromJson(rawJson,ApiObject::class.java) - - resultObjectService.addOne(apiObject) - }) - } - } - } + channel.basicConsume(rabbitExchangeName, true, DatabaseConsumer()) routing { install(StatusPages) { diff --git a/src/consumer/DatabaseConsumer.kt b/src/consumer/DatabaseConsumer.kt new file mode 100644 index 0000000..7ac76da --- /dev/null +++ b/src/consumer/DatabaseConsumer.kt @@ -0,0 +1,35 @@ +package com.kmalbz.consumer + +import com.google.gson.Gson +import com.kmalbz.api.model.ApiObject +import com.kmalbz.database.service.ResultObjectService +import com.rabbitmq.client.AMQP.BasicProperties +import com.rabbitmq.client.Consumer +import com.rabbitmq.client.Envelope +import com.rabbitmq.client.ShutdownSignalException + +class DatabaseConsumer : Consumer { + val resultObjectService = ResultObjectService() + + val gson = Gson() + override fun handleConsumeOk(consumerTag : String?) { + } + override fun handleCancelOk(p0 : String?) { + throw UnsupportedOperationException() + } + override fun handleRecoverOk(p0 : String?) { + throw UnsupportedOperationException() + } + override fun handleCancel(p0 : String?) { + throw UnsupportedOperationException() + } + override fun handleDelivery(consumerTag : String?, envelope : Envelope?, basicProperties : BasicProperties?, body : ByteArray?) { + val rawJson = body.toString() + val apiObject = gson.fromJson(rawJson, ApiObject::class.java) + + resultObjectService.addOne(apiObject) + } + override fun handleShutdownSignal(p0 : String?, p1 : ShutdownSignalException?) { + println("got shutdown signal") + } +} \ No newline at end of file -- 2.40.1 From 9074619914ac711a732d26823a9c3e161580ed15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Fri, 22 May 2020 04:34:16 +0200 Subject: [PATCH 4/5] queue name --- src/Application.kt | 2 +- src/consumer/DatabaseConsumer.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Application.kt b/src/Application.kt index 06293d2..bc4f6e8 100644 --- a/src/Application.kt +++ b/src/Application.kt @@ -54,7 +54,7 @@ fun Application.module() { val queueName = channel.queueDeclare().queue channel.queueBind(queueName, rabbitExchangeName, "") - channel.basicConsume(rabbitExchangeName, true, DatabaseConsumer()) + channel.basicConsume(queueName, true, DatabaseConsumer()) routing { install(StatusPages) { diff --git a/src/consumer/DatabaseConsumer.kt b/src/consumer/DatabaseConsumer.kt index 7ac76da..3b446a2 100644 --- a/src/consumer/DatabaseConsumer.kt +++ b/src/consumer/DatabaseConsumer.kt @@ -9,9 +9,9 @@ import com.rabbitmq.client.Envelope import com.rabbitmq.client.ShutdownSignalException class DatabaseConsumer : Consumer { - val resultObjectService = ResultObjectService() + private val resultObjectService = ResultObjectService() - val gson = Gson() + private val gson = Gson() override fun handleConsumeOk(consumerTag : String?) { } override fun handleCancelOk(p0 : String?) { -- 2.40.1 From 597c0a24db1140b97c3e93043a382a07d9f6b52f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torma=20Krist=C3=B3f?= Date: Fri, 22 May 2020 04:45:32 +0200 Subject: [PATCH 5/5] charset utf8 --- src/consumer/DatabaseConsumer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/consumer/DatabaseConsumer.kt b/src/consumer/DatabaseConsumer.kt index 3b446a2..ea5b670 100644 --- a/src/consumer/DatabaseConsumer.kt +++ b/src/consumer/DatabaseConsumer.kt @@ -24,7 +24,7 @@ class DatabaseConsumer : Consumer { throw UnsupportedOperationException() } override fun handleDelivery(consumerTag : String?, envelope : Envelope?, basicProperties : BasicProperties?, body : ByteArray?) { - val rawJson = body.toString() + val rawJson = body!!.toString(Charsets.UTF_8) val apiObject = gson.fromJson(rawJson, ApiObject::class.java) resultObjectService.addOne(apiObject) -- 2.40.1