[PM] Adds support for logstash

[PM] Modifies Dockerfile to optimize use of cache
[MON] Fixes py3 compatibility issue in Aodh notifier
[MON] Removes use of sudo in vrops webservice script

Signed-off-by: diazb <bdiaz@whitestack.com>
Change-Id: I93b4bb57f49238a57067cf035509c3e62da5ec2a
diff --git a/policy_module/Dockerfile b/policy_module/Dockerfile
index 8bb614b..6e93b30 100644
--- a/policy_module/Dockerfile
+++ b/policy_module/Dockerfile
@@ -24,13 +24,16 @@
 
 LABEL authors="Benjamín Díaz"
 
-ADD . /policy_module
-
 RUN apt-get --yes update \
- && apt-get --yes install software-properties-common python-software-properties \
- && apt-get --yes install git python python-pip sudo libmysqlclient-dev libxext-dev libxrender-dev libxtst-dev \
- && pip install pip==9.0.3 \
- && pip install -r /policy_module/requirements.txt \
- && pip install /policy_module
+ && apt-get --yes install python3 python3-pip libmysqlclient-dev \
+ && pip3 install pip==9.0.3
+
+COPY requirements.txt /policy_module/requirements.txt
+
+RUN pip3 install -r /policy_module/requirements.txt
+
+COPY . /policy_module
+
+RUN pip3 install /policy_module
 
 CMD bash /policy_module/scripts/gen_config_from_env.sh && osm-policy-agent --config osm_policy_agent.cfg
diff --git a/policy_module/osm_policy_module/cmd/policy_module_agent.py b/policy_module/osm_policy_module/cmd/policy_module_agent.py
index 53cf969..b9d6ca9 100644
--- a/policy_module/osm_policy_module/cmd/policy_module_agent.py
+++ b/policy_module/osm_policy_module/cmd/policy_module_agent.py
@@ -24,6 +24,7 @@
 import argparse
 import logging
 import sys
+import logstash
 
 from osm_policy_module.core.agent import PolicyModuleAgent
 from osm_policy_module.core.config import Config
@@ -48,10 +49,18 @@
                             format='%(asctime)s %(message)s',
                             datefmt='%m/%d/%Y %I:%M:%S %p', filemode='a',
                             level=logging.INFO)
+    if cfg.get('policy_module', 'enable_logstash_handler') == 'true':
+        logstash_host = cfg.get('policy_module', 'logstash_host')
+        logstash_port = int(cfg.get('policy_module', 'logstash_port'))
+        root_logger = logging.getLogger()
+        root_logger.addHandler(logstash.TCPLogstashHandler(logstash_host, logstash_port, version=1))
+        root_logger.info("Logstash handler configured.")
     log = logging.getLogger(__name__)
+    log.info("Config: %s", cfg)
     log.info("Syncing database...")
     db_manager = DatabaseManager()
     db_manager.create_tables()
+    log.info("Database synced correctly.")
     log.info("Starting policy module agent...")
     agent = PolicyModuleAgent()
     agent.run()
diff --git a/policy_module/osm_policy_module/core/config.py b/policy_module/osm_policy_module/core/config.py
index ea41fc3..9899009 100644
--- a/policy_module/osm_policy_module/core/config.py
+++ b/policy_module/osm_policy_module/core/config.py
@@ -45,7 +45,10 @@
                 'kafka_server_host': '127.0.0.1',
                 'kafka_server_port': '9092',
                 'log_dir': 'stdout',
-                'log_level': 'INFO'
+                'log_level': 'INFO',
+                'enable_logstash_handler': 'false',
+                'logstash_host': 'logstash',
+                'logstash_port': '5000'
             },
         }
 
@@ -65,3 +68,6 @@
                 return self.config[group]
             return self.config[group].get(name, default)
         return default
+
+    def __str__(self):
+        return str(self.config)
diff --git a/policy_module/requirements.txt b/policy_module/requirements.txt
index f92cee9..e387896 100644
--- a/policy_module/requirements.txt
+++ b/policy_module/requirements.txt
@@ -1,5 +1,6 @@
 kafka==1.3.*
 peewee==3.1.*
 jsonschema==2.6.*
-six
-pyyaml
\ No newline at end of file
+six==1.11.*
+pyyaml==3.*
+python-logstash==0.4.*
\ No newline at end of file
diff --git a/policy_module/scripts/gen_config_from_env.sh b/policy_module/scripts/gen_config_from_env.sh
index fb71c82..3dcaf67 100644
--- a/policy_module/scripts/gen_config_from_env.sh
+++ b/policy_module/scripts/gen_config_from_env.sh
@@ -9,4 +9,11 @@
     PORT=$(echo $BROKER_URI | cut -d: -f2)
     echo "kafka_server_host=$HOST" >> $CONFIG_FILENAME
     echo "kafka_server_port=$PORT" >> $CONFIG_FILENAME
+fi
+if ! [[ -z "${LOGSTASH_URI}" ]]; then
+    HOST=$(echo $LOGSTASH_URI | cut -d: -f1)
+    PORT=$(echo $LOGSTASH_URI | cut -d: -f2)
+    echo "enable_logstash_handler=true" >> $CONFIG_FILENAME
+    echo "logstash_host=$HOST" >> $CONFIG_FILENAME
+    echo "logstash_port=$PORT" >> $CONFIG_FILENAME
 fi
\ No newline at end of file