Add alarms and alarm clusters

Change-Id: I712f708400ad08ea3f640ef43535c92a6aaa86c9
diff --git a/neutron/files/grafana_influxdb.json b/neutron/files/grafana_influxdb.json
index 8bd139f..350b304 100644
--- a/neutron/files/grafana_influxdb.json
+++ b/neutron/files/grafana_influxdb.json
@@ -114,7 +114,7 @@
                 {
                   "key": "cluster_name",
                   "operator": "=",
-                  "value": "neutron-control-plane"
+                  "value": "neutron-control"
                 }
               ]
             }
@@ -242,7 +242,7 @@
                 {
                   "key": "cluster_name",
                   "operator": "=",
-                  "value": "neutron-data-plane"
+                  "value": "neutron-compute"
                 }
               ]
             }
diff --git a/neutron/meta/heka.yml b/neutron/meta/heka.yml
index d41ad08..9bb4a84 100644
--- a/neutron/meta/heka.yml
+++ b/neutron/meta/heka.yml
@@ -18,3 +18,136 @@
       priority: ["^Seq"]
       decoder: "neutron_decoder"
       splitter: "neutron_splitter"
+metric_collector:
+  trigger:
+    neutron_logs_error:
+      description: 'Too many errors have been detected in Neutron logs'
+      severity: warning
+      no_data_policy: okay
+      rules:
+      - metric: log_messages
+        field:
+          service: neutron
+          level: error
+        relational_operator: '>'
+        threshold: 0.1
+        window: 70
+        periods: 0
+        function: max
+    {%- if pillar.neutron.server is defined %}
+    neutron_api_local_endpoint:
+      description: 'Neutron API is locally down'
+      severity: down
+      rules:
+      - metric: openstack_check_local_api
+        field:
+          service: neutron-api
+        relational_operator: '=='
+        threshold: 0
+        window: 60
+        periods: 0
+        function: last
+    {%- endif %}
+  alarm:
+    {%- if pillar.neutron.compute is defined %}
+    neutron_logs_compute:
+      alerting: enabled
+      triggers:
+      - neutron_logs_error
+      dimension:
+        service: neutron-logs-compute
+    {%- endif %}
+    {%- if pillar.neutron.server is defined %}
+    neutron_logs:
+      alerting: enabled
+      triggers:
+      - neutron_logs_error
+      dimension:
+        service: neutron-logs
+    neutron_api_endpoint:
+      alerting: enabled
+      triggers:
+      - neutron_api_local_endpoint
+      dimension:
+        service: neutron-api-endpoint
+    {%- endif %}
+remote_collector:
+  trigger:
+    {%- if pillar.neutron.server is defined %}
+    neutron_api_check_failed:
+      description: 'Endpoint check for neutron-api is failed'
+      severity: down
+      rules:
+      - metric: openstack_check_api
+        field:
+          service: neutron-api
+        relational_operator: '=='
+        threshold: 0
+        window: 60
+        periods: 0
+        function: last
+    {%- endif %}
+  alarm:
+    {%- if pillar.neutron.server is defined %}
+    neutron_api_check:
+      alerting: true
+      triggers:
+      - neutron_api_check_failed
+      dimension:
+        service: neutron-api-check
+    {%- endif %}
+aggregator:
+  alarm_cluster:
+    neutron_logs_compute:
+      policy: highest_severity
+      group_by: hostname
+      match:
+        service: neutron-logs-compute
+      members:
+      - neutron_logs_compute
+      dimension:
+        service: neutron-compute
+    neutron_logs:
+      policy: highest_severity
+      group_by: hostname
+      match:
+        service: neutron-logs
+      members:
+      - neutron_logs
+      dimension:
+        service: neutron-control
+    neutron_api_endpoint:
+      policy: availability_of_members
+      group_by: hostname
+      match:
+        service: neutron-api-endpoint
+      members:
+      - neutron_api_endpoint
+      dimension:
+        service: neutron-control
+    neutron_api_check:
+      policy: highest_severity
+      match:
+        service: neutron-api-check
+      members:
+      - neutron_api_check
+      dimension:
+        service: neutron-control
+    neutron_control:
+      policy: highest_severity
+      match:
+        service: neutron-control
+      members:
+      - neutron_logs
+      - neutron_api_endpoint
+      - neutron_api_check
+      dimension:
+        cluster_name: neutron-control
+    neutron_compute:
+      policy: highest_severity
+      match:
+        service: neutron-compute
+      members:
+      - neutron_logs_compute
+      dimension:
+        cluster_name: neutron-compute