app/lib/sentry/SentryApiClient.scala (34 lines of code) (raw):
package lib.sentry
import com.madgag.okhttpscala._
import io.lemonlabs.uri.Uri
import com.typesafe.scalalogging.LazyLogging
import lib.librato.LibratoApiClient
import lib.sentry.model.CreateRelease
import okhttp3.Request.Builder
import okhttp3._
import play.api.Configuration
import play.api.libs.json.Json.{stringify, toJson}
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
class SentryApiClient(token: String , val org: String) extends LazyLogging {
val okHttpClient = new OkHttpClient
val baseEndpoint = Uri.parse("https://sentry.io/api/0/")
val JsonMediaType = MediaType.parse("application/json")
def createRelease(createReleaseCommand: CreateRelease): Future[_] = {
val request = new Builder().url(s"$baseEndpoint/organizations/$org/releases/")
.header("Authorization", s"Bearer $token")
.post(RequestBody.create(JsonMediaType, stringify(toJson(createReleaseCommand))))
.build()
val responseF = okHttpClient.execute(request)(resp => logger.info(resp.body().string()))
responseF.onComplete {
tr => logger.info("Response from Sentry: " + tr)
}
responseF
}
}
object SentryApiClient {
def instanceOptFrom(config: Configuration): Option[SentryApiClient] = for {
org <- config.getOptional[String]("sentry.org")
token <- config.getOptional[String]("sentry.token")
} yield new SentryApiClient(token,org)
}