in source/code/plugins/agent_telemetry_script.rb [202:278]
def self.push_qos_event(operation, operation_success, message, source, batch = [], count = 1, time = 0)
event = { op: operation, op_success: operation_success, m: message, c: count }
begin
event[:t] = time
if batch.is_a? Hash and batch.has_key?('DataItems')
records = batch['DataItems']
return nil if records.empty?
if records[0].has_key?('Timestamp')
now = Time.now
times = records.map { |record| now - Time.parse(record['Timestamp']) }
event[:min_l] = times[-1]
event[:max_l] = times[0]
event[:sum_l] = times.sum
end
sizes = records.map { |record| OMS::Common.parse_json_record_encoding(record) }.compact.map(&:bytesize)
elsif batch.is_a? Array
sizes = batch.map { |record| OMS::Common.parse_json_record_encoding(record) }.compact.map(&:bytesize)
else
OMS::Log.warn_once("Unexpected record format encountered in QoS: #{records.to_s}")
end
event[:min_s] = sizes.min
event[:max_s] = sizes.max
event[:sum_s] = sizes.sum
push_back_qos_event(source, event)
rescue => e
OMS::Log.error_once("Error pushing QoS event. #{e}")
end
return event
end
def self.push_error_event(message)
event = { m: message, c: 1 }
begin
if @@error_events.size >= EVENTS_LIMIT
OMS::Log.warn_once("Incoming error event dropped to obey memory cap.")
return
elsif @@error_events.has_key?(event[:m])
@@error_events[event[:m]][:c] += 1
else
@@error_events[event[:m]] = event
end
rescue => e
OMS::Log.error_once("Error pushing error event. #{e}")
end
return event
end
def self.array_avg(array)
if array.empty?
return 0
else
return (array.reduce(0, :+) / array.size.to_f).to_i
end
end
def get_pids
@pids.each do |key, value|
case key
when :oms
begin
if File.exist?(@pid_path) and File.readable?(@pid_path)
@pids[key] = File.read(@pid_path).to_i
end
rescue => e
log_error("Error reading omsagent pid file. #{e}")
end
when :omi
@pids[key] = `pgrep -U omsagent omiagent`.to_i
end
end
end