Background Task failing

Hey, I have simple track plays stats service:

@Singleton
class StatsService @Inject()(
    val dbConfigProvider: DatabaseConfigProvider,
    trackStatsRep: TrackStatsRep,
    producerService: ProducerService,
    tracksRep: TracksRep,
    implicit val configuration: Configuration
) {

  val dbConfig = dbConfigProvider.get[JdbcProfile]

  val db = dbConfig.db

  val trackPlaysBuffer: TrieMap[Long, Seq[TrackPlayStats]] = TrieMap.empty

  def trackPlay(stats: TrackPlayStats) = {
    if (!trackPlaysBuffer
          .getOrElse(stats.trackId, Seq())
          .filter(_.ip == stats.ip)
          .exists(_.date.isAfter(DateTime.now().minusMinutes(3)))) {
      trackPlaysBuffer.put(
        stats.trackId,
        trackPlaysBuffer.getOrElse(stats.trackId, Seq()) :+ stats
      )
    }
  }

  def updateTrackPlaysDb() = {
    val trackIds = trackPlaysBuffer.keySet.toSeq
    Future.sequence(trackIds.map(trackId => {
      val currentStatsF = db.run(
        trackStatsRep.stats
          .filter(_.trackId === trackId)
          .filter(_.statsType === TrackStats.STATS_TYPE_PLAY)
          .filter(col => col.date > DateTime.now().withTimeAtStartOfDay())
          .result
          .headOption
      )
      val trackF = producerService.retrieveTrack(trackId)
      currentStatsF.flatMap(currentStats => {
        trackF.map(track => {
          currentStats match {
            case Some(trackStats) => {
              db.run(
                trackStatsRep.update(
                  trackStats
                    .copy(amount = trackStats.amount + getTrackPlays(trackId))
                )
              )
            }
            case _ => {
              db.run(
                trackStatsRep.insert(
                  TrackStats(
                    0L,
                    trackId,
                    track.map(_.userId).getOrElse(0L),
                    TrackStats.STATS_TYPE_PLAY,
                    getTrackPlays(trackId),
                    None
                  )
                )
              )
            }
          }
        })
      })
    }))
  }

  def getTrackPlays(trackId: Long) = {
    trackPlaysBuffer.getOrElse(trackId, Seq()).length
  }

  def flushBuffer() = {
    trackPlaysBuffer.clear()
  }

}

So if user played track on website, stats are written to Map first, and each 5 mins I have a background task job collecting everything and writing it to MySQL database:

class CheckStats @Inject() (actorSystem: ActorSystem,
                            statsService: StatsService,
                            executor: TasksCustomExecutionContext
                           )(implicit executionContext: ExecutionContext) {
	
	actorSystem.scheduler.schedule(initialDelay = 20.seconds, interval = 5.minute) {
		Logger.info("Start updating stats")
		Logger.info("Stats keys size: " + statsService.trackPlaysBuffer.keySet.size)
		val updateF = statsService.updateTrackPlaysDb()
		Await.result(updateF, Duration.Inf)
		Logger.info("Finished stats")
		statsService.flushBuffer()
	}(executor)
}

It works fine for like 1-2 days but then it seems task dies and it doesn’t update database stats records

All tasks work in custom execution context:

class TasksCustomExecutionContext @Inject() (actorSystem: ActorSystem)
  extends CustomExecutionContext(actorSystem, "tasks-dispatcher")

what might go wrong here?