Skip to content

fthomas/status-page

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1e8111a · Jun 16, 2024
Jan 14, 2024
Feb 9, 2023
May 29, 2024
Apr 4, 2021
Aug 9, 2018
Dec 21, 2023
May 20, 2021
Jun 16, 2024
Aug 9, 2018
Feb 9, 2023
May 17, 2024

Repository files navigation

status-page

Continuous Integration codecov Scaladex Scaladoc

status-page is a microlibrary for creating simple status pages. It provides data structures and functions to organize, aggregate, and render status information in a straightforward way.

Quick example

import cats.effect.IO
import eu.timepit.statuspage.cats.Make
import eu.timepit.statuspage.core.Result.{Ok, Warning}
import eu.timepit.statuspage.core.plaintext

// We use `IO` values for status checks, but the library supports any
// type that is an `ApplicativeError`.
val uptime: IO[String] = IO("up 2 weeks, 3 days, 13 hours, 27 minutes")
val dbQuery: IO[Unit] = IO(())
val dbItems: IO[Int] = IO(38)
val sparkNode1: IO[Unit] = IO(())
val sparkNode2: IO[Unit] = IO.raiseError(new Exception("unreachable"))
val mk = new Make[IO, Throwable](_.getMessage)
// mk: eu.timepit.statuspage.cats.Make[cats.effect.IO,Throwable] = eu.timepit.statuspage.cats.Make@12af9bd3

val root = mk.root(
  mk.entryInfo("uptime", uptime),
  mk.group(
    "database",
    mk.entryOk("query", dbQuery),
    mk.entry("items", dbItems)(i => if (i > 50) Ok else Warning.withMsg(i.toString))
  ),
  mk.group(
    "spark_cluster",
    mk.entryOk("node1", sparkNode1),
    mk.entryOk("node2", sparkNode2)
  )
)
// root: cats.effect.IO[eu.timepit.statuspage.core.Root] = <function1>

root.map(plaintext.renderRoot).unsafeRunSync()
// res0: String =
// status: ERROR
// uptime: up 2 weeks, 3 days, 13 hours, 27 minutes
// database_status: WARNING
// database_query: OK
// database_items: WARNING 38
// spark_cluster_status: ERROR
// spark_cluster_node1: OK
// spark_cluster_node2: ERROR unreachable

Using status-page

The latest version of the library is available for Scala 2.12, 2.13, and 3.

If you're using sbt, add the following to your build:

libraryDependencies ++= Seq(
  "eu.timepit" %% "status-page-core" % "<latestVersion>",
  "eu.timepit" %% "status-page-cats" % "<latestVersion>"
)

License

status-page is licensed under the Apache License, Version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 and also in the LICENSE file.