class LogStash::Inputs::Heartbeat

Generate heartbeat messages.

The general intention of this is to test the performance and availability of Logstash.

Public Instance Methods

generate_message(sequence_count) click to toggle source
# File lib/logstash/inputs/heartbeat.rb, line 94
def generate_message(sequence_count)
  if @sequence_selector == :none
    evt = event_factory.new_event("message" => @message)
    evt.set(@field_host, @host)
    return evt
  end

  sequence_value = @sequence_selector == :epoch ? Time.now.to_i : sequence_count
  evt = event_factory.new_event()
  evt.set(@field_sequence, sequence_value)
  evt.set(@field_host, @host)
  evt.set("message", @message) unless @message.nil?
  evt
end
register() click to toggle source
# File lib/logstash/inputs/heartbeat.rb, line 59
def register
  @host = Socket.gethostname
  @field_sequence = ecs_select[disabled: "clock", v1: "[event][sequence]"]
  @field_host = ecs_select[disabled: "host", v1: "[host][name]"]
  if sequence.nil? && ["epoch", "sequence"].include?(message)
    logger.warn("message contains sequence type specification (epoch|sequence) for this purpose use the sequence option")
  end
  if ecs_compatibility == :disabled && @sequence.nil?
    if %w(epoch sequence).include?(@message)
      logger.debug("intercepting magic `message` to configure `sequence`: `#{@message}`")
      @sequence, @message = @message, nil # legacy: intercept magic messages
      deprecation_logger.deprecated("magic values of `message` to specify sequence type are deprecated; use separate `sequence` option instead.")
    end
  end
  @sequence = "none" if @sequence.nil?
  @sequence_selector = @sequence.to_sym
end
run(queue) click to toggle source
# File lib/logstash/inputs/heartbeat.rb, line 77
def run(queue)
  sequence_count = 0

  while !stop?
    start = Time.now

    sequence_count += 1
    event = generate_message(sequence_count)
    decorate(event)
    queue << event
    break if sequence_count == @count || stop?

    sleep_for = @interval - (Time.now - start)
    Stud.stoppable_sleep(sleep_for) { stop? } if sleep_for > 0
  end
end