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 | 
