def internal_send_audit(options)
      RightScale::AuditProxy.force_utf8!(options[:text])
      opts = { :audit_id => @audit_id, :category => options[:category], :offset => @size }
      opts[:category] ||= EventCategories::CATEGORY_NOTIFICATION
      unless EventCategories::CATEGORIES.include?(opts[:category])
        Log.warning("Invalid category '#{opts[:category]}' for notification '#{options[:text]}', using generic category instead")
        opts[:category] = EventCategories::CATEGORY_NOTIFICATION
      end

      log_method = options[:kind] == :error ? :error : :info
      log_text = AuditFormatter.send(options[:kind], options[:text])[:detail]
      log_text.chomp.split("\n").each { |l| Log.__send__(log_method, l) }
      begin
        audit = AuditFormatter.__send__(options[:kind], options[:text])
        @size += audit[:detail].size
        request = RetryableRequest.new("/auditor/update_entry", opts.merge(audit), :timeout => AUDIT_DELIVERY_TIMEOUT)
        request.callback { |_| } # No result of interest other than know it was successful
        request.errback { |message| Log.error("Failed to send update for audit #{@audit_id} (#{message})") }
        request.run
      rescue Exception => e
        Log.error("Failed to send update for audit #{@audit_id}", e, :trace)
      end

      true
    end
def internal_send_audit(options)
      RightScale::AuditProxy.force_utf8!(options[:text])
      opts = { :audit_id => @audit_id, :category => options[:category], :offset => @size }
      opts[:category] ||= EventCategories::CATEGORY_NOTIFICATION
      unless EventCategories::CATEGORIES.include?(opts[:category])
        Log.warning("Invalid category '#{opts[:category]}' for notification '#{options[:text]}', using generic category instead")
        opts[:category] = EventCategories::CATEGORY_NOTIFICATION
      end

      log_method = options[:kind] == :error ? :error : :info
      log_text = AuditFormatter.send(options[:kind], options[:text])[:detail]
      log_text.chomp.split("\n").each { |l| Log.__send__(log_method, l) }
      begin
        audit = AuditFormatter.__send__(options[:kind], options[:text])
        @size += audit[:detail].size
        request = RetryableRequest.new("/auditor/update_entry", opts.merge(audit), :timeout => AUDIT_DELIVERY_TIMEOUT)
        request.callback { |_| } # No result of interest other than know it was successful
        request.errback { |message| Log.error("Failed to send update for audit #{@audit_id} (#{message})") }
        request.run
      rescue Exception => e
        Log.error("Failed to send update for audit #{@audit_id}", e, :trace)
      end

      true
    end
Actually send audits to core agent and log failures

 === Parameters
 options[:kind](Symbol):: One of :status, :new_section, :info, :error, :output
 options[:text](String):: Text to be audited
 options[:category](String):: Optional, must be one of RightScale::EventCategories::CATEGORIES

 === Return
 true:: Always return true