class Fluent::JsonApiInput

Attributes

urls[R]

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_json_api.rb, line 13
def initialize
    super
    require 'json'
    require 'net/http'
    @urls = []
end

Public Instance Methods

configure(config) click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_json_api.rb, line 20
def configure(config)
    super

    begin
        result = []
        (eval config['rules']).each_pair do |key,replecements|
            combinations = []
            (replecements.to_a).each do |replacement|
                combinations << {key => replacement}
            end 
            result << combinations
        end

        @rules = result[0].product(*result[1..-1])
    rescue SyntaxError,StandardError => e 
        raise Fluent::ConfigError.new "rules has some errors #{e}"
    end

    raise Fluent::ConfigError unless ['http','https'].include? URI.parse(config['url']).scheme
    @rules.each do |pair|
        url = config['url']
        pair.each do |key_replacements|
            key_replacements.each do |key,replacement|
                url = url.gsub(key.to_s,replacement.to_s)
            end
        end
        @urls.push url
    end
end
crawl(url) click to toggle source
# File lib/fluent/plugin/in_json_api.rb, line 64
def crawl(url)
    response = Net::HTTP.get_response(URI.parse(url))
    case response
    when Net::HTTPSuccess
        return JSON.parse response.body
    end
    raise Fluent::JsonApiError.new
end
run() click to toggle source
# File lib/fluent/plugin/in_json_api.rb, line 55
def run
    loop {
        @urls.each do |url|
            Engine.emit @tag, Engine.now , crawl(url)
            run_interval @run_interval if @run_interval.to_i > 0
        end
    }
end
shutdown() click to toggle source
# File lib/fluent/plugin/in_json_api.rb, line 73
def shutdown
    Thread.kill(@thread)
end
start() click to toggle source
Calls superclass method
# File lib/fluent/plugin/in_json_api.rb, line 50
def start
    super
    @thread = Thread.new(&method(:run))
end