diff options
author | ytti <saku@ytti.fi> | 2015-05-07 14:55:04 +0300 |
---|---|---|
committer | ytti <saku@ytti.fi> | 2015-05-07 14:55:04 +0300 |
commit | 164e094e6fcc0b08345af7678e1edffa945ff68d (patch) | |
tree | db9b64bc1d4192c011b26ed43a6ffd2bfba7c3b7 /lib | |
parent | ee6f048a8e518ab2d50fb41f99ef5029a518fe01 (diff) | |
parent | 609f89949ef18be5a7729e9846f35ceddca58398 (diff) |
Merge pull request #117 from ukfast/http-source
Added support for http as a source
Diffstat (limited to 'lib')
-rw-r--r-- | lib/oxidized/source/http.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/oxidized/source/http.rb b/lib/oxidized/source/http.rb new file mode 100644 index 0000000..d2e3ea6 --- /dev/null +++ b/lib/oxidized/source/http.rb @@ -0,0 +1,54 @@ +module Oxidized +class HTTP < Source + def initialize + @cfg = CFG.source.http + super + end + + def setup + if @cfg.url.empty? + raise NoConfig, 'no source http url config, edit ~/.config/oxidized/config' + end + end + + require "net/http" + require "uri" + require "json" + + def load + nodes = [] + uri = URI.parse(@cfg.url) + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true if uri.scheme == 'https' + + # map headers + headers = {} + @cfg.headers.each do |header, value| + headers[header] = value + end + + request = Net::HTTP::Get.new(uri.request_uri, headers) + + response = http.request(request) + data = JSON.parse(response.body) + data.each do |line| + next if line.empty? + # map node parameters + keys = {} + @cfg.map.each do |key, position| + keys[key.to_sym] = line[position] + end + keys[:model] = map_model keys[:model] if keys.key? :model + + # map node specific vars, empty value is considered as nil + vars = {} + @cfg.vars_map.each { |key, position| vars[key.to_sym] = line[position].to_s.empty? ? nil : line[position] } + keys[:vars] = vars unless vars.empty? + + nodes << keys + end + nodes + end + +end +end |