Skip to content

Commit

Permalink
(SUP-2192) Sytemd timers
Browse files Browse the repository at this point in the history
This commit replaces cron entries with systemd services and timers.  It
also fixes the existing tests and adds a few to the pe_metric spec tests:

* When systemd is not the init provider
* Collecting and not collecting Puppet server metrics
* Customizing the collection interval
  • Loading branch information
m0dular committed Jun 9, 2021
1 parent 3e807e1 commit e268acc
Show file tree
Hide file tree
Showing 28 changed files with 440 additions and 339 deletions.
5 changes: 5 additions & 0 deletions .sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ appveyor.yml:
Rakefile:
changelog_user: "puppetlabs"

spec/default_facts.yml:
extra_facts:
pe_server_version: '2016.4.5'
puppet_metrics_collector:
have_systemd: true
.rubocop.yml:
default_configs:
"Rspec/NamedSubject":
Expand Down
122 changes: 0 additions & 122 deletions files/amq_metrics

This file was deleted.

1 change: 1 addition & 0 deletions files/metrics_tidy
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,4 @@ tar --create --gzip --file "${metrics_directory}/${metrics_type}-$(date +%Y.%m.%
# We can assume that the json files have no spaces as they are created by our scripts
# Only run xargs if the file is >0 bytes
[[ -s $metrics_tmp ]] && xargs -a "$metrics_tmp" rm
exit 0
4 changes: 2 additions & 2 deletions files/psql_metrics
Original file line number Diff line number Diff line change
Expand Up @@ -149,8 +149,8 @@ module PuppetMetricsCollector
'--single-transaction', '--tuples-only', '--quiet']
psql_command += ["--dbname=#{database}"] unless database.nil?

command_line = ['/usr/bin/su', '-s', '/bin/bash', 'pe-postgres',
'-c', psql_command.join(' ')]
command_line = ['/usr/sbin/runuser', '-u', 'pe-postgres',
'--', *psql_command]

env = { 'PGOPTIONS' => "-c statement_timeout=#{timeout}s",
'PGTZ' => 'GMT' }
Expand Down
8 changes: 8 additions & 0 deletions lib/facter/puppet_metrics_collector.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@
end
end

chunk(:have_systemd) do
if Puppet::FileSystem.exist?('/proc/1/comm') && Puppet::FileSystem.read('/proc/1/comm').include?('systemd')
{ have_systemd: true }
else
{ have_systemd: false }
end
end

chunk(:pe_psql) do
if File.executable?('/opt/puppetlabs/server/bin/psql')
{ have_pe_psql: true }
Expand Down
132 changes: 70 additions & 62 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,12 @@
String $bolt_metrics_ensure = 'present',
Array[String] $bolt_hosts = puppet_metrics_collector::hosts_with_pe_profile('bolt_server'),
Integer $bolt_port = 62658,
String $activemq_metrics_ensure = 'absent',
Array[String] $activemq_hosts = puppet_metrics_collector::hosts_with_pe_profile('amq::broker'),
Integer $activemq_port = 8161,
Optional[String] $override_metrics_command = undef,
Optional[Array[String]] $puppetserver_excludes = undef,
Optional[Array[String]] $puppetdb_excludes = undef,
Optional[Array[String]] $orchestrator_excludes = undef,
Optional[Array[String]] $ace_excludes = undef,
Optional[Array[String]] $bolt_excludes = undef,
Optional[Array[String]] $activemq_excludes = undef,
Optional[Enum['influxdb', 'graphite', 'splunk_hec']] $metrics_server_type = undef,
Optional[String] $metrics_server_hostname = undef,
Optional[Integer] $metrics_server_port = undef,
Expand All @@ -36,82 +32,94 @@
$config_dir = "${output_dir}/config"
$scripts_dir = "${output_dir}/scripts"

