include_recipe 'opsworks_ganglia::client'

case node[:platform_family]
when "rhel"
  package node[:ganglia][:gmetad_package_name] do
    retries 3
    retry_delay 5
  end
  package node[:ganglia][:web_frontend_package_name] do
    retries 3
    retry_delay 5
  end

when "debian"
  if platform?('ubuntu') && node[:platform_version] == '14.04'
    package node[:ganglia][:gmetad_package_name] do
      retries 3
      retry_delay 5
    end
    package node[:ganglia][:web_frontend_package_name] do
      retries 3
      retry_delay 5
    end
    package "apache2-utils" do
      retries 3
      retry_delay 5
    end
  else
    package "librrd4" do
      retries 3
      retry_delay 5
    end

    node[:ganglia][:web_frontend_dependencies].each do |web_frontend_dependency|
      package web_frontend_dependency do
        retries 3
        retry_delay 5
      end
    end

    pm_helper = OpsWorks::PackageManagerHelper.new(node)

    [node[:ganglia][:gmetad_package_name], node[:ganglia][:web_frontend_package_name]].each do |package|
      current_package_info = pm_helper.summary(package)

      if current_package_info.version && current_package_info.version =~ /^#{node[:ganglia][:custom_package_version]}/
        Chef::Log.info("#{package} version is up-to-date (#{node[:ganglia][:custom_package_version]})")
      else

        packages_to_remove = pm_helper.installed_packages.select do |pkg, version|
          pkg.include?(package)
        end

        packages_to_remove.each do |pkg, version|
          package "Remove outdated package #{pkg}" do
            package_name pkg
            action :remove
          end
        end

        log "downloading" do
          message "Download and install #{package} version #{node[:ganglia][:custom_package_version]}"
          level :info

          action :nothing
        end

        opsworks_commons_assets_installer "Install ganglia component: #{package}" do
          asset package
          version node[:ganglia][:custom_package_version]

          notifies :write, "log[downloading]", :immediately
          action :install
        end
      end
    end
  end

end

execute "Ensure permission and ownership of web frontend" do
  command "chown -R #{node[:apache][:user]}:#{node[:apache][:group]} #{node[:ganglia][:web][:destdir]}"
end

include_recipe 'opsworks_ganglia::service-gmetad'

service 'gmetad' do
  action :stop
end

include_recipe 'opsworks_ganglia::bind-mount-data' if infrastructure_class?('ec2')

template '/etc/ganglia/gmetad.conf' do
  source 'gmetad.conf.erb'
  variables :stack_name => node[:opsworks][:stack][:name]
  mode "0644"
end

execute "fix permissions on ganglia rrds directory" do
 command "chown -R #{node[:ganglia][:rrds_user]}:#{node[:ganglia][:user]} #{node[:ganglia][:original_datadir]}/rrds"
end

include_recipe 'apache2::service'

service 'gmetad' do
  action [ :enable, :start ]
end