gems: include vendored metrisk without hitime dependency

hitime is only needed for Metriks::Timer and requires native extensions.
Those do not compile with default settings under Ubuntu 26.04 or Alpine 3.24.
This commit is contained in:
cn authored and Christian Nicolai committed 2026-11-13 17:35:46 +01:00
1 parent 645469f41e
commit 7fa9f499e1
10 files changed
+502 -29

No files matched your search

+91
View File
@@ -0,0 +1,91 @@
# Vendored from metriks 0.9.9.8 — https://github.com/eric/metriks
# Copyright (c) 2012 Eric Lindvall, MIT licensed.
# Trimmed to the subset dyndnsd uses (meters + registry + reporters).
require 'socket'
module Metriks::Reporter
class Graphite
attr_reader :host, :port
def initialize(host, port, options = {})
@host = host
@port = port
@prefix = options[:prefix]
@registry = options[:registry] || Metriks::Registry.default
@interval = options[:interval] || 60
@on_error = options[:on_error] || proc { |ex| }
end
def socket
@socket = nil if @socket && @socket.closed?
@socket ||= TCPSocket.new(@host, @port)
end
def start
@thread ||= Thread.new do
loop do
sleep @interval
Thread.new do
begin
write
rescue Exception => ex
@on_error[ex] rescue nil
end
end
end
end
end
def stop
@thread.kill if @thread
@thread = nil
end
def restart
stop
start
end
def write
@registry.each do |name, metric|
case metric
when Metriks::Meter
write_metric name, metric, [
:count, :one_minute_rate, :five_minute_rate,
:fifteen_minute_rate, :mean_rate
]
end
end
end
def write_metric(base_name, metric, keys, snapshot_keys = [])
time = Time.now.to_i
base_name = base_name.to_s.gsub(/ +/, '_')
if @prefix
base_name = "#{@prefix}.#{base_name}"
end
keys.flatten.each do |key|
name = key.to_s.gsub(/^get_/, '')
value = metric.send(key)
socket.write("#{base_name}.#{name} #{value} #{time}\n")
end
unless snapshot_keys.empty?
snapshot = metric.snapshot
snapshot_keys.flatten.each do |key|
name = key.to_s.gsub(/^get_/, '')
value = snapshot.send(key)
socket.write("#{base_name}.#{name} #{value} #{time}\n")
end
end
rescue Errno::EPIPE
socket.close
end
end
end
+63
View File
@@ -0,0 +1,63 @@
# Vendored from metriks 0.9.9.8 — https://github.com/eric/metriks
# Copyright (c) 2012 Eric Lindvall, MIT licensed.
# Trimmed to the subset dyndnsd uses (meters + registry + reporters).
module Metriks::Reporter
class ProcTitle
def initialize(options = {})
@rounding = options[:rounding] || 1
@prefix = options[:prefix] || $0.dup
@interval = options[:interval] || 5
@on_error = options[:on_error] || proc { |ex| }
@metrics = []
end
def add(name, suffix = nil, &block)
@metrics << [ name, suffix, block ]
end
def empty?
@metrics.empty?
end
def start
@thread ||= Thread.new do
loop do
begin
unless @metrics.empty?
title = generate_title
if title && !title.empty?
$0 = "#{@prefix} #{title}"
end
end
rescue Exception => ex
@on_error[ex] rescue nil
end
sleep @interval
end
end
end
def stop
@thread.kill if @thread
@thread = nil
end
def restart
stop
start
end
protected
def generate_title
@metrics.collect do |name, suffix, block|
val = block.call
val = "%.#{@rounding}f" % val if val.is_a?(Float)
"#{name}: #{val}#{suffix}"
end.join(' ')
end
end
end