app/lib/librato/LibratoApiClient.scala (33 lines of code) (raw):
package lib.librato
import com.madgag.okhttpscala._
import io.lemonlabs.uri.Uri
import com.typesafe.scalalogging.LazyLogging
import lib.librato.model.Annotation
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 LibratoApiClient(username: String, token: String) extends LazyLogging {
val okHttpClient = new OkHttpClient
val baseEndpoint = Uri.parse("https://metrics-api.librato.com/v1")
val JsonMediaType = MediaType.parse("application/json")
def createAnnotation(name: String, annotation: Annotation): Future[_] = {
val request = new Builder().url(s"$baseEndpoint/annotations/$name")
.header("Authorization", Credentials.basic(username, token))
.post(RequestBody.create(JsonMediaType, stringify(toJson(annotation))))
.build()
val responseF = okHttpClient.execute(request)(resp => logger.info(resp.body().string()))
responseF.onComplete {
tr => logger.info("Response from Librato: " + tr)
}
responseF
}
}
object LibratoApiClient {
def instanceOptFrom(config: Configuration): Option[LibratoApiClient] = for {
userId <- config.getOptional[String]("librato.userId")
token <- config.getOptional[String]("librato.token")
} yield new LibratoApiClient(userId,token)
}