def ssaInstanceAMIs()

in app/controllers/AMIable.scala [80:122]


  def ssaInstanceAMIs(
      stackOpt: Option[String],
      stageOpt: Option[String],
      appOpt: Option[String],
      accountNameOpt: Option[String]
  ): Action[AnyContent] = authAction.async { implicit request =>
    val ssaa = SSAA.fromParams(stackOpt, stageOpt, appOpt, accountNameOpt)
    attempt {
      for {
        instancesWithAmis <- Prism.instancesWithAmis(ssaa)
        accounts <- Prism.getAccounts
        instances = instancesWithAmis.map(_._1)
        amis = instancesWithAmis.flatMap(_._2).distinct
        amisWithUpgrades = amis.map(
          Recommendations.amiWithUpgrade(agents.allAmis)
        )
        amisWithInstances = PrismLogic.amiInstances(amisWithUpgrades, instances)
        oldInstances = PrismLogic.oldInstances(instancesWithAmis)
        amiSSAs = PrismLogic.amiSSAAs(amisWithInstances)
        metrics = Metrics(
          oldInstancesCount = oldInstances.length,
          totalInstancesCount = instances.length,
          PrismLogic.instancesAmisAgePercentiles(instancesWithAmis)
        )
        allSSAs = ssaa :: PrismLogic.instanceSSAAs(instances)
        instancesCount = PrismLogic.instancesCountPerSsaPerAmi(
          amisWithInstances,
          allSSAs
        )
        accountNames = accounts.map(_.accountName)
      } yield Ok(
        views.html.instanceAMIs(
          ssaa,
          metrics,
          amisWithUpgrades.sortBy(_.creationDate.map(_.getMillis)),
          PrismLogic.sortSSAAmisByAge(amiSSAs),
          instancesCount,
          accountNames,
          conf
        )
      )
    }
  }