Skip to content

Commit

Permalink
processes: Add missing options
Browse files Browse the repository at this point in the history
This change add some missing options:

* CollectContextSwitch
* CollectFileDescriptor
* CollectMemoryMaps

This options can be set globally or per process/processmatch.
  • Loading branch information
sileht committed Jul 10, 2018
1 parent cde21b6 commit 809e7b4
Show file tree
Hide file tree
Showing 9 changed files with 228 additions and 43 deletions.
38 changes: 38 additions & 0 deletions lib/puppet/parser/functions/collectd_convert_processes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
Puppet::Parser::Functions.newfunction(:collectd_convert_processes, type: :rvalue, arity: 1, doc: <<-ENDDOC
Converts the array from the old style to define process or processmatch in the
processes plugin into a create_resources compatible hash which
can be used with the new style define.
Example:
[ { 'name' => 'foo', 'regex' => '.*' } , { 'name' => 'bar', 'regex' => '[0-9]+' }, "alone" ]
will be converted to
{ 'foo' => { 'regex' => '.*' } , 'bar' => { 'regex' => '[0-9]+' }, 'alone' => {} }
ENDDOC
) do |args|
if args.size != 1
raise(Puppet::ParseError, 'convert_process_array(): Needs exactly one argument')
end

if args[0].is_a?(Hash)
return args[0] # Keep normal hiera hash as-is
end

parray = args[0]
unless parray.is_a?(Array)
raise(Puppet::ParseError, 'convert_process_array(): Needs an array as argument')
end

phash = {}

parray.each do |p|
if p.is_a?(String)
phash[p] = {}
elsif p.is_a?(Hash)
name = p.delete('name')
phash[name] = p
else
raise(Puppet::ParseError, 'convert_process_array(): array element must be string or hash')
end
end
return phash
end
28 changes: 0 additions & 28 deletions lib/puppet/parser/functions/collectd_convert_processmatch.rb

This file was deleted.

29 changes: 20 additions & 9 deletions manifests/plugin/processes.pp
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
# See http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_processes
class collectd::plugin::processes (
$ensure = 'present',
$order = 10,
$interval = undef,
Optional[Array] $processes = undef,
Optional[Array] $process_matches = undef,
Enum['present', 'absent'] $ensure = 'present',
Integer $order = 10,
Optional[Numeric] $interval = undef,
Optional[Array] $processes = undef,
Optional[Array] $process_matches = undef,
Optional[Boolean] $collect_context_switch = undef,
Optional[Boolean] $collect_file_descriptor = undef,
Optional[Boolean] $collect_memory_maps = undef,
) {

include ::collectd
Expand All @@ -25,21 +28,29 @@
}
concat::fragment { 'collectd_plugin_processes_conf_header':
order => '00',
content => '<Plugin processes>',
content => epp('collectd/plugin/processes-header.conf.epp'),
target => "${collectd::plugin_conf_dir}/processes-config.conf",
}

concat::fragment { 'collectd_plugin_processes_conf_footer':
order => '99',
content => '</Plugin>',
target => "${collectd::plugin_conf_dir}/processes-config.conf",
}

$defaults = { 'ensure' => $ensure }

if $processes {
collectd::plugin::processes::process { $processes : }
$process_resources = collectd_convert_processes($processes)
create_resources(
collectd::plugin::processes::process,
$process_resources,
$defaults,
)

}
if $process_matches {
$process_matches_resources = collectd_convert_processmatch($process_matches)
$defaults = { 'ensure' => $ensure }
$process_matches_resources = collectd_convert_processes($process_matches)
create_resources(
collectd::plugin::processes::processmatch,
$process_matches_resources,
Expand Down
14 changes: 11 additions & 3 deletions manifests/plugin/processes/process.pp
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
define collectd::plugin::processes::process (
$process = $name,
$ensure = 'present'
String $process = $name,
Enum['present', 'absent'] $ensure = 'present',
Optional[Boolean] $collect_context_switch = undef,
Optional[Boolean] $collect_file_descriptor = undef,
Optional[Boolean] $collect_memory_maps = undef,
) {

include collectd::plugin::processes
include collectd

concat::fragment{ "collectd_plugin_processes_conf_process_${process}":
order => '50',
content => "Process \"${process}\"\n",
content => epp('collectd/plugin/processes/process.conf.epp', {
'process' => $process,
'collect_context_switch' => $collect_context_switch,
'collect_file_descriptor' => $collect_file_descriptor,
'collect_memory_maps' => $collect_memory_maps,
}),
target => "${collectd::plugin_conf_dir}/processes-config.conf",
}

Expand Down
13 changes: 11 additions & 2 deletions manifests/plugin/processes/processmatch.pp
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
define collectd::plugin::processes::processmatch (
$regex,
$ensure = 'present',
$matchname = $name
$matchname = $name,
Optional[Boolean] $collect_context_switch = undef,
Optional[Boolean] $collect_file_descriptor = undef,
Optional[Boolean] $collect_memory_maps = undef,
) {

include collectd::plugin::processes
include collectd

concat::fragment{ "collectd_plugin_processes_conf_processmatch_${matchname}":
order => '51',
content => "ProcessMatch \"${matchname}\" \"${regex}\"\n",
content => epp('collectd/plugin/processes/processmatch.conf.epp', {
'matchname' => $matchname,
'regex' => $regex,
'collect_context_switch' => $collect_context_switch,
'collect_file_descriptor' => $collect_file_descriptor,
'collect_memory_maps' => $collect_memory_maps,
}),
target => "${collectd::plugin_conf_dir}/processes-config.conf",
}
}
106 changes: 105 additions & 1 deletion spec/classes/collectd_plugin_processes_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
is_expected.to contain_concat("#{options[:plugin_conf_dir]}/processes-config.conf").that_requires('File[collectd.d]')
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_header').with(
content: %r{<Plugin processes>},
content: "<Plugin processes>\n",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '00'
)
Expand All @@ -35,6 +35,110 @@
)
end
end
context ':ensure => present and overrided parameters' do
let :params do
{
collect_context_switch: true,
collect_file_descriptor: false,
collect_memory_maps: true,
processes: [
{
name: 'httpd',
collect_context_switch: false,
collect_file_descriptor: true,
collect_memory_maps: false
},
'mysql'
],
process_matches: [
{
name: 'post',
regex: 'post.*',
collect_context_switch: false,
collect_file_descriptor: true,
collect_memory_maps: false
},
{
name: 'dove',
regex: 'dove.*'
}
]
}
end

it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
is_expected.to contain_concat("#{options[:plugin_conf_dir]}/processes-config.conf").that_requires('File[collectd.d]')
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_header').with(
content: "<Plugin processes>
CollectContextSwitch true
CollectFileDescriptor false
CollectMemoryMaps true
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '00'
)
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_httpd').with(
content: " <Process \"httpd\">
CollectContextSwitch false
CollectFileDescriptor true
CollectMemoryMaps false
</Process>
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '50'
)
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_mysql').with(
content: " <Process \"mysql\">
</Process>
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '50'
)

