mirror of
https://github.com/cmur2/dyndnsd.git
synced 2026-11-14 12:55:58 +01:00
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:
1 parent
645469f41e
commit
7fa9f499e1
10 files changed
+502
-29
No files matched your search
@@ -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
|
||||
@@ -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
|
||||
Reference in new issue
Block a user