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