Merge "Restart Heka services when removing config files"
diff --git a/heka/_common.sls b/heka/_common.sls
index 1753840..9f71c31 100644
--- a/heka/_common.sls
+++ b/heka/_common.sls
@@ -7,15 +7,24 @@
 /usr/share/lma_collector:
   file.recurse:
   - source: salt://heka/files/lua
+  - user: root
+  - group: heka
+  - file_mode: 640
+  - dir_mode: 750
+  - require:
+    - user: heka_user
 
 /usr/share/lma_collector/common/extra_fields.lua:
   file.managed:
   - source: salt://heka/files/extra_fields.lua
   - user: root
-  - mode: 644
+  - group: heka
+  - mode: 640
   - defaults:
       extra_fields: {{ server.extra_fields }}
   - template: jinja
+  - require:
+    - user: heka_user
 
 heka_user:
   user.present:
diff --git a/heka/_service.sls b/heka/_service.sls
index 874e9ca..cc36dab 100644
--- a/heka/_service.sls
+++ b/heka/_service.sls
@@ -13,6 +13,7 @@
   file.directory:
   - name: /var/cache/{{ service_name }}
   - user: heka
+  - group: heka
   - mode: 750
   - makedirs: true
 
@@ -271,6 +272,9 @@
       alarm_name: {{ alarm_name }}
       alarm: {{ alarm|yaml }}
       trigger: {{ service_metadata.get('trigger', {})|yaml }}
+      {%- if service_name != 'remote_collector' %}
+      hostname: {{ grains.host }}
+      {%- endif %}
 
 /usr/share/lma_collector/common/lma_{{ alarm_name|replace('-', '_') }}.lua:
   file.managed:
diff --git a/heka/files/lua/common/afd.lua b/heka/files/lua/common/afd.lua
index 0c4dbcd..2f0bea0 100644
--- a/heka/files/lua/common/afd.lua
+++ b/heka/files/lua/common/afd.lua
@@ -156,9 +156,12 @@
             alerting_enabled = alerting_enabled,
             notification_enabled = notification_enabled,
             notification_handler = notification_handler,
-            tag_fields = {'hostname', 'member'}
+            tag_fields = {'member'}
         }
     }
+    if hostname then
+        table.insert(msg.Fields.tag_fields, hostname)
+    end
 
     for name, value in pairs(dimensions) do
         table.insert(msg.Fields.tag_fields, name)
diff --git a/heka/files/lua/decoders/collectd.lua b/heka/files/lua/decoders/collectd.lua
index 7978bd2..3988c17 100644
--- a/heka/files/lua/decoders/collectd.lua
+++ b/heka/files/lua/decoders/collectd.lua
@@ -137,6 +137,8 @@
             elseif metric_source == 'disk' then
                 if sample['type'] == 'disk_io_time' then
                     msg['Fields']['name'] = 'disk' .. sep .. sample['dsnames'][i]
+                elseif sample['type'] == 'pending_operations' then
+                    msg['Fields']['name'] = 'disk' .. sep .. sample['type']
                 else
                     msg['Fields']['name'] = metric_name
                 end
@@ -457,7 +459,7 @@
                 msg['Fields']['name'] = 'logged_users'
                 msg['Fields']['hostname'] = sample['host']
                 table.insert(msg['Fields']['tag_fields'], 'hostname')
-            elseif metric_source ==  'libvirt' then
+            elseif metric_source ==  'libvirt' or metric_source == 'virt' then
                 -- collectd sends the instance's ID in the 'host' field
                 msg['Fields']['instance_id'] = sample['host']
                 table.insert(msg['Fields']['tag_fields'], 'instance_id')
diff --git a/heka/files/lua/filters/afd.lua b/heka/files/lua/filters/afd.lua
index 4b8de07..0e18e33 100644
--- a/heka/files/lua/filters/afd.lua
+++ b/heka/files/lua/filters/afd.lua
@@ -21,7 +21,7 @@
 
 local afd_file = read_config('afd_file') or error('afd_file must be specified')
 local afd_name = read_config('afd_name') or error('afd_name must be specified')
-local hostname = read_config('hostname') or error('hostname must be specified')
+local hostname = read_config('hostname')
 local dimensions_json = read_config('dimensions') or ''
 local activate_alerting = read_config('activate_alerting') or true
 local enable_notification = read_config('enable_notification') or false