is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_processmatch_post').with(
content: " <ProcessMatch \"post\" \"post.*\">
CollectContextSwitch false
CollectFileDescriptor true
CollectMemoryMaps false
</ProcessMatch>
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '51'
)
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_processmatch_dove').with(
content: " <ProcessMatch \"dove\" \"dove.*\">
</ProcessMatch>
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '51'
)
end
end

context ':ensure => present and overrided parameters backward compat for process' do
let :params do
{
processes: %w[process1 process2]
}
end

it "Will create #{options[:plugin_conf_dir]}/processes-config.conf" do
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_process1').with(
content: " <Process \"process1\">
</Process>
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '50'
)
is_expected.to contain_concat__fragment('collectd_plugin_processes_conf_process_process2').with(
content: " <Process \"process2\">
</Process>
",
target: "#{options[:plugin_conf_dir]}/processes-config.conf",
order: '50'
)
end
end
end
end
end
Expand Down
10 changes: 10 additions & 0 deletions templates/plugin/processes-header.conf.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<Plugin processes>
<% unless $collectd::plugin::processes::collect_context_switch =~ Undef { -%>
CollectContextSwitch <%= $collectd::plugin::processes::collect_context_switch %>
<% } -%>
<% unless $collectd::plugin::processes::collect_file_descriptor =~ Undef { -%>
CollectFileDescriptor <%= $collectd::plugin::processes::collect_file_descriptor %>
<% } -%>
<% unless $collectd::plugin::processes::collect_memory_maps =~ Undef { -%>
CollectMemoryMaps <%= $collectd::plugin::processes::collect_memory_maps %>
<% } -%>
16 changes: 16 additions & 0 deletions templates/plugin/processes/process.conf.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<%- | String $process,
Optional[Boolean] $collect_context_switch,
Optional[Boolean] $collect_file_descriptor,
Optional[Boolean] $collect_memory_maps,
| -%>
<Process "<%= $process %>">
<% unless $collect_context_switch =~ Undef { -%>
CollectContextSwitch <%= $collect_context_switch %>
<% } -%>
<% unless $collect_file_descriptor =~ Undef { -%>
CollectFileDescriptor <%= $collect_file_descriptor %>
<% } -%>
<% unless $collect_memory_maps =~ Undef { -%>
CollectMemoryMaps <%= $collect_memory_maps %>
<% } -%>
</Process>
17 changes: 17 additions & 0 deletions templates/plugin/processes/processmatch.conf.epp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<%- | String $matchname,
String $regex,
Optional[Boolean] $collect_context_switch,
Optional[Boolean] $collect_file_descriptor,
Optional[Boolean] $collect_memory_maps,
| -%>
<ProcessMatch "<%= $matchname %>" "<%= $regex %>">
<% unless $collect_context_switch =~ Undef { -%>
CollectContextSwitch <%= $collect_context_switch %>
<% } -%>
<% unless $collect_file_descriptor =~ Undef { -%>
CollectFileDescriptor <%= $collect_file_descriptor %>
<% } -%>
<% unless $collect_memory_maps =~ Undef { -%>
CollectMemoryMaps <%= $collect_memory_maps %>
<% } -%>
</ProcessMatch>

0 comments on commit 809e7b4

Please sign in to comment.