Processes plugin, config generation cleanup
diff --git a/collectd/client.sls b/collectd/client.sls
index 7056148..d4d4566 100644
--- a/collectd/client.sls
+++ b/collectd/client.sls
@@ -46,13 +46,13 @@
   - makedirs: true
   - user: root
 
-{%- set role_grains = {'collectd': {'plugin': {}}} %}
+{%- set service_grains = {'collectd': {'plugin': {}}} %}
 {%- for service_name, service in pillar.items() %}
 {%- if service.get('_support', {}).get('collectd', {}).get('enabled', False) %}
 {%- set grains_fragment_file = service_name+'/meta/collectd.yml' %}
 {%- macro load_grains_file() %}{% include grains_fragment_file %}{% endmacro %}
 {%- set grains_yaml = load_grains_file()|load_yaml %}
-{%- set _dummy = role_grains.collectd.plugin.update(grains_yaml.plugin) %}
+{%- set _dummy = service_grains.collectd.plugin.update(grains_yaml.plugin) %}
 {%- endif %}
 {%- endfor %}
 
@@ -64,7 +64,7 @@
   - user: root
   - mode: 600
   - defaults:
-    role_grains: {{ role_grains|yaml }}
+    service_grains: {{ service_grains|yaml }}
   - require:
     - pkg: collectd_client_packages
     - file: collectd_client_grains_dir
@@ -79,7 +79,7 @@
   - watch:
     - file: collectd_client_grain
 
-{%- for plugin_name, plugin in role_grains.collectd.plugin.iteritems() %}
+{%- for plugin_name, plugin in service_grains.collectd.plugin.iteritems() %}
 
 {{ client.config_dir }}/{{ plugin_name }}.conf:
   file.managed:
@@ -130,7 +130,9 @@
   - template: jinja
   - user: root
   - group: root
-  - mode: 660
+  - mode: 640
+  - defaults:
+    service_grains: {{ service_grains|yaml }}
   - require:
     - file: {{ client.config_dir }}
   - watch_in:
diff --git a/collectd/files/collectd.conf b/collectd/files/collectd.conf
index c266c7d..8cd5be1 100644
--- a/collectd/files/collectd.conf
+++ b/collectd/files/collectd.conf
@@ -878,20 +878,9 @@
 #	<Node>
 #</Plugin>
 
-{%- if pillar.get('external', {}).network_device is defined %}
-Include "{{ client.config_dir }}/plugin_snmp.conf"
-{%- endif %}
-
-{%- for plugin in client.get('plugins', []) %}
-Include "{{ client.config_dir }}/{{ plugin.name }}.conf"
+{%- for plugin_name, plugin in service_grains.collectd.plugin.iteritems() %}
+Include "{{ client.config_dir }}/{{ plugin_name }}.conf"
 {%- endfor %}
-
-{%- for service in client.supported_services %}
-{%- if service in grains.roles %}
-Include "{{ client.config_dir }}/{{ service|replace('.', '_') }}.conf"
-{%- endif %}
-{%- endfor %}
-
 {%- for backend_name, backend in client.backend.iteritems() %}
 Include "{{ client.config_dir }}/{{ backend_name }}.conf"
 {%- endfor %}
diff --git a/collectd/files/collectd.grain b/collectd/files/collectd.grain
index 36d1494..3e3b373 100644
--- a/collectd/files/collectd.grain
+++ b/collectd/files/collectd.grain
@@ -1 +1 @@
-{{ role_grains|yaml(False) }}
+{{ service_grains|yaml(False) }}
diff --git a/collectd/files/collectd_processes.conf b/collectd/files/collectd_processes.conf
new file mode 100644
index 0000000..abc1ec1
--- /dev/null
+++ b/collectd/files/collectd_processes.conf
@@ -0,0 +1,6 @@
+LoadPlugin processes
+<Plugin processes>
+    {%- for process_name, process in plugin.process.iteritems() %}
+    ProcessMatch "{{ process_name }}" "{{ process.metric }}"
+    {%- endfor %}
+</Plugin>
\ No newline at end of file
diff --git a/collectd/map.jinja b/collectd/map.jinja
index 0816db0..983cfec 100644
--- a/collectd/map.jinja
+++ b/collectd/map.jinja
@@ -1,11 +1,3 @@
-{% set supported_services = [
-  'linux.system',
-  'memcached.server',
-  'mysql.server',
-  'nginx.server',
-  'nova.compute',
-  'postgresql.server',
-] %}
 
 {% set client = salt['grains.filter_by']({
     'Arch': {
@@ -13,20 +5,17 @@
         'service': 'collectd',
         'config_file': '/etc/collectd.conf',
         'config_dir': '/etc/collectd.d',
-        'supported_services': supported_services
     },
     'Debian': {
         'pkgs': ['collectd-core', 'snmp'],
         'service': 'collectd',
         'config_file': '/etc/collectd/collectd.conf',
         'config_dir': '/etc/collectd/conf.d',
-        'supported_services': supported_services
     },
     'RedHat': {
         'pkgs': ['collectd', 'collectd-virt', 'collectd-ping', 'net-snmp'],
         'service': 'collectd',
         'config_file': '/etc/collectd.conf',
         'config_dir': '/etc/collectd.d',
-        'supported_services': supported_services
     },
 }, merge=salt['pillar.get']('collectd:client')) %}
diff --git a/collectd/meta/collectd.yml b/collectd/meta/collectd.yml
index c67d99d..d98f426 100644
--- a/collectd/meta/collectd.yml
+++ b/collectd/meta/collectd.yml
@@ -1,7 +1,16 @@
-{%- if pillar.get('external', {}).network_device is defined %}
 plugin:
+  collectd_processes:
+    plugin: processes
+    interval: 60
+    template: collectd/files/collectd_processes.conf
+    process:
+      collectd:
+        metric: collectd.client
+{%- if pillar.get('external', {}).network_device is defined %}
   collectd_network_device:
     plugin: snmp
+    interval: 60
+    template: collectd/files/collectd_snmp.conf
     data:
       std_traffic:
         type: if_octets
@@ -18,6 +27,4 @@
         - 1.3.6.1.2.1.31.1.1.1.7
         - 1.3.6.1.2.1.31.1.1.1.11
     host: {{ pillar.external.network_device }}
-{%- else %}
-plugin: {}
 {%- endif %}
\ No newline at end of file