app/model/ASGMember.scala (25 lines of code) (raw):
package model
import com.amazonaws.services.autoscaling.model.{Instance => AwsAsgInstance, _}
import com.google.common.base.Ascii
import play.api.libs.json.Json
case class ASGMember(id: String, truncatedId: String, description: Option[String], uptime: String, version: Option[String],
state: Option[String], lifecycleState: Option[String], goodorbad: String, instance: Instance)
object ASGMember {
implicit val memberWrites = Json.writes[ASGMember]
def from(instance: Instance, asgInfo: Option[AwsAsgInstance], elbInfo: Option[ELBMember]): ASGMember = {
def healthStatus = asgInfo.map(_.getHealthStatus)
def lifecycleState = asgInfo.map(_.getLifecycleState)
def lbState = elbInfo.map(_.state)
def description = elbInfo.flatMap(_.description)
def instanteState = instance.state
def goodorbad = (healthStatus, lifecycleState, lbState, instanteState) match {
case (_, Some("Pending"), _, _) | (_, Some("Terminating"), _, _) => "pending"
case (Some("Healthy"), Some("InService"), Some("InService"), _) => "success"
case (Some("Healthy"), Some("InService"), None, _) => "success"
case (None, None, None, "running") => "success"
case _ => "danger"
}
val truncatedId: String = Ascii.truncate(instance.id, 9, "…")
ASGMember(instance.id, truncatedId, description, instance.uptime, instance.version, lbState, lifecycleState, goodorbad, instance)
}
}