class LoggregatorEmitter::Emitter
Constants
- MAX_MESSAGE_BYTE_SIZE
- MAX_TAGS
- MAX_TAG_LENGTH
- TRUNCATED_STRING
- UDP_SEND_ERROR
Attributes
host[R]
Public Class Methods
new(loggregator_server, origin, source_type, source_instance = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 17 def initialize(loggregator_server, origin, source_type, source_instance = nil) @host, @port = loggregator_server.split(/:([^:]*$)/) raise ArgumentError, "Must provide valid loggregator server: #{loggregator_server}" if !valid_hostname || !valid_port @host = ::Resolv.getaddresses(@host).first raise ArgumentError, "Must provide valid loggregator server: #{loggregator_server}" unless @host raise ArgumentError, "Must provide a valid origin" unless origin raise ArgumentError, "Must provide valid source_type: #{source_type}" unless source_type raise ArgumentError, "source_type must be a 3-character string" unless source_type.is_a? String raise ArgumentError, "Custom Source String must be 3 characters" unless source_type.size == 3 @origin = origin @source_type = source_type @source_instance = source_instance && source_instance.to_s end
Public Instance Methods
emit(app_id, message, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 35 def emit(app_id, message, tags = nil) emit_message(app_id, message, LogMessage::MessageType::OUT, tags) end
emit_container_metric(app_id, instanceIndex, cpu, memory, disk, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 55 def emit_container_metric(app_id, instanceIndex, cpu, memory, disk, tags = nil) return unless app_id && instanceIndex && cpu && memory && disk send_protobuffer(create_container_metric_envelope(app_id, instanceIndex, cpu, memory, disk, tags)) end
emit_counter(name, delta, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 49 def emit_counter(name, delta, tags = nil) return unless name && delta send_protobuffer(create_counter_envelope(name, delta, tags)) end
emit_error(app_id, message, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 39 def emit_error(app_id, message, tags = nil) emit_message(app_id, message, LogMessage::MessageType::ERR, tags) end
emit_value_metric(name, value, unit, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 43 def emit_value_metric(name, value, unit, tags = nil) return unless name && value && unit send_protobuffer(create_value_metric_envelope(name, value, unit, tags)) end
Private Instance Methods
create_container_metric(app_id, instanceIndex, cpu, memory, disk)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 162 def create_container_metric(app_id, instanceIndex, cpu, memory, disk) metric = ::Sonde::ContainerMetric.new() metric.applicationId = app_id metric.instanceIndex = instanceIndex metric.cpuPercentage = cpu metric.memoryBytes = memory metric.diskBytes = disk metric end
create_container_metric_envelope(app_id, instanceIndex, cpu, memory, disk, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 172 def create_container_metric_envelope(app_id, instanceIndex, cpu, memory, disk, tags = nil) envelope = ::Sonde::Envelope.new() envelope.time = Time.now envelope.origin = @origin envelope.eventType = ::Sonde::Envelope::EventType::ContainerMetric envelope.containerMetric = create_container_metric(app_id, instanceIndex, cpu, memory, disk) if tags != nil envelope.tags = set_tags(tags) end envelope end
create_counter_envelope(name, delta, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 150 def create_counter_envelope(name, delta, tags = nil) envelope = ::Sonde::Envelope.new() envelope.time = Time.now envelope.origin = @origin envelope.eventType = ::Sonde::Envelope::EventType::CounterEvent envelope.counterEvent = create_counter_event(name, delta) if tags != nil envelope.tags = set_tags(tags) end envelope end
create_counter_event(name, delta)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 143 def create_counter_event(name, delta) counter = ::Sonde::CounterEvent.new() counter.name = name counter.delta = delta counter end
create_log_envelope(app_id, message, type, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 111 def create_log_envelope(app_id, message, type, tags = nil) le = ::Sonde::Envelope.new() le.origin = @origin le.time = Time.now le.eventType = ::Sonde::Envelope::EventType::LogMessage le.logMessage = create_log_message(app_id, message, type, le.time) if tags != nil le.tags = set_tags(tags) end le end
create_log_message(app_id, message, type, time)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 100 def create_log_message(app_id, message, type, time) lm = ::Sonde::LogMessage.new() lm.time = time lm.message = message lm.app_id = app_id lm.source_instance = @source_instance lm.source_type = @source_type lm.message_type = type lm end
create_value_metric(name, value, unit)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 123 def create_value_metric(name, value, unit) metric = ::Sonde::ValueMetric.new() metric.name = name metric.value = value metric.unit = unit metric end
create_value_metric_envelope(name, value, unit, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 131 def create_value_metric_envelope(name, value, unit, tags = nil) envelope = ::Sonde::Envelope.new() envelope.time = Time.now envelope.origin = @origin envelope.eventType = ::Sonde::Envelope::EventType::ValueMetric envelope.valueMetric = create_value_metric(name, value, unit) if tags != nil envelope.tags = set_tags(tags) end envelope end
emit_message(app_id, message, type, tags = nil)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 88 def emit_message(app_id, message, type, tags = nil) return unless app_id && message && message.strip.length > 0 split_message(message).each do |m| if m.bytesize > MAX_MESSAGE_BYTE_SIZE m = m.byteslice(0, MAX_MESSAGE_BYTE_SIZE-TRUNCATED_STRING.bytesize) + TRUNCATED_STRING end send_protobuffer(create_log_envelope(app_id, m, type, tags)) end end
send_protobuffer(lm)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 184 def send_protobuffer(lm) result = lm.encode.buf result.unpack("C*") addrinfo_udp = Addrinfo.udp(@host, @port) s = addrinfo_udp.ipv4?() ? UDPSocket.new : UDPSocket.new(Socket::AF_INET6) s.do_not_reverse_lookup = true begin s.sendmsg_nonblock(result, 0, addrinfo_udp) rescue raise UDP_SEND_ERROR end end
split_message(message)
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 71 def split_message(message) message.split(/\n|\r/).reject { |a| a.empty? } end
valid_hostname()
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 67 def valid_hostname @host && !@host.empty? && !@host.match(/:\/\//) end
valid_port()
click to toggle source
# File lib/loggregator_emitter/emit.rb, line 63 def valid_port @port && @port.match(/^\d+$/) end