app/housekeeping/BakeDeletion.scala (42 lines of code) (raw):

package housekeeping import data.{BakeLogs, Bakes, Dynamo} import models.BakeId import notification.NotificationSender import org.quartz.SimpleScheduleBuilder import prism.RecipeUsage import services.{Loggable, PrismData} /* This class deletes bakes that have been marked deleted */ class BakeDeletion( dynamo: Dynamo, amigoAwsAccount: String, prismAgents: PrismData, notificationSender: NotificationSender, frequencyMinutes: Int ) extends HousekeepingJob with Loggable { implicit private val implDynamo: Dynamo = dynamo implicit private val implPrismAgents: PrismData = prismAgents override val schedule = SimpleScheduleBuilder.repeatMinutelyForever(frequencyMinutes) def housekeep(): Unit = { log.info(s"Started bake deletion housekeeping") // get some bakes that have been deleted try { val deletedBakes = Bakes.findDeleted() if (deletedBakes.nonEmpty) { log.info(s"Found ${deletedBakes.size} bakes to delete") } // delete any AMIs val amis = deletedBakes.flatMap(_.amiId) val allAmis = RecipeUsage.allAmis(amis, amigoAwsAccount) notificationSender.sendHousekeepingTopicMessage(allAmis) // delete the logs and bakes deletedBakes.foreach { bake => val bakeId = BakeId(bake.recipeId, bake.buildNumber) log.info(s"Deleting $bakeId") BakeLogs.delete(bakeId) Bakes.deleteById(bakeId) // avoid overwhelming the DB by pausing briefly before the next one Thread.sleep(2000) } } catch { case e: Exception => log.error(s"Error raised during bake deletion housekeeping", e) } } }