def statistic()

in app/model/ELB.scala [25:62]


  def statistic(lbName: String)(metricName: String, statistics: Statistic*)(implicit conn: AmazonConnection) =
    AWS.futureOf(conn.cloudWatch.getMetricStatisticsAsync, new GetMetricStatisticsRequest()
      .withDimensions(new Dimension().withName("LoadBalancerName").withValue(lbName))
      .withMetricName(metricName).withNamespace("AWS/ELB").withPeriod(60)
      .withStatistics(statistics: _*)
      .withStartTime(timeSpan(DateTime.now()).toDate).withEndTime(DateTime.now().toDate)
    )

  def latency(lbName: String)(implicit conn: AmazonConnection) =
    statistic(lbName)("Latency", Average, Maximum)

  def requestCount(lbName: String)(implicit conn: AmazonConnection) =
    statistic(lbName)("RequestCount", Sum)

  def errorCount(lbName: String)(implicit conn: AmazonConnection) =
    statistic(lbName)("HTTPCode_Backend_5XX", Sum)

  def forName(lbName: String)(implicit conn: AmazonConnection): Future[ELB] = for {
    elbHealths <- AWS.futureOf(conn.elb.describeInstanceHealthAsync, new DescribeInstanceHealthRequest(lbName))
    latency <- latency(lbName)
    requestCount <- requestCount(lbName)
    errorCount <- errorCount(lbName)
  } yield {
    val members = elbHealths.getInstanceStates.asScala.toList.map(i => ELBMember(
      i.getInstanceId, i.getState,
      Option(i.getDescription).filter(_ != "N/A"),
      Option(i.getReasonCode).filter(_ != "N/A")
    ))
    val active = requestCount.getDatapoints.asScala.nonEmpty && requestCount.getDatapoints.asScala.map(_.getSum).max > 10
    val latencyInMs = latency.getDatapoints.asScala.toSeq.sortBy(_.getTimestamp).map(p =>
      new Datapoint().withTimestamp(p.getTimestamp).withAverage(p.getAverage * 1000)
    )

    val start = extremeTime(latencyInMs)(_.minBy(_.getTimestamp))
    val end = extremeTime(latencyInMs)(_.maxBy(_.getTimestamp))

    ELB(lbName, members, latencyInMs, zeroFillPerMinute(start, end)(errorCount.getDatapoints.asScala.toSeq), active)
  }