Merge pull request #84 from ppetit/policy

Added a policy for members of node clusters
diff --git a/heka/_service.sls b/heka/_service.sls
index f509f45..687b30d 100644
--- a/heka/_service.sls
+++ b/heka/_service.sls
@@ -2,13 +2,6 @@
 
 {%- if server.enabled is defined and server.enabled %}
 
-heka_{{ service_name }}_log_file:
-  file.managed:
-  - name: /var/log/{{ service_name }}.log
-  - user: heka
-  - mode: 644
-  - replace: false
-
 heka_{{ service_name }}_conf_dir:
   file.directory:
   - name: /etc/{{ service_name }}
@@ -53,6 +46,45 @@
 
 {%- if not systemd_enabled %}
 
+heka_{{ service_name }}_log_file:
+  file.managed:
+  - name: /var/log/{{ service_name }}.log
+  - user: heka
+  - mode: 644
+  - replace: false
+
+{%- set logrotate_conf = "/etc/logrotate_" ~ service_name ~ ".conf" %}
+
+{{ logrotate_conf }}:
+  file.managed:
+  - source: salt://heka/files/heka_logrotate.conf
+  - template: jinja
+  - defaults:
+    service_name: {{ service_name }}
+  - user: root
+  - group: root
+  - mode: 644
+
+{%- set logrotate_command = "/usr/local/bin/" ~ service_name ~ "_logrotate" %}
+
+{{ logrotate_command }}:
+  file.managed:
+  - source: salt://heka/files/heka_logrotate.cron
+  - template: jinja
+  - defaults:
+    service_name: {{ service_name }}
+    logrotate_conf: {{ logrotate_conf }}
+  - user: root
+  - group: root
+  - mode: 755
+  - require:
+    - file: {{ logrotate_conf }}
+  cron.present:
+  - identifier: {{ service_name }}_logrotate_cron
+  - minute: '*/30'
+  - require:
+    - file: {{ logrotate_command }}
+
 heka_{{ service_name }}_service_wrapper:
   file.managed:
   - name: /usr/local/bin/{{ service_name }}_wrapper
diff --git a/heka/files/heka_logrotate.conf b/heka/files/heka_logrotate.conf
new file mode 100644
index 0000000..2e290ad
--- /dev/null
+++ b/heka/files/heka_logrotate.conf
@@ -0,0 +1,21 @@
+/var/log/{{ service_name }}.log {
+  # Heka cannot be told to close its log file and re-open it so we need to
+  # use the copytruncate option
+  copytruncate
+  compress
+  delaycompress
+  missingok
+  notifempty
+  # logrotate allows to use only year, month, day and unix epoch
+  dateext
+  dateformat -%Y%m%d-%s
+  # number of rotated files to keep
+  rotate 10
+  # do not rotate files unless both size and time conditions are met
+  hourly
+  minsize 20M
+  # force rotate if filesize exceeded 100M
+  maxsize 100M
+  # this must map the /var/log directory group ownership
+  su root syslog
+}
diff --git a/heka/files/heka_logrotate.cron b/heka/files/heka_logrotate.cron
new file mode 100644
index 0000000..cc3e249
--- /dev/null
+++ b/heka/files/heka_logrotate.cron
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+test -x /usr/sbin/logrotate || exit 0
+
+LOCK_FILE="/var/lock/logrotate.{{ service_name }}.lock"
+
+lock() {
+    exec 903>$LOCK_FILE
+    flock -n 903 && return 0 || return 1
+}
+
+unlock() {
+    flock -u 903
+}
+
+fail() {
+    if [ -z "$1" ]
+    then
+        MESSAGE="WARNING logrotate failed, no reason provided"
+    else
+        MESSAGE=$1
+    fi
+    /usr/bin/logger -t logrotate "{{ service_name }} ${MESSAGE}"
+    unlock
+    exit 1
+}
+
+lock || fail "WARNING {{ service_name }} logrotate flock failed, exiting"
+
+
+TMP_FILE=$(/bin/mktemp)
+nice ionice -c3 /usr/sbin/logrotate -s /var/lib/logrotate/{{ service_name }}.status {{ logrotate_conf }} >& $TMP_FILE
+EXITVALUE=$?
+
+if [ -f /etc/redhat-release ] || [ -f /etc/centos-release ];
+then
+    # Due to bug in logrotate on centos/rhel, it always returns 0. Use grep for
+    # detect errors; exit code 1 is considered a success as no errors were
+    # found.
+    grep -q error $TMP_FILE
+    EXITVALUE=$?
+    EXPECTEDVALUE=1
+else
+    EXPECTEDVALUE=0
+fi
+rm $TMP_FILE
+
+if [ "${EXITVALUE}" != "${EXPECTEDVALUE}" ]; then
+    fail "ALERT exited abnormally with [${EXITVALUE}] (${EXPECTEDVALUE} was expected)"
+fi
+
+unlock
+exit 0
diff --git a/heka/files/lma_alarm.lua b/heka/files/lma_alarm.lua
index b826112..56530d3 100644
--- a/heka/files/lma_alarm.lua
+++ b/heka/files/lma_alarm.lua
@@ -35,6 +35,9 @@
             {%- endfor %}
           },
           {%- endif %}
