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

packages = %w(
  make
  automake
  gcc
  gcc-c++
  kernel-devel
)

packages.each do |name|
  package name
end

include_recipe 'irrigate-fluentd::default'

fluentd_secret_data = data_bag_item('secrets', 'fluentd_secret_data')
shared_key = fluentd_secret_data['shared_key'].chomp
priv_key_passphrase = fluentd_secret_data['ca_private_key_passphrase']

file node['fluentd']['ca_private_key_path'] do
  content node['fluentd']['ca_private_key']
  mode '0640'
  owner node['td_agent']['user']
  group node['td_agent']['group']
end

td_agent_source 'aggregator_in' do
  type 'secure_forward'
  parameters(
    port: 24224,
    shared_key: shared_key,
    self_hostname: node['fqdn'],
    secure: true,
    ca_cert_path: node['fluentd']['ca_cert_path'],
    ca_private_key_path: node['fluentd']['ca_private_key_path'],
    ca_private_key_passphrase: priv_key_passphrase
  )
end

td_agent_match 'es_forward' do
  type 'copy'
  tag '*.**'
  parameters(
    store:
      [{
        type: 'elasticsearch',
        host: node['fluentd']['es_host'],
        port: node['fluentd']['es_port'],
        scheme: node['fluentd']['es_scheme'],
        ssl_verify: node['fluentd']['es_ssl_verify'],
        logstash_format: true,
        flush_interval: node['fluentd']['flush_interval'],
        buffer_chunk_limit: node['fluentd']['buffer_chunk_limit'],
        reconnect_on_error: true,
      }]
  )
end

logrotate_app 'td-agent' do
  path      "#{node['fluentd']['system_logs_path']}/td-agent/td-agent.log"
  frequency 'hourly'
  rotate    5
  options %w(
    compress
    delaycompress
    notifempty
    sharedscripts
  )
  postrotate <<-EOF
    pid=/var/run/td-agent/td-agent.pid
    if [ -s "$pid" ]
    then
      kill -USR1 "$(cat $pid)"
    fi
  EOF
  create "640 #{node['td_agent']['user']} #{node['td_agent']['group']}"
end

service 'td-agent' do
  action [:enable, :start]
end
