Add OVS logstreamer

Change-Id: I8a5692e169fc0939b63ea45eab59a7e4dee04f68
diff --git a/neutron/meta/heka.yml b/neutron/meta/heka.yml
index 98b4d4f..195f44c 100644
--- a/neutron/meta/heka.yml
+++ b/neutron/meta/heka.yml
@@ -1,10 +1,12 @@
 {%- from "neutron/map.jinja" import server with context %}
-{%- if server.backend.engine == "ml2" %}
+{%- if server.get('backend', {}).engine is defined and server.backend.engine == "ml2" %}
 {% set neutron_agents = ('l3', 'dhcp', 'metadata', 'openvswitch') %}
 {%- else %}
 {% set neutron_agents = () %}
 {%- endif %}
 
+{% set ovs_support = pillar.neutron.get('compute', {}).get('enabled', False) or pillar.neutron.get('gateway', {}).get('enabled', False) %}
+
 log_collector:
   decoder:
     neutron:
@@ -12,6 +14,12 @@
       module_file: /usr/share/lma_collector/decoders/openstack_log.lua
       module_dir: /usr/share/lma_collector/common;/usr/share/heka/lua_modules
       adjust_timezone: true
+{%- if ovs_support %}
+    ovs:
+      engine: sandbox
+      module_file: /usr/share/lma_collector/decoders/ovs_log.lua
+      module_dir: /usr/share/lma_collector/common;/usr/share/heka/lua_modules
+{%- endif %}
   splitter:
     neutron:
       engine: token
@@ -25,7 +33,16 @@
       priority: ["^Seq"]
       decoder: "neutron_decoder"
       splitter: "neutron_splitter"
-{%- if pillar.neutron.server is defined %}
+{%- if ovs_support %}
+    ovs_log:
+      engine: logstreamer
+      log_directory: "/var/log/openvswitch"
+      file_match: '(?P<Service>ovs\-vswitchd|ovsdb\-server|ovs\-ctl)\.log$'
+      differentiator: ['Service']
+      priority: ["^Seq"]
+      decoder: "ovs_decoder"
+      splitter: "TokenSplitter"
+{%- endif %}
 metric_collector:
   trigger:
     neutron_logs_error:
@@ -42,6 +59,7 @@
         window: 70
         periods: 0
         function: max
+{%- if pillar.neutron.server is defined %}
     neutron_api_local_endpoint:
       description: 'Neutron API is locally down'
       severity: down
@@ -54,19 +72,28 @@
         window: 60
         periods: 0
         function: last
+{%- endif %}
   alarm:
-    neutron_logs:
+{%- if pillar.neutron.server is defined %}
+    neutron_logs_control:
       alerting: enabled
       triggers:
       - neutron_logs_error
       dimension:
-        service: neutron-logs
+        service: neutron-logs-control
     neutron_api_endpoint:
       alerting: enabled
       triggers:
       - neutron_api_local_endpoint
       dimension:
         service: neutron-api-endpoint
+{%- else %}
+    neutron_logs_data:
+      alerting: enabled
+      triggers:
+      - neutron_logs_error
+      dimension:
+        service: neutron-logs-data
 {%- endif %}
 {%- if pillar.neutron.server is defined %}
 remote_collector:
@@ -83,7 +110,7 @@
         window: 60
         periods: 0
         function: last
-    {%- for agent in neutron_agents %}
+{%- for agent in neutron_agents %}
     neutron_{{ agent }}_two_up:
       description: 'Some Neutron {{ agent }} agents are down'
       severity: warning
@@ -143,14 +170,14 @@
         window: 60
         periods: 0
         function: last
-    {%- endfor %}
+{%- endfor %}
   alarm:
     neutron_api_check:
       triggers:
       - neutron_api_check_failed
       dimension:
         service: neutron-api-check
-    {%- for agent in neutron_agents %}
+{%- for agent in neutron_agents %}
     neutron_{{ agent }}:
       alerting: enabled
       triggers:
@@ -159,18 +186,19 @@
       - neutron_{{ agent }}_two_up
       dimension:
         service: neutron-{{ agent }}
-    {%- endfor %}
+{%- endfor %}
 {%- endif %}
 aggregator:
   alarm_cluster:
-    neutron_logs:
+{%- if pillar.neutron.server is defined %}
+    neutron_logs_control:
       policy: status_of_members
       alerting: enabled
       group_by: hostname
       match:
-        service: neutron-logs
+        service: neutron-logs-control
       members:
-      - neutron_logs
+      - neutron_logs_control
       dimension:
         service: neutron-control
         nagios_host: 01-service-clusters
@@ -201,13 +229,13 @@
       match:
         service: neutron-control
       members:
-      - neutron_logs
+      - neutron_logs_control
       - neutron_api_endpoint
       - neutron_api_check
       dimension:
         cluster_name: neutron-control
         nagios_host: 00-top-clusters
-    {%- for agent in neutron_agents %}
+{%- for agent in neutron_agents %}
     neutron_{{ agent }}:
       policy: highest_severity
       alerting: enabled
@@ -218,7 +246,7 @@
       dimension:
         service: neutron-data
         nagios_host: 01-service-clusters
-    {%- endfor %}
+{%- endfor %}
 {%- if neutron_agents|length > 0 %}
     neutron_data:
       policy: highest_severity
@@ -226,10 +254,24 @@
       match:
         service: neutron-data
       members:
-    {%- for agent in neutron_agents %}
+      - neutron_logs_data
+{%- for agent in neutron_agents %}
       - neutron_{{ agent }}
-    {%- endfor %}
+{%- endfor %}
       dimension:
         cluster_name: neutron-data
         nagios_host: 00-top-clusters
 {%- endif %}
+{%- else %}
+    neutron_logs_data:
+      policy: status_of_members
+      alerting: enabled
+      group_by: hostname
+      match:
+        service: neutron-logs-data
+      members:
+      - neutron_logs_data
+      dimension:
+        service: neutron-data
+        nagios_host: 01-service-clusters
+{%- endif %}