Class: LogStash::Inputs::Meetup

Inherits:
Base
  • Object
show all
Defined in:
lib/logstash/inputs/meetup.rb

Overview

Periodically query meetup.com regarding updates on events for the given meetupkey

Instance Method Summary collapse

Instance Method Details

#registerObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/logstash/inputs/meetup.rb', line 34

def register
  require "faraday"
  # group_id
  if groupid
    addon = "group_id=#{ @groupid }"
    # group_urlname
  elsif urlname
    addon = "group_urlname=#{ @urlname }"
    # venue_id
  elsif venueid
    addon = "venue_id=#{ @venueid }"
  else
    # None Selected, raise an error
    raise "Configuration error! -  Must have one of `urlname`, `venue_id`, or `group_id` defined"
    addon = ""
  end
  @url = "https://api.meetup.com/2/events.json?key=#{ @meetupkey.value }&status=#{ @eventstatus }&#{ addon }"
  @logger.info("Registering meetup Input", :url => @url.gsub(@meetupkey.value, "xxxx"), :interval => @interval)
end

#run(queue) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/logstash/inputs/meetup.rb', line 55

def run(queue)
  Stud.interval(@interval*60) do
    start = Time.now
    @logger.info? && @logger.info("Polling meetup", :url => @url)

    # Pull down the RSS feed using FTW so we can make use of future cache functions
    response = Faraday.get @url
    logger.error("Error call meetup API: " + response.body) unless response.status.eql?(200)
    begin
      result = LogStash::Json.load(response.body)
    rescue LogStash::Json::ParserError => e
      # ignore json parsing errors
      logger.debug("Error parsing Json", :message => e.message, :backtrace => e.backtrace)
    end

    result["results"].each do |rawevent|
      event = LogStash::Event.new(rawevent)
      # Convert the timestamps into Ruby times
      event.set('created', LogStash::Timestamp.at(event.get('created') / 1000, (event.get('created') % 1000) * 1000))
      event.set('time', LogStash::Timestamp.at(event.get('time') / 1000, (event.get('time') % 1000) * 1000))
      event.set('[group][created]', LogStash::Timestamp.at(event.get('group][created]') / 1000, (event.get('group][created]') % 1000) * 1000))
      event.set('updated', LogStash::Timestamp.at(event.get('updated') / 1000, (event.get('updated') % 1000) * 1000))
      event.set('[venue][lonlat]', [event.get('[venue][lon]'), event.get('[venue][lat]')]) if rawevent.has_key?('venue')
      event.set('[group][lonlat]', [event.get('[group][group_lon]'), event.get('[group][group_lat]')]) if rawevent.has_key?('group')
      decorate(event)
      queue << event
    end

    duration = Time.now - start
    @logger.info? && @logger.info("poll completed", :command => @command,
                                  :duration => duration)
  end # loop
end