34 lines
671 B
Ruby
34 lines
671 B
Ruby
#!/usr/bin/env ruby
|
|
|
|
# Converts Starlink status JSON to a format that is suitable for collectd exec
|
|
|
|
require 'json'
|
|
|
|
HOSTNAME = IO::readlines("/proc/sys/kernel/hostname").join.strip
|
|
|
|
def out path, x
|
|
puts "PUTVAL \"#{HOSTNAME}/exec-starlink/current-#{path.join '.'}\" N:#{x}"
|
|
end
|
|
|
|
def recurse path, x
|
|
if x.kind_of? Hash
|
|
x.each { |k, v|
|
|
recurse path + [k], v
|
|
}
|
|
elsif x.kind_of? Array
|
|
x.each_with_index { |v, i|
|
|
recurse path + [i], v
|
|
}
|
|
|
|
elsif x.kind_of? Float
|
|
out path, x
|
|
elsif x.kind_of? Integer
|
|
out path, x.to_f
|
|
elsif x.kind_of? String and x =~ /^\-?\d*\.?\d+$/
|
|
out path, x.to_f
|
|
end
|
|
end
|
|
|
|
|
|
recurse [], JSON.load(STDIN)
|