class Rookout::ComWs::Output

Attributes

agent_com[RW]
agent_id[RW]

Public Class Methods

new() click to toggle source
# File lib/rookout/com_ws/output.rb, line 14
def initialize
  @agent_id = nil
  @agent_com = nil

  @rule_status_update_bucket = TokenBucket.new Config.output_max_status_updates,
                                               Config.output_bucket_refresh_rate do
    Logger.instance.error "Limit reached, dropping status updates"
  end

  @user_message_bucket = TokenBucket.new Config.output_max_aug_messages,
                                         Config.output_bucket_refresh_rate do
    Logger.instance.error "Limit reached, dropping aug report messages"
  end

  @log_message_bucket = TokenBucket.new Config.output_max_log_items,
                                        Config.output_bucket_refresh_rate do
    internal_send_log_message 3,
                              Time.new,
                              __FILE__,
                              0,
                              text,
                              "Limit reached, dropping log messages",
                              "Limit reached, dropping log messages"
  end

  Logger.instance.register_output self

  @closing = false
end

Public Instance Methods

close() click to toggle source
# File lib/rookout/com_ws/output.rb, line 46
def close
  @closing = true

  Logger.instance.remove_output self
end
flush_messages() click to toggle source
# File lib/rookout/com_ws/output.rb, line 100
def flush_messages
  return unless @agent_com
  @agent_com.flush
end
send_log_message(level, time, filename, lineno, text, formatted_message, arguments) click to toggle source
# File lib/rookout/com_ws/output.rb, line 93
def send_log_message level, time, filename, lineno, text, formatted_message, arguments
  return if @closing || !@agent_com
  @log_message_bucket.if_available do
    internal_send_log_message level, time, filename, lineno, text, formatted_message, arguments
  end
end
send_rule_status(rule_id, active, error) click to toggle source
# File lib/rookout/com_ws/output.rb, line 60
def send_rule_status rule_id, active, error
  return if @closing || !@agent_com

  @rule_status_update_bucket.if_available do
    status = Com::Rookout::RuleStatusMessage.new agent_id: @agent_id,
                                                 rule_id: rule_id,
                                                 active: active
    if error
      status.error = error.dumps
    end

    @agent_com.add status
  end
end
send_user_message(aug_id, report_id, arguments) click to toggle source
# File lib/rookout/com_ws/output.rb, line 75
def send_user_message aug_id, report_id, arguments
  return if @closing || !@agent_com

  @user_message_bucket.if_available do
    if arguments.nil? || arguments.call_method("size", "") == 0
      protobuf_arguments = nil
    else
      protobuf_arguments = Processor::NamespaceSerializer.dump arguments
    end

    msg = Com::Rookout::AugReportMessage.new agent_id: @agent_id,
                                             aug_id: aug_id,
                                             report_id: report_id,
                                             arguments: protobuf_arguments
    @agent_com.add msg
  end
end
send_warning(rule_id, error) click to toggle source
# File lib/rookout/com_ws/output.rb, line 56
def send_warning rule_id, error
  send_rule_status rule_id, :Warning, error
end
user_messages_queue_full?() click to toggle source
# File lib/rookout/com_ws/output.rb, line 52
def user_messages_queue_full?
  @user_message_bucket.exhausted? || (!@agent_com.nil? && @agent_com.queue_full?)
end

Private Instance Methods

internal_send_log_message(level, time, filename, lineno, text, formatted_message, arguments) click to toggle source
# File lib/rookout/com_ws/output.rb, line 107
def internal_send_log_message level, time, filename, lineno, text, formatted_message, arguments
  return if @closing || !@agent_com

  timestamp = Google::Protobuf::Timestamp.new
  timestamp.from_time time

  if arguments.nil? || arguments.empty?
    protobuf_arguments = nil
  else
    protobuf_arguments = Processor::NamespaceSerializer.dump(
      Processor::Namespaces::RubyObjectNamespace.new(arguments)
    )
  end

  msg = Com::Rookout::LogMessage.new timestamp: timestamp,
                                     agent_id: @agent_id,
                                     level: level,
                                     filename: filename,
                                     line: lineno,
                                     text: text,
                                     formatted_message: formatted_message,
                                     legacy_arguments: protobuf_arguments
  @agent_com.add msg
end