Datadog API client for Scala.
Add the dependency.
- build.sbt
libraryDependencies += "dev.nomadblacky" %% "scaladog" % "0.5.3"
- or Ammonite
import $ivy.`dev.nomadblacky::scaladog:0.5.3`
Set API key and Application key
- from environment variables
export DATADOG_API_KEY=<your api key>
export DATADOG_APP_KEY=<your application key>
export DATADOG_SITE=<your site> # Optional, "US" or "EU", default is "US"
val client = scaladog.Client()
- or manually
val client = scaladog.Client("<your api key>", "<your application key>", scaladog.api.DatadogSite.US)
- Service Checks
- Comments
- Dashboards
- Dashboard Lists
- Downtimes
- Embeddable graphs
- Events
- Graphs
- Hosts
- Integration AWS
- Integration Azure
- Integration GCP
- Integration PagerDuty
- Integration Slack
- Integration Webhooks
- Key Management
- Logs
- Logs Indexes
- Metrics
-
GET /v1/metrics
-
POST /v1/series
-
GET /v1/query
-
GET /v1/metrics/<METRIC_NAME>
-
PUT /v1/metrics/<METRIC_NAME>
-
GET /v1/search
-
- Monitors
- Organizations
- Screenboards
- Synthetics
- Tags
- Timeboards
- Tracing
- Usage metering
- Users
import scaladog.api.service_checks.ServiceCheckStatus
import java.time.Instant
val client = scaladog.Client()
val response = client.serviceCheck.postStatus(
check = "app.is_ok",
hostName = "app1",
status = ServiceCheckStatus.OK,
timestamp = Instant.now(),
message = "The application is healthy.",
tags = Seq("env:prod")
)
assert(response.isOk)
import java.time._, temporal._
val client = scaladog.Client()
val from = Instant.now().minus(1, ChronoUnit.DAYS)
val host = "myhost"
val response = client.metrics.getMetrics(from, host)
println(response) // GetMetricsResponse(List(test.metric),2019-07-30T15:22:39Z,Some(myhost))
import scaladog.api.metrics._
import java.time.Instant
import scala.util.Random
val response = scaladog.Client().metrics.postMetrics(
Seq(
Series(
metric = "test.metric",
points = Seq(Point(Instant.now(), Random.nextInt(1000))),
host = "myhost",
tags = Seq("project:scaladog"),
MetricType.Gauge
)
)
)
assert(response.isOk)
// If you want to send a single metric, you can write more simply.
scaladog.Client().metrics.postSingleMetric("test.metric", 12.34)
import scaladog.api.events._
import java.time.Instant
val response = scaladog.Client().events.postEvent(
title = "TEST EVENT",
text = "This is a test event.",
dateHappened = Instant.now(),
priority = Priority.Low,
tags = Seq("project:scaladog"),
alertType = AlertType.Info
)
assert(response.isOk)
import scaladog.api.events._
import java.time.Instant
val event = scaladog.Client().events.getEvent(1234567890123456789L)
assert(event.id == 1234567890123456789L)
assert(event.title == "TEST EVENT")
assert(event.text == "This is a test event.")
assert(event.tags == Seq("project:scaladog"))
import scaladog.api.events._
import java.time._, temporal._
val now = Instant.now()
val events = scaladog.Client().events.query(start = now.minus(1, ChronoUnit.DAYS), end = now)
import java.time._, temporal._
val now = Instant.now()
val url = scaladog.Client().graphs.snapshot(
metricQuery = "avg:datadog.estimated_usage.hosts{*}",
start = now.minus(7, ChronoUnit.DAYS),
end = now,
title = getClass.getSimpleName
)
assert(url.toString startsWith "https://p.datadoghq.com/snapshot/view/dd-snapshots-prod/")