app/model/Queue.scala (19 lines of code) (raw):
package model
import scala.concurrent.{ExecutionContext, Future}
import lib.{AWS, AmazonConnection}
import com.amazonaws.services.cloudwatch.model.{Datapoint, Dimension, GetMetricStatisticsRequest}
import org.joda.time.DateTime
import scala.jdk.CollectionConverters._
case class Queue(name: String, url: String, approxQueueLength: Seq[Datapoint])
object Queue {
def from(url: String)(implicit conn: AmazonConnection, context: ExecutionContext): Future[Queue] = {
val name = url.split("/").last
for{
stats <- AWS.futureOf(conn.cloudWatch.getMetricStatisticsAsync, new GetMetricStatisticsRequest()
.withDimensions(new Dimension().withName("QueueName").withValue(name))
.withMetricName("ApproximateNumberOfMessagesVisible").withNamespace("AWS/SQS").withPeriod(60).withStatistics("Average")
.withStartTime(DateTime.now().minusHours(3).toDate).withEndTime(DateTime.now().toDate)
)
} yield Queue(name, url, stats.getDatapoints.asScala.toSeq.sortBy(_.getTimestamp))
}
}