# frozen_string_literal: true

#
# Cookbook:: irrigate-sonarqube
# Recipe:: default
#
# Copyright:: (C) The Orchard
#
# All rights reserved - Do Not Redistribute
#

if node['sonar']['credentials_data_bag_name'] && !node['sonar']['credentials_data_bag_name'].empty?
  sonar_credentials                          = data_bag_item('secrets', node['sonar']['credentials_data_bag_name'])
  node.default['sonar']['db_username']       = sonar_credentials['db_username'].chomp
  node.default['sonar']['db_password']       = sonar_credentials['db_password'].chomp
end

if platform_family?('rhel')
  packages = %w(
      unzip
      java-11-openjdk
    )

  # Install packages
  packages.each do |name|
    package name
  end
end

if platform_family?('amazon')
  packages = %w(
      unzip
      java-11-amazon-corretto
    )

  # Install packages
  packages.each do |name|
    package name
  end
end

if platform_family?('rhel', 'amazon')
  if node['platform_version'].start_with?('2', '7')
    sonar_user       = node['sonar']['user']
    sonar_group      = node['sonar']['group']

    group sonar_group

    user sonar_user do
      group sonar_group
    end

    # Download Sonarqube
    remote_file node['sonar']['download_dir'] do
      source node['sonar']['source']
      owner         sonar_user
      group         sonar_group
      mode          '0755'
      show_progress  true
    end

    # Rename sonar folder
    execute 'unzip_and_move_sonarqube' do
      command "unzip #{node['sonar']['download_dir']} -d /opt && mv -f /opt/sonarqube-#{node['sonar']['version']} #{node['sonar']['home_directory']} && chown -R #{sonar_user}:#{sonar_group} #{node['sonar']['home_directory']} && touch /opt/.sonarqube-#{node['sonar']['version']}_installed"
      creates "/opt/.sonarqube-#{node['sonar']['version']}_installed"
    end

    # Create sonar.properties
    template "#{node['sonar']['home_directory']}/conf/#{node['sonar']['properties']}" do
      source 'sonar.properties.erb'
      owner sonar_user
      group sonar_group
      mode  '0755'
    end

    # Systemd unit service for sonar server.
    systemd_unit 'sonar.service' do
      content(Unit: {
                Description: 'SonarQube service',
                Documentation: ['https://www.sonarqube.org/'],
                After: 'network.target',
              },
              Service: {
                Type: 'forking',
                ExecStart: "#{node['sonar']['home_directory']}/bin/linux-x86-64/sonar.sh start",
                ExecStop: "#{node['sonar']['home_directory']}/bin/linux-x86-64/sonar.sh stop",
                User: sonar_user,
                Group: sonar_group,
                Restart: 'always',
                LimitNOFILE: '65536',
                LimitNPROC: '4096',
              },
              Install: {
                WantedBy: 'multi-user.target',
              })
      triggers_reload true
      action %i(create enable)
    end

    # Restart sonar service on port 9000
    service 'sonar' do
      action %i(enable restart)
    end

    # sysctl max_map_count required by Elasticsearch bootstrap process.
    sysctl 'vm.max_map_count' do
      value node['sonar']['sysctl']['vm.max_map_count']
    end
  end
end
