def housekeeping()

in imageCopier/src/main/scala/com/gu/imageCopier/LambdaEntrypoint.scala [52:94]


  def housekeeping(input: SNSEvent, context: Context): Unit = {
    println("Running AMIgo housekeeper")
    val messages = SNSMessage.fromLambdaEvent(input)
    println(s"Got messages: $messages")
    val deleteAttempt = Attempt.traverseWithFailures(messages) { message =>
      for {
        deleteEvent <- DeleteEvent.fromJsonString(message.content)
        localAmis = deleteEvent.amis.filter(
          _.account == configuration.ownAccountNumber
        )
        actualAmisAndSnapshots <- AmiActions.getImagesAndEbsSnapshots(localAmis)
        deletedAmis <- Attempt.traverseWithFailures(actualAmisAndSnapshots) {
          case (ami, _) => AmiActions.deregisterAmi(ami)
        }
        actualSnapshots = actualAmisAndSnapshots.flatMap {
          case (_, snapshots) => snapshots
        }
        deletedSnapshots <- Attempt.traverseWithFailures(actualSnapshots) {
          snapshot => AmiActions.deleteSnapshot(snapshot)
        }
      } yield (deletedAmis, deletedSnapshots)
    }
    val amis = Await.result(deleteAttempt.asFuture, Duration.Inf)

    val allFailures = Failure.collect(List(amis)) { successfulAmis =>
      Failure.collect(successfulAmis) { case (deletedAmis, deletedSnapshots) =>
        Failure.collect(deletedAmis)(_ => Nil) ::: Failure.collect(
          deletedSnapshots
        )(_ => Nil)
      }
    }

    if (allFailures.nonEmpty) {
      println(s"Failures")
      allFailures.foreach { failure =>
        println(
          s"${failure.msg} ${failure.cause.map(_.getStackTrace.mkString(" "))}"
        )
      }
    }

    println(s"Completed: $amis")
  }