From 1e77ecffa92a22a5a8c73528fe57cdf02cef41b5 Mon Sep 17 00:00:00 2001 From: Astro Date: Tue, 14 Apr 2020 21:22:29 +0200 Subject: [PATCH] add freifunk_node --- default.nix | 3 ++- freifunk_node/scrape.rb | 59 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 freifunk_node/scrape.rb diff --git a/default.nix b/default.nix index b75ad0c..0801e02 100644 --- a/default.nix +++ b/default.nix @@ -18,7 +18,7 @@ let buildInputs = [ gems.wrappedRuby ]; buildCommand = '' - install -D -m755 $script $out/bin/${name} + install -D -m755 ${script} $out/bin/${name} patchShebangs $out/bin/${name} ''; }; @@ -27,4 +27,5 @@ in { luftdaten = wrapScript "luftdaten" ./luftdaten/scrape.rb; fhem = wrapScript "fhem" ./fhem/scrape.rb; matemat = wrapScript "matemat" ./matemat/scrape.rb; + freifunk_node = wrapScript "freifunk_node" ./freifunk_node/scrape.rb; } diff --git a/freifunk_node/scrape.rb b/freifunk_node/scrape.rb new file mode 100644 index 0000000..1b55345 --- /dev/null +++ b/freifunk_node/scrape.rb @@ -0,0 +1,59 @@ +#!/usr/bin/env ruby + +require 'open-uri' +require 'json' +require 'influxdb' + +HOST = ARGV[0] + +data = JSON.parse open("http://#{HOST}/sysinfo-json.cgi").read() + +values = {} + +def recurse(data, values, prefix='') + new_prefix = proc do |name| + if prefix == "" + name + else + "#{prefix}.#{name}" + end + end + + if data.kind_of? Hash + data.each do |k, v| + recurse v, values, new_prefix.call(k) + end + elsif data.kind_of? Array + data.zip(0..).each do |(v, i)| + recurse v, values, new_prefix.call(i) + end + elsif data.kind_of? String and data != "" + data.strip! + data = data.split(/,/) + if data.length > 1 + data.zip(0..).each do |(v, i)| + recurse v, values, new_prefix.call(i) + end + else + data = data[0].split(/ +/) + if data.length > 1 + data.zip(0..).each do |(v, i)| + recurse v, values, new_prefix.call(i) + end + else + if data[0] =~ /^\d+$/ + values[prefix] = data[0].to_i + end + end + end + elsif data.kind_of? Integer or data.kind_of? Float + values[prefix] = data + end +end + + +node_id = data['data']['common']['node'] +recurse data['data'], values + +db = InfluxDB::Client.new(url: "http://grafana.hq.c3d2.de:8086/freifunk") +db.write_point 'node', { values: values, tags: { node_id: node_id } }