diff --git a/heka/files/lua/filters/gse_cluster_filter.lua b/heka/files/lua/filters/gse_cluster_filter.lua
index 8b46fcf..a800cb1 100644
--- a/heka/files/lua/filters/gse_cluster_filter.lua
+++ b/heka/files/lua/filters/gse_cluster_filter.lua
@@ -66,8 +66,8 @@
         return -1, "Cannot find alarms in the AFD/GSE message"
     end
 
-    -- "hostname" is nil here when the input message is a GSE message, so nil
-    -- is not an error condition here
+    -- "hostname" is nil here when the input message is a GSE message or
+    -- an AFD message related to a cluster.
     local hostname = afd.get_entity_name('hostname')
 
     local cluster_ids = gse.find_cluster_memberships(member_id)
diff --git a/heka/files/toml/filter/afd_alarm.toml b/heka/files/toml/filter/afd_alarm.toml
index 7244022..5d4590c 100644
--- a/heka/files/toml/filter/afd_alarm.toml
+++ b/heka/files/toml/filter/afd_alarm.toml
@@ -9,7 +9,9 @@
 [afd_{{ alarm_name }}_filter.config]
 afd_file = "lma_{{ alarm_name|replace('-', '_') }}"
 afd_name = "{{ alarm_name }}"
-hostname = "{{ grains.host }}"
+{%- if hostname is defined %}
+hostname = "{{ hostname }}"
+{%- endif %}
 dimensions = '{{ salt['heka_alarming.dimensions'](alarm)|json }}'
 {%- set alerting = alarm.get('alerting', 'enabled') %}
 activate_alerting = {{ salt['heka_alarming.alarm_activate_alerting'](alerting) }}
diff --git a/metadata/service/aggregator/output/nagios.yml b/metadata/service/aggregator/output/nagios.yml
index 7c30db1..ae167c1 100644
--- a/metadata/service/aggregator/output/nagios.yml
+++ b/metadata/service/aggregator/output/nagios.yml
@@ -1,5 +1,12 @@
 parameters:
+  _param:
+    nagios_username: nagiosadmin
+    nagios_default_host_alarm_clusters: 00-clusters
+    nagios_host_dimension_key: nagios_host
   heka:
     aggregator:
-      nagios_host_dimension_key: nagios_host
-      nagios_host: ${_param:nagios_host}
\ No newline at end of file
+      nagios_host: ${_param:nagios_host}
+      nagios_username: ${_param:nagios_username}
+      nagios_password: ${_param:nagios_password}
+      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}
+      nagios_default_host_alarm_clusters: ${_param:nagios_default_host_alarm_clusters}
diff --git a/metadata/service/aggregator/output/sensu.yml b/metadata/service/aggregator/output/sensu.yml
index 394acb6..37b2cf8 100644
--- a/metadata/service/aggregator/output/sensu.yml
+++ b/metadata/service/aggregator/output/sensu.yml
@@ -1,5 +1,7 @@
 parameters:
+  _param:
+    sensu_source_dimension_key: nagios_host
   heka:
     aggregator:
-      sensu_source_dimension_key: nagios_host
+      sensu_source_dimension_key: ${_param:sensu_source_dimension_key}
       sensu_host: 127.0.0.1
diff --git a/metadata/service/metric_collector/output/nagios.yml b/metadata/service/metric_collector/output/nagios.yml
new file mode 100644
index 0000000..08a45dd
--- /dev/null
+++ b/metadata/service/metric_collector/output/nagios.yml
@@ -0,0 +1,12 @@
+parameters:
+  _param:
+    nagios_username: nagiosadmin
+    nagios_default_host_alarm_clusters: 00-clusters
+    nagios_host_dimension_key: nagios_host
+  heka:
+    metric_collector:
+      nagios_host: ${_param:nagios_host}
+      nagios_username: ${_param:nagios_username}
+      nagios_password: ${_param:nagios_password}
+      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}
+      nagios_default_host_alarm_clusters: ${_param:nagios_default_host_alarm_clusters}
diff --git a/metadata/service/metric_collector/single.yml b/metadata/service/metric_collector/single.yml
index 2e4a442..ad183a2 100644
--- a/metadata/service/metric_collector/single.yml
+++ b/metadata/service/metric_collector/single.yml
@@ -5,10 +5,8 @@
 parameters:
   _param:
     metric_collector_poolsize: 100
-    nagios_host_dimension_key: nagios_host
   heka:
     metric_collector:
       enabled: true
       influxdb_time_precision: ms
       poolsize: ${_param:metric_collector_poolsize}
-      nagios_host_dimension_key: ${_param:nagios_host_dimension_key}