fix: NCS-85 Database Writeback fails without Logs
Build & Test (NowChessSystems) TeamCity build failed
Build & Test (NowChessSystems) TeamCity build failed
This commit is contained in:
+12
-3
@@ -7,8 +7,9 @@ import io.quarkus.redis.datasource.RedisDataSource
|
|||||||
import jakarta.annotation.PostConstruct
|
import jakarta.annotation.PostConstruct
|
||||||
import jakarta.enterprise.context.ApplicationScoped
|
import jakarta.enterprise.context.ApplicationScoped
|
||||||
import jakarta.inject.Inject
|
import jakarta.inject.Inject
|
||||||
|
import org.jboss.logging.Logger
|
||||||
import scala.compiletime.uninitialized
|
import scala.compiletime.uninitialized
|
||||||
import scala.util.Try
|
import scala.util.{Failure, Success, Try}
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
@@ -20,10 +21,18 @@ class GameWritebackStreamListener:
|
|||||||
@Inject var writebackService: GameWritebackService = uninitialized
|
@Inject var writebackService: GameWritebackService = uninitialized
|
||||||
// scalafix:on
|
// scalafix:on
|
||||||
|
|
||||||
|
private val log = Logger.getLogger(classOf[GameWritebackStreamListener])
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
def startListening(): Unit =
|
def startListening(): Unit =
|
||||||
val handler: Consumer[String] = json =>
|
val handler: Consumer[String] = json =>
|
||||||
Try(objectMapper.readValue(json, classOf[GameWritebackEventDto])).toOption
|
Try(objectMapper.readValue(json, classOf[GameWritebackEventDto])) match
|
||||||
.foreach(writebackService.writeBack)
|
case Failure(ex) =>
|
||||||
|
log.errorf(ex, "Failed to parse game-writeback event: %s", json)
|
||||||
|
case Success(event) =>
|
||||||
|
Try(writebackService.writeBack(event)) match
|
||||||
|
case Failure(ex) =>
|
||||||
|
log.errorf(ex, "Failed to write back game event for gameId=%s", event.gameId)
|
||||||
|
case Success(_) => ()
|
||||||
redis.pubsub(classOf[String]).subscribe("game-writeback", handler)
|
redis.pubsub(classOf[String]).subscribe("game-writeback", handler)
|
||||||
()
|
()
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import jakarta.annotation.PostConstruct
|
|||||||
import jakarta.enterprise.context.ApplicationScoped
|
import jakarta.enterprise.context.ApplicationScoped
|
||||||
import jakarta.inject.Inject
|
import jakarta.inject.Inject
|
||||||
import jakarta.transaction.Transactional
|
import jakarta.transaction.Transactional
|
||||||
|
import org.jboss.logging.Logger
|
||||||
|
|
||||||
import scala.compiletime.uninitialized
|
import scala.compiletime.uninitialized
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
@@ -15,6 +16,8 @@ import java.time.Instant
|
|||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
class GameWritebackService:
|
class GameWritebackService:
|
||||||
|
|
||||||
|
private val log = Logger.getLogger(classOf[GameWritebackService])
|
||||||
|
|
||||||
// scalafix:off DisableSyntax.var
|
// scalafix:off DisableSyntax.var
|
||||||
@Inject
|
@Inject
|
||||||
var repository: GameRecordRepository = uninitialized
|
var repository: GameRecordRepository = uninitialized
|
||||||
@@ -46,12 +49,15 @@ class GameWritebackService:
|
|||||||
private def doWriteBack(event: GameWritebackEventDto): Unit =
|
private def doWriteBack(event: GameWritebackEventDto): Unit =
|
||||||
repository.findByGameId(event.gameId) match
|
repository.findByGameId(event.gameId) match
|
||||||
case None =>
|
case None =>
|
||||||
|
log.infof("Creating game record for gameId=%s", event.gameId)
|
||||||
createRecord(event)
|
createRecord(event)
|
||||||
gamesWrittenCounter("create").increment()
|
gamesWrittenCounter("create").increment()
|
||||||
case Some(r) if event.moveCount > r.moveCount || event.pgn != r.pgn =>
|
case Some(r) if event.moveCount > r.moveCount || event.pgn != r.pgn =>
|
||||||
|
log.infof("Updating game record for gameId=%s moveCount=%d", event.gameId, event.moveCount)
|
||||||
updateRecord(r, event)
|
updateRecord(r, event)
|
||||||
gamesWrittenCounter("update").increment()
|
gamesWrittenCounter("update").increment()
|
||||||
case _ =>
|
case _ =>
|
||||||
|
log.debugf("Skipping writeback for gameId=%s (no change)", event.gameId)
|
||||||
writebackSkipped.increment()
|
writebackSkipped.increment()
|
||||||
|
|
||||||
private def createRecord(event: GameWritebackEventDto): Unit =
|
private def createRecord(event: GameWritebackEventDto): Unit =
|
||||||
|
|||||||
Reference in New Issue
Block a user