Enable multiple workers for alarm-gen

Change-Id: I31464193406b3f1e12c3a75e24b5557f9c755564
Closes-Bug: PROD-16431
diff --git a/.kitchen.yml b/.kitchen.yml
index c6d8196..eeb310a 100644
--- a/.kitchen.yml
+++ b/.kitchen.yml
@@ -64,6 +64,8 @@
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/single40.sls
+    excludes:
+      - ubuntu-trusty
   - name: analytics3
     provisioner:
       pillars-from-files:
@@ -72,6 +74,8 @@
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/analytics40.sls
+    excludes:
+      - ubuntu-trusty
   - name: control3
     provisioner:
       pillars-from-files:
@@ -80,6 +84,8 @@
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/control40.sls
+    excludes:
+      - ubuntu-trusty
   - name: cluster3
     provisioner:
       pillars-from-files:
@@ -88,6 +94,8 @@
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/cluster40.sls
+    excludes:
+      - ubuntu-trusty
   - name: tor3
     provisioner:
       pillars-from-files:
@@ -96,13 +104,19 @@
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/tor40.sls
+    excludes:
+      - ubuntu-trusty
   - name: vrouter3
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/vrouter.sls
+    excludes:
+      - ubuntu-trusty
   - name: vrouter40
     provisioner:
       pillars-from-files:
         opencontrail.sls: tests/pillar/vrouter40.sls
+    excludes:
+      - ubuntu-trusty
 
 # vim: ft=yaml sw=2 ts=2 sts=2 tw=125
diff --git a/.travis.yml b/.travis.yml
index 950b7af..0f60415 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -31,14 +31,14 @@
   # - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc323 SUITE=tor3
   # - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc323 SUITE=vrouter3
   # - PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=single3
-  - PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=analytics3
-  - PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=control3
+  #- PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=analytics3
+  #- PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=control3
   # - PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=cluster3
   # - PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=tor3
   - PLATFORM=trevorj/salty-whales:xenial OC_REPO=oc323 SUITE=vrouter3
   # - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=single40
-  - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=analytics40
-  - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=control40
+  #- PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=analytics40
+  #- PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=control40
   # - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=cluster40
   # - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=tor40
   # - PLATFORM=trevorj/salty-whales:trusty OC_REPO=oc40 SUITE=vrouter40
diff --git a/README.rst b/README.rst
index e3a8576..8e3f7df 100644
--- a/README.rst
+++ b/README.rst
@@ -866,6 +866,18 @@
           pci: 0000:81:00.1
       ...
 
+Increase number of alarm-gen workers
+------------------------------------
+
+Port prefix will increment used ports by workers starting with 5901.
+
+.. code-block:: yaml
+
+    collector:
+      alarm_gen:
+        workers: 1
+        port_prefix: 59
+
 Contrail client
 ---------------
 
diff --git a/metadata/service/control/analytics.yml b/metadata/service/control/analytics.yml
index 14b8542..fcc7ddd 100644
--- a/metadata/service/control/analytics.yml
+++ b/metadata/service/control/analytics.yml
@@ -48,6 +48,9 @@
         password: '${_param:keystone_admin_password}'
         token: '${_param:keystone_service_token}'
         tenant: admin
+      alarm_gen:
+        workers: 1
+        port_prefix: 59
     database:
       version: ${_param:opencontrail_version}
       cassandra:
diff --git a/metadata/service/control/cluster.yml b/metadata/service/control/cluster.yml
index fba6222..93a5acd 100644
--- a/metadata/service/control/cluster.yml
+++ b/metadata/service/control/cluster.yml
@@ -110,6 +110,9 @@
         password: '${_param:keystone_admin_password}'
         token: '${_param:keystone_service_token}'
         tenant: admin
+      alarm_gen:
+        workers: 1
+        port_prefix: 59
     database:
       version: ${_param:opencontrail_version}
       cassandra:
diff --git a/metadata/service/control/single.yml b/metadata/service/control/single.yml
index 2f4ee9d..ae20c5e 100644
--- a/metadata/service/control/single.yml
+++ b/metadata/service/control/single.yml
@@ -97,6 +97,9 @@
         password: '${_param:keystone_admin_password}'
         token: '${_param:keystone_service_token}'
         tenant: admin
+      alarm_gen:
+        workers: 1
+        port_prefix: 59
     database:
       version: ${_param:opencontrail_version}
       cassandra:
diff --git a/opencontrail/collector.sls b/opencontrail/collector.sls
index bfb3f25..46cdf9b 100644
--- a/opencontrail/collector.sls
+++ b/opencontrail/collector.sls
@@ -73,7 +73,7 @@
   - template: jinja
 {%- endif %}
 
