// Copyright 2026 Leo Cheng
// SPDX-License-Identifier: Apache-2.0
///|
/// The fixed creation time used here keeps the example deterministic.
let created : Double = 1700000000.0
///|
fn build() -> Unit raise @metric.Refused {
let registry = @moonp8s.Registry::new()
let requests = @moonp8s.Family::new(["method", "code"], fn() {
@moonp8s.Counter::new(created~)
})
registry.register("http_requests", "HTTP requests.", requests)
requests.labels(["GET", "200"]).inc()
requests.labels(["POST", "500"]).inc(by=2.5)
let temperature = @moonp8s.Gauge::new()
registry.register("temperature_celsius", "Temperature.", temperature)
temperature.set(21.5)
let latency = @moonp8s.Family::new(["route"], fn() raise @metric.Refused {
@moonp8s.Histogram::new(created~)
})
registry.register("request_latency_seconds", "Latency.", latency)
latency.labels(["/"]).observe(0.05)
latency.labels(["/"]).observe(0.3)
latency.labels(["/"]).observe(2.0)
let size = @moonp8s.Summary::new(created~)
registry.register("request_size_bytes", "Size.", size)
size.observe(512.0)
size.observe(1024.0)
let build = @moonp8s.Info::new([("version", "1.2.3"), ("commit", "abc")])
registry.register("build_info", "Build info.", build)
let state = @moonp8s.StateSet::exclusive(["starting", "running", "stopped"])
registry.register("task_state", "Task state.", state)
state.set("running")
let families = registry.collect()
println(@moonp8s.text(families))
println(@moonp8s.openmetrics(families))
}
///|
#coverage.skip
fn main {
build() catch {
@metric.Refused(message) => println("refused: " + message)
}
}