Fix jmx exporter configuration to be generic

Change-Id: I063aa13578f44c6afe00a8208e4bcab13a3711a4
Depends-On: If5cf3662f96311a5f37055c0f62934ba5407a978
Depends-On: Ie889b5f8d485aa7f41166fc3f90bb6554681c68e
Depends-On: b1d45f94e5446fdba437598f1b2185c902874a4e
diff --git a/opencontrail/files/jmx-exporter-default b/opencontrail/files/jmx-exporter-default
new file mode 100644
index 0000000..3982105
--- /dev/null
+++ b/opencontrail/files/jmx-exporter-default
@@ -0,0 +1 @@
+JMX_EXPORTER_OPTS="{{ bind.address|default("0.0.0.0") }}:{{ bind.port|default(9111) }} {{ cfg_file }}"
diff --git a/opencontrail/files/jmx_exporter_cassandra.conf b/opencontrail/files/jmx_exporter_cassandra.conf
new file mode 100644
index 0000000..150bd32
--- /dev/null
+++ b/opencontrail/files/jmx_exporter_cassandra.conf
@@ -0,0 +1,15 @@
+hostPort: {{ jmxbind.address|default("localhost") }}:{{ jmxbind.port|default(7199) }}
+whitelistObjectNames:
+  - "java.lang:type=Memory"
+  - "java.lang:type=GarbageCollector,name=ConcurrentMarkSweep,*"
+  - "java.lang:type=MemoryPool,name=CMS*Gen,*"
+  - "org.apache.cassandra.net:type=FailureDetector,*"
+  - "org.apache.cassandra.db:type=StorageService,*"
+  - "org.apache.cassandra.metrics:type=Compaction,*"
+  - "org.apache.cassandra.metrics:type=Storage,*"
+  - "org.apache.cassandra.metrics:type=Client,*"
+  - "org.apache.cassandra.metrics:type=ClientRequest,scope=Read,*"
+  - "org.apache.cassandra.metrics:type=ClientRequest,scope=Write,*"
+rules:
+  - pattern: '.*'
+    replaceDomains: {'^java.lang(.*)$' : 'cassandra.jvm$1', '^org.apache.cassandra(.*)$' : 'cassandra$1' } 
diff --git a/opencontrail/meta/prometheus.yml b/opencontrail/meta/prometheus.yml
index 2453538..73785bd 100644
--- a/opencontrail/meta/prometheus.yml
+++ b/opencontrail/meta/prometheus.yml
@@ -48,6 +48,38 @@
     {%- endif %}
   {%- endif %}
 
+  {%- if database_processes is defined and
+         database.get('cassandra', False) and
+         exporters is defined %}
+{%- set packages = exporters.get('jmx', {}).get('packages', ('jmx-exporter', )) %}
+{%- set template = exporters.get('jmx', {}).get('template', 'opencontrail/files/jmx-exporter-default') %}
+    {%- load_yaml as new_exporters_cfg %}
+exporters:
+  jmx:
+    enabled: true
+{%- if packages is defined %}
+    packages:
+    {% for pkg in packages %}
+    - {{ pkg }}
+    {% endfor %}
+{%- endif %}
+{%- if template is defined %}
+    template:  {{ template }}
+{%- endif %}
+    services:
+      cassandra:
+        enabled: true
+        template: opencontrail/files/jmx_exporter_cassandra.conf
+        jmx_bind:
+          address: localhost
+          port: 7199
+        bind:
+          address: 0.0.0.0
+          port: 9111
+    {%- endload %}
+{{ new_exporters_cfg|yaml(False) }}
+  {%- endif %}
+
   {%- if control_processes is defined or
          collector_processes is defined or
          compute_processes is defined or
@@ -457,6 +489,9 @@
         description: '{{ contrail_process }} service is down on node {% raw %}{{ $labels.host }}{% endraw %}'
       {%- endfor %}
     {%- endif %}
+    {%- if exporters is defined %}
+      {%- include "prometheus/_exporters_config.sls" %}
+    {%- endif %}
   {%- endif %}
 {%- endif %}