#
# Cookbook:: irrigate-fluentd
# Recipe:: fluentd_agent
#
# Copyright: The Orchard
#

include_recipe 'td-agent::default'

# Configure sources and filters
if node['fluentd']['application_logs'] && !node['fluentd']['application_logs'].empty?
  node['fluentd']['application_logs'].each do |_name, info|
    app_name = info['app_name']
    log_file = info['log_file']
    log_type = info['log_type']
    parse_type = info['type']
    parse_format = info['format']
    td_agent_source "source-#{app_name}" do
      type parse_type
      tag app_name
      parameters(
        format: parse_format,
        path: log_file
      )
    end
  end

  node['fluentd']['application_logs'].each do |_name, info|
    app_name = info['app_name']
    td_agent_filter "filter-#{app_name}" do
      type 'record_transformer'
      tag app_name
      parameters(
        record: [{
          host_name: node['fqdn'],
          host_ip: node['ipaddress'],
          app_name: app_name,
          log_type: info['log_type'],
        }]
      )
    end
  end
end

# Configure match
fluentd_shared_key = data_bag_item('secrets', 'fluentd_secret_data')
shared_key = fluentd_shared_key['shared_key'].chomp
td_agent_match 'secure_forward' do
  type 'secure_forward'
  tag '**'
  parameters(
    self_hostname: node['fqdn'],
    secure: true,
    shared_key: shared_key,
    ca_cert_path: node['fluentd']['ca_cert_path'],
    buffer_chunk_limit: node['fluentd']['buffer_chunk_limit'],
    buffer_queue_limit: '10',
    flush_interval: '60s',
    disable_retry_limit: false,
    retry_limit: '15',
    retry_wait: '1s',
    secondary: [{
      type: 'file',
      path: "/var/log/#{node['td_agent']['template_cookbook']}/buffer/secure-forward-failed",
      buffer_chunk_limit: node['fluentd']['buffer_chunk_limit'],
      buffer_queue_limit: '10',
      flush_interval: '60s',
      disable_retry_limit: false,
      retry_limit: '15',
      retry_wait: '1s',
    }],
    server: [{
      host: node['fluentd']['aggregator_host'],
      port: node['fluentd']['aggregator_port'],
    }]
  )
end