-{%- if collector.version >= 3.0 and grains.get('init') != 'systemd' %}
+{%- if collector.version == 3.0 %}
 
 /etc/contrail/supervisord_analytics_files/contrail-analytics-nodemgr.ini:
   file.managed:
@@ -84,6 +84,12 @@
   file.managed:
   - source: salt://opencontrail/files/{{ collector.version }}/collector/supervisord_analytics.conf
 
+/etc/contrail/supervisord_analytics_files/contrail-alarm-gen.ini:
+  file.managed:
+  - source: salt://opencontrail/files/{{ collector.version }}/contrail-alarm-gen.ini
+  - makedirs: True
+  - template: jinja
+
 {%- endif %}
 
 {%- if not collector.get('config_only', False) %}
@@ -104,9 +110,10 @@
     - file: /etc/contrail/contrail-snmp-collector.conf
     - file: /etc/contrail/contrail-analytics-nodemgr.conf
     - file: /etc/contrail/contrail-alarm-gen.conf
-    {%- if collector.version >= 3.0 and grains.get('init') != 'systemd' %}
+    {%- if collector.version == 3.0 %}
     - file: /etc/contrail/supervisord_analytics_files/contrail-analytics-nodemgr.ini
     - file: /etc/contrail/supervisord_analytics.conf
+    - file: /etc/contrail/supervisord_analytics_files/contrail-alarm-gen.ini
     {%- endif %}
 
 {%- if grains.get('virtual_subtype', None) == "Docker" %}
diff --git a/opencontrail/files/3.0/contrail-alarm-gen.conf b/opencontrail/files/3.0/contrail-alarm-gen.conf
index 07dec5a..1da7577 100644
--- a/opencontrail/files/3.0/contrail-alarm-gen.conf
+++ b/opencontrail/files/3.0/contrail-alarm-gen.conf
@@ -3,6 +3,9 @@
 host_ip = {{ collector.bind.address }}
 #collectors = 127.0.0.1:8086
 #http_server_port = 5995
+{%- if collector.alarm_gen.workers != 1 %}
+http_server_port = {{ collector.alarm_gen.port_prefix }}01
+{%- endif %}
 log_local = 1
 log_level = SYS_NOTICE
 #log_category = 
diff --git a/opencontrail/files/3.0/contrail-alarm-gen.ini b/opencontrail/files/3.0/contrail-alarm-gen.ini
new file mode 100644
index 0000000..d1e3d7e
--- /dev/null
+++ b/opencontrail/files/3.0/contrail-alarm-gen.ini
@@ -0,0 +1,16 @@
+{%- from "opencontrail/map.jinja" import collector with context %}
+[program:contrail-alarm-gen]
+command=/usr/bin/contrail-alarm-gen -c /etc/contrail/contrail-alarm-gen.conf{%- if collector.alarm_gen.workers != 1 %} --worker_id %(process_num)s --http_server_port {{ collector.alarm_gen.port_prefix }}%(process_num)02d{%- endif %}
+numprocs={{ collector.alarm_gen.workers }}
+process_name=%(process_num)s
+priority=440
+autostart=true
+killasgroup=true
+stopsignal=KILL
+stdout_capture_maxbytes=1MB
+redirect_stderr=true
+stdout_logfile=/var/log/contrail/contrail-alarm-gen-%(process_num)s-stdout.log
+stderr_logfile=/var/log/contrail/contrail-alarm-gen-%(process_num)s-stderr.log
+startsecs=5
+exitcodes=0                   ; 'expected' exit codes for process (default 0,2)
+user=contrail
diff --git a/tests/pillar/analytics.sls b/tests/pillar/analytics.sls
index 0fe58c0..1a5e861 100644
--- a/tests/pillar/analytics.sls
+++ b/tests/pillar/analytics.sls
@@ -21,6 +21,9 @@
     discovery:
       host: 127.0.0.1
     data_ttl: 1
+    alarm_gen:
+      workers: 1
+      port_prefix: 59
     database:
       members:
       - host: 127.0.0.1
diff --git a/tests/pillar/cluster.sls b/tests/pillar/cluster.sls
index f3685e2..0da7506 100644
--- a/tests/pillar/cluster.sls
+++ b/tests/pillar/cluster.sls
@@ -89,6 +89,9 @@
     discovery:
       host: 127.0.0.1
     data_ttl: 1
+    alarm_gen:
+      workers: 1
+      port_prefix: 59
     database:
       members:
       - host: 127.0.0.1
diff --git a/tests/pillar/single.sls b/tests/pillar/single.sls
index 97fed12..859caf7 100644
--- a/tests/pillar/single.sls
+++ b/tests/pillar/single.sls
@@ -73,6 +73,9 @@
     discovery:
       host: 127.0.0.1
     data_ttl: 2
+    alarm_gen:
+      workers: 1
+      port_prefix: 59
     database:
       members:
       - host: 127.0.0.1