+          {%- if _rule.value is defined %}
+          ['value'] = '{{ _rule.value }}',
+          {%- endif %}
         },
         {%- endfor %}
       },
diff --git a/heka/files/lua/decoders/collectd.lua b/heka/files/lua/decoders/collectd.lua
index 8762b54..b206100 100644
--- a/heka/files/lua/decoders/collectd.lua
+++ b/heka/files/lua/decoders/collectd.lua
@@ -260,6 +260,7 @@
                 end
             elseif metric_source == 'nova' then
                 if sample['plugin_instance'] == 'nova_services' or
+                   sample['plugin_instance'] == 'nova_services_percent' or
                    sample['plugin_instance'] == 'nova_service'  then
                     msg['Fields']['name'] = 'openstack_' .. sample['plugin_instance']
                     msg['Fields']['service'] = sample['meta']['service']
@@ -276,6 +277,7 @@
                 end
             elseif metric_source == 'cinder' then
                 if sample['plugin_instance'] == 'cinder_services' or
+                   sample['plugin_instance'] == 'cinder_services_percent' or
                    sample['plugin_instance'] == 'cinder_service' then
                     msg['Fields']['name'] = 'openstack_' .. sample['plugin_instance']
                     msg['Fields']['service'] = sample['meta']['service']
@@ -308,6 +310,7 @@
                 elseif sample['type_instance'] == 'subnets' then
                     msg['Fields']['name'] = 'openstack'  .. sep .. 'neutron' .. sep .. 'subnets'
                 elseif sample['type_instance'] == 'neutron_agents' or
+                       sample['type_instance'] == 'neutron_agents_percent' or
                        sample['type_instance'] == 'neutron_agent' then
                     msg['Fields']['name'] = 'openstack_' .. sample['type_instance']
                     msg['Fields']['service'] = sample['meta']['service']
diff --git a/heka/files/lua/decoders/lma_apache_access.lua b/heka/files/lua/decoders/lma_apache_access.lua
index 704e4d8..bf41ff1 100644
--- a/heka/files/lua/decoders/lma_apache_access.lua
+++ b/heka/files/lua/decoders/lma_apache_access.lua
@@ -77,11 +77,11 @@
     end
     if fields.request_time then
         if fields.request_time.representation == 'us' then
-            fields.http_response_size = fields.request_time.value / 1e6
+            fields.http_response_time = fields.request_time.value / 1e6
         elseif fields.request_time.representation == 'ms' then
-            fields.http_response_size = fields.request_time.value / 1e3
+            fields.http_response_time = fields.request_time.value / 1e3
         else
-            fields.http_response_size = fields.request_time.value
+            fields.http_response_time = fields.request_time.value
         end
         fields.request_time = nil
     end