138 lines
3.1 KiB
Ruby
138 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'test_helper'
|
|
require 'prometheus_exporter/metric'
|
|
|
|
module PrometheusExporter::Metric
|
|
describe Gauge do
|
|
let :gauge do
|
|
Gauge.new("a_gauge", "my amazing gauge")
|
|
end
|
|
|
|
before do
|
|
Base.default_prefix = ''
|
|
end
|
|
|
|
it "should not allow observe to corrupt data" do
|
|
assert_raises do
|
|
gauge.observe("hello")
|
|
end
|
|
|
|
# going to special case nil here instead of adding a new API
|
|
# observing nil should set to nothing
|
|
# this is a slight difference to official API which would raise
|
|
# on non numeric, however it provides a bit more flexibility
|
|
# and allows us to remove metrics if we wish
|
|
gauge.observe(100)
|
|
gauge.observe(nil)
|
|
gauge.observe(nil, a: "thing")
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
|
|
it "supports a dynamic prefix" do
|
|
Base.default_prefix = 'web_'
|
|
gauge.observe(400.11)
|
|
|
|
text = <<~TEXT
|
|
# HELP web_a_gauge my amazing gauge
|
|
# TYPE web_a_gauge gauge
|
|
web_a_gauge 400.11
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
|
|
Base.default_prefix = ''
|
|
end
|
|
|
|
it "can correctly set gauges with labels" do
|
|
gauge.observe(100.5, sam: "ham")
|
|
gauge.observe(5, sam: "ham", fam: "bam")
|
|
gauge.observe(400.11)
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
a_gauge{sam="ham"} 100.5
|
|
a_gauge{sam="ham",fam="bam"} 5
|
|
a_gauge 400.11
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
|
|
it "can correctly reset on change" do
|
|
|
|
gauge.observe(10)
|
|
gauge.observe(11)
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
a_gauge 11
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
|
|
it "can use the set on alias" do
|
|
|
|
gauge.set(10)
|
|
gauge.set(11)
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
a_gauge 11
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
|
|
it "can correctly reset on change with labels" do
|
|
gauge.observe(1, sam: "ham")
|
|
gauge.observe(2, sam: "ham")
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
a_gauge{sam="ham"} 2
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
|
|
it "can correctly increment" do
|
|
gauge.observe(1, sam: "ham")
|
|
gauge.increment({ sam: "ham" }, 2)
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
a_gauge{sam="ham"} 3
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
|
|
it "can correctly decrement" do
|
|
gauge.observe(5, sam: "ham")
|
|
gauge.decrement({ sam: "ham" }, 2)
|
|
|
|
text = <<~TEXT
|
|
# HELP a_gauge my amazing gauge
|
|
# TYPE a_gauge gauge
|
|
a_gauge{sam="ham"} 3
|
|
TEXT
|
|
|
|
assert_equal(gauge.to_prometheus_text, text)
|
|
end
|
|
end
|
|
end
|