Skip to content

Commit

Permalink
#63 Add logging
Browse files Browse the repository at this point in the history
  • Loading branch information
vityaman committed May 17, 2024
1 parent f2621d3 commit 0193e7d
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.vityaman.lms.botalka.core.publication

import ru.vityaman.lms.botalka.core.logging.Log

fun loggingPublicationCallbacks(log: Log) =
PublicationTask.Callbacks(
onStart = { log.info("Starting...") },
onReceived = { log.info("Received ${it.size} homeworks") },
onNext = { log.info("Publishing homework with id ${it.id}...") },
onAccepted = { log.info("Published homework with id ${it.id}") },
onRejected = { log.info("Failed to publish homework with id ${it.id}") },
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.vityaman.lms.botalka.core.publication

import ru.vityaman.lms.botalka.core.logging.Log
import ru.vityaman.lms.botalka.core.model.Homework

class LoggingPublicationConsumer(
private val log: Log,
) : PublicationConsumer {
override suspend fun accept(homework: Homework) {
log.warn("Published $homework")
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ru.vityaman.lms.botalka.core.publication

import ru.vityaman.lms.botalka.core.model.Homework
import java.util.function.Consumer

interface PublicationConsumer : Consumer<Homework>
interface PublicationConsumer {
suspend fun accept(homework: Homework)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ru.vityaman.lms.botalka.core.publication

import kotlinx.coroutines.flow.toCollection
import ru.vityaman.lms.botalka.core.model.Homework
import ru.vityaman.lms.botalka.core.storage.HomeworkStorage
import ru.vityaman.lms.botalka.core.tx.TxEnv
import java.time.Clock
Expand All @@ -11,18 +12,34 @@ class PublicationTask(
private val homeworks: HomeworkStorage,
private val txEnv: TxEnv,
private val clock: Clock,
private val callbacks: Callbacks = Callbacks(),
) : Runnable {
override suspend fun run() =
override suspend fun run() {
callbacks.onStart()
homeworks.publishableAt(OffsetDateTime.now(clock))
.toCollection(mutableListOf())
.shuffled()
.also { callbacks.onReceived(it) }
.forEach { id ->
txEnv.transactional {
val homework = homeworks.acquireById(id)
callbacks.onNext(homework)
if (!homework.isPublished) {
consumer.accept(homework)
runCatching { consumer.accept(homework) }
.onSuccess { callbacks.onAccepted(homework) }
.onFailure { callbacks.onRejected(homework) }
.getOrThrow()
homeworks.markPublished(homework.id)
}
}
}
}

data class Callbacks(
val onStart: suspend () -> Unit = {},
val onReceived: suspend (List<Homework.Id>) -> Unit = {},
val onNext: suspend (Homework) -> Unit = {},
val onAccepted: suspend (Homework) -> Unit = {},
val onRejected: suspend (Homework) -> Unit = {},
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import ru.vityaman.lms.botalka.app.spring.BotalkaTestSuite
import ru.vityaman.lms.botalka.app.spring.env.FakeClock
import ru.vityaman.lms.botalka.core.logging.Slf4jLog
import ru.vityaman.lms.botalka.core.model.Homework
import ru.vityaman.lms.botalka.core.publication.PublicationConsumer
import ru.vityaman.lms.botalka.core.publication.PublicationTask
import ru.vityaman.lms.botalka.core.publication.loggingPublicationCallbacks
import ru.vityaman.lms.botalka.core.storage.HomeworkStorage
import ru.vityaman.lms.botalka.core.tx.TxEnv
import java.time.OffsetDateTime
Expand Down Expand Up @@ -65,13 +67,16 @@ class PublicationTest(
val list = mutableSetOf<String>()
PublicationTask(
consumer = object : PublicationConsumer {
override fun accept(homework: Homework) {
override suspend fun accept(homework: Homework) {
list.add(homework.title.text)
}
},
homeworks = homeworks,
txEnv = txEnv,
clock = clock,
callbacks = loggingPublicationCallbacks(
Slf4jLog("Testing publisher"),
),
).run()
return list
}
Expand Down

0 comments on commit 0193e7d

Please sign in to comment.