# If the puppet_metrics_collector::system class is evaluted first,
# File[$output_dir] will already be defined along with common scripts.
if !defined(File[$output_dir]) {
file { [$output_dir, $scripts_dir]:
if $facts.dig('puppet_metrics_collector', 'have_systemd') {
# If the puppet_metrics_collector::system class is evaluted first,
# File[$output_dir] will already be defined along with common scripts.
if !defined(File[$output_dir]) {
file { [$output_dir, $scripts_dir]:
ensure => directory,
}

file { "${scripts_dir}/create-metrics-archive":
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/create-metrics-archive'
}

file { "${scripts_dir}/metrics_tidy":
ensure => file,
mode => '0744',
source => 'puppet:///modules/puppet_metrics_collector/metrics_tidy'
}
}

file { $config_dir:
ensure => directory,
}

file { "${scripts_dir}/create-metrics-archive":
file { "${scripts_dir}/json2timeseriesdb" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/create-metrics-archive'
source => 'puppet:///modules/puppet_metrics_collector/json2timeseriesdb'
}

file { "${scripts_dir}/metrics_tidy":
file { "${scripts_dir}/pe_metrics.rb" :
ensure => file,
mode => '0744',
source => 'puppet:///modules/puppet_metrics_collector/metrics_tidy'
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/pe_metrics.rb'
}
}

file { $config_dir:
ensure => directory,
}

file { "${scripts_dir}/json2timeseriesdb" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/json2timeseriesdb'
}

file { "${scripts_dir}/pe_metrics.rb" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/pe_metrics.rb'
}
file { "${scripts_dir}/puma_metrics" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/puma_metrics'
}

file { "${scripts_dir}/puma_metrics" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/puma_metrics'
}
file { "${scripts_dir}/tk_metrics" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/tk_metrics'
}

file { "${scripts_dir}/tk_metrics" :
ensure => file,
mode => '0755',
source => 'puppet:///modules/puppet_metrics_collector/tk_metrics'
}
exec { 'puppet_metrics_collector_daemon_reload':
command => 'systemctl daemon-reload',
path => ['/bin', '/usr/bin'],
refreshonly => true,
}

include puppet_metrics_collector::service::puppetserver
include puppet_metrics_collector::service::puppetdb
include puppet_metrics_collector::service::orchestrator
include puppet_metrics_collector::service::ace
include puppet_metrics_collector::service::bolt
include puppet_metrics_collector::service::activemq
include puppet_metrics_collector::service::puppetserver
include puppet_metrics_collector::service::puppetdb
include puppet_metrics_collector::service::orchestrator
include puppet_metrics_collector::service::ace
include puppet_metrics_collector::service::bolt

# LEGACY CLEANUP
# LEGACY CLEANUP

# Clean up old metrics directories created by the module before it was renamed.
# Clean up old metrics directories created by the module before it was renamed.

$legacy_dir = '/opt/puppetlabs/pe_metric_curl_cron_jobs'
$safe_output_dir = shellquote($output_dir)
$legacy_dir = '/opt/puppetlabs/pe_metric_curl_cron_jobs'
$safe_output_dir = shellquote($output_dir)

exec { "migrate ${legacy_dir} directory":
path => '/bin:/usr/bin',
command => "mv ${legacy_dir} ${safe_output_dir}",
onlyif => "[ ! -e ${safe_output_dir} -a -e ${legacy_dir} ]",
before => File[$output_dir],
}
exec { "migrate ${legacy_dir} directory":
path => '/bin:/usr/bin',
command => "mv ${legacy_dir} ${safe_output_dir}",
onlyif => "[ ! -e ${safe_output_dir} -a -e ${legacy_dir} ]",
before => File[$output_dir],
}

$legacy_files = [
'/opt/puppetlabs/bin/puppet-metrics-collector',
'/opt/puppetlabs/puppet-metrics-collector/bin',
]
$legacy_files = [
'/opt/puppetlabs/bin/puppet-metrics-collector',
'/opt/puppetlabs/puppet-metrics-collector/bin',
]

file { $legacy_files :
ensure => absent,
force => true,
file { $legacy_files :
ensure => absent,
force => true,
}
} else {
notify { 'systemd_provider_warning':
message => 'This module only works with systemd as the provider',
loglevel => warning,
}
}
}
Loading

0 comments on commit e268acc

Please sign in to comment.