self.push_qos_event

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