import io.circe.generic.extras.JsonKey
import sttp.client3._
import sttp.client3.circe._
import shapeless._
import io.circe._
import io.circe.generic.semiauto._
import io.circe.generic.auto._
import io.circe.generic.extras._, io.circe.syntax._
val backend = HttpURLConnectionBackend()
def fetch(queryType: String, params: Map[String, String]) = {
basicRequest
.post(uri"https://monitoring.nixos.org/prometheus/api/v1/${queryType}?${params}")
.response(asJson[Reply])
.send(backend)
}
implicit val config: Configuration = Configuration.default.withSnakeCaseMemberNames
fetch("query", Map("query" -> "hydra_job_failed"))
case class Data (
resultType: String,
result: Seq[Result]
)
@ConfiguredJsonCodec
case class Metric (
@JsonKey("__name__")
name: String,
channel: String,
current: String,
exportedJob: String,
instance: String,
job: String,
jobset: String,
project: String
)
case class Result (
metric: Metric,
value: Seq[Double]
)
case class Reply (
status: String,
data: Data
)
// http
lazy val sttpVersion = "3.2.3"
val circeVersion = "0.13.0"
libraryDependencies ++= Seq(
"com.softwaremill.sttp.client3" %% "core" % sttpVersion,
"com.softwaremill.sttp.client3" %% "circe" % sttpVersion,
"io.circe" %% "circe-generic" % circeVersion,
"io.circe" %% "circe-generic-extras" % circeVersion,
)
scalacOptions ++= Seq("-Ymacro-annotations") // For circe-generic-extra’s @JsonCodec macro annotations