app/models/AuditRecordDAOElastic.scala (36 lines of code) (raw):

package models import helpers.{ESClientManager, ZonedDateTimeEncoder} import io.circe.generic.auto._ import io.circe.syntax._ import javax.inject.{Inject, Singleton} import org.mongodb.scala.Completed import org.slf4j.LoggerFactory import play.api.Configuration import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global @Singleton class AuditRecordDAOElastic @Inject()(esClientManager:ESClientManager, config:Configuration) extends AuditRecordDAO with ZonedDateTimeEncoder { import com.sksamuel.elastic4s.http.ElasticDsl._ import com.sksamuel.elastic4s.circe._ private val logger = LoggerFactory.getLogger(getClass) private val esClient = esClientManager.getClient() private val indexName = config.getOptional[String]("elasticsearch.auditLogIndex").getOrElse("vaultdoor-audit") override def insert(rec: AuditRecord): Future[Option[Completed]] = esClient.execute { indexInto(indexName) doc(rec) }.map(result=>{ if(result.isError){ throw new RuntimeException(result.error.reason) //fail the Future } else { Some(Completed()) } }) override def scan(limit: Int): Future[Seq[AuditRecord]] = esClient.execute { search(indexName) query matchAllQuery() limit(limit) }.map(response=>{ if(response.isError){ throw new RuntimeException(response.error.reason) } else { response.result.to[AuditRecord] } }) }