Revert "Feature 11061: Clean MON to have only the dashboarder"

This reverts commit 8c141fe62eb1d1f097c4d1d92f19a19a5de22d20.

Change-Id: I9c83c3c832312915439c7aa4b5ad5e081163bfa4
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/osm_mon/cmd/mon_collector.py b/osm_mon/cmd/mon_collector.py
new file mode 100644
index 0000000..30e6676
--- /dev/null
+++ b/osm_mon/cmd/mon_collector.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2018 Whitestack, LLC
+# *************************************************************
+
+# This file is part of OSM Monitoring module
+# All Rights Reserved to Whitestack, LLC
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+
+#         http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: bdiaz@whitestack.com or glavado@whitestack.com
+##
+import argparse
+import logging
+import sys
+
+from osm_mon.collector.collector import Collector
+from osm_mon.core.config import Config
+from osm_mon.cmd.mon_utils import wait_till_core_services_are_ready
+
+
+def main():
+    parser = argparse.ArgumentParser(prog="osm-mon-collector")
+    parser.add_argument("--config-file", nargs="?", help="MON configuration file")
+    args = parser.parse_args()
+    cfg = Config(args.config_file)
+
+    root = logging.getLogger()
+    root.setLevel(logging.getLevelName(cfg.get("global", "loglevel")))
+    ch = logging.StreamHandler(sys.stdout)
+    ch.setLevel(logging.getLevelName(cfg.get("global", "loglevel")))
+    formatter = logging.Formatter(
+        "%(asctime)s - %(name)s - %(levelname)s - %(message)s", "%m/%d/%Y %I:%M:%S %p"
+    )
+    ch.setFormatter(formatter)
+    root.addHandler(ch)
+
+    log = logging.getLogger(__name__)
+    if wait_till_core_services_are_ready(cfg, "osm-mon-collector"):
+        log.info("Starting MON Collector...")
+        log.debug("Config: %s", cfg.conf)
+        log.info("Initializing database...")
+        try:
+            collector = Collector(cfg)
+            collector.collect_forever()
+        except Exception as e:
+            log.error("Failed to start MON Collector")
+            log.exception("Exception: %s", str(e))
+    else:
+        log.error("Failed to start MON Collector")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/osm_mon/cmd/mon_evaluator.py b/osm_mon/cmd/mon_evaluator.py
new file mode 100644
index 0000000..b1c0e2a
--- /dev/null
+++ b/osm_mon/cmd/mon_evaluator.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2018 Whitestack, LLC
+# *************************************************************
+
+# This file is part of OSM Monitoring module
+# All Rights Reserved to Whitestack, LLC
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+
+#         http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: bdiaz@whitestack.com or glavado@whitestack.com
+##
+import argparse
+import logging
+import sys
+
+from osm_mon.core.config import Config
+from osm_mon.evaluator.evaluator import Evaluator
+from osm_mon.cmd.mon_utils import wait_till_core_services_are_ready
+
+
+def main():
+    parser = argparse.ArgumentParser(prog="osm-mon-evaluator")
+    parser.add_argument("--config-file", nargs="?", help="MON configuration file")
+    args = parser.parse_args()
+    cfg = Config(args.config_file)
+
+    root = logging.getLogger()
+    root.setLevel(logging.getLevelName(cfg.get("global", "loglevel")))
+    ch = logging.StreamHandler(sys.stdout)
+    ch.setLevel(logging.getLevelName(cfg.get("global", "loglevel")))
+    formatter = logging.Formatter(
+        "%(asctime)s - %(name)s - %(levelname)s - %(message)s", "%m/%d/%Y %I:%M:%S %p"
+    )
+    ch.setFormatter(formatter)
+    root.addHandler(ch)
+
+    log = logging.getLogger(__name__)
+    if wait_till_core_services_are_ready(cfg, "osm-mon-evaluator"):
+        log.info("Starting MON Evaluator...")
+        log.debug("Config: %s", cfg.conf)
+        log.info("Initializing database...")
+        try:
+            evaluator = Evaluator(cfg)
+            evaluator.evaluate_forever()
+        except Exception as e:
+            log.error("Failed to start MON Evaluator")
+            log.exception("Exception: %s", str(e))
+    else:
+        log.error("Failed to start MON Evaluator")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/osm_mon/cmd/mon_healthcheck.py b/osm_mon/cmd/mon_healthcheck.py
new file mode 100644
index 0000000..7eae4c2
--- /dev/null
+++ b/osm_mon/cmd/mon_healthcheck.py
@@ -0,0 +1,73 @@
+# Copyright 2018 Whitestack, LLC
+# *************************************************************
+
+# This file is part of OSM Monitoring module
+# All Rights Reserved to Whitestack, LLC
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+
+#         http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: bdiaz@whitestack.com or glavado@whitestack.com
+##
+import argparse
+import logging
+import subprocess
+import sys
+
+import requests
+
+log = logging.getLogger(__name__)
+
+
+def main():
+    parser = argparse.ArgumentParser(prog="osm-mon-healthcheck")
+    parser.add_argument("--config-file", nargs="?", help="MON configuration file")
+    # args = parser.parse_args()
+    # cfg = Config(args.config_file)
+
+    if not _processes_running():
+        sys.exit(1)
+    if not _is_prometheus_exporter_ok():
+        sys.exit(1)
+    sys.exit(0)
+
+
+def _processes_running():
+    def _contains_process(processes, process_name):
+        for row in processes:
+            if process_name in row:
+                return True
+        return False
+
+    processes_to_check = ["osm-mon-collector", "osm-mon-evaluator", "osm-mon-server"]
+    ps = subprocess.Popen(["ps", "aux"], stdout=subprocess.PIPE).communicate()[0]
+    processes_running = ps.decode().split("\n")
+    for p in processes_to_check:
+        if not _contains_process(processes_running, p):
+            log.error("Process %s not running!" % p)
+            return False
+    return True
+
+
+def _is_prometheus_exporter_ok():
+    try:
+        r = requests.get("http://localhost:8000")
+        r.raise_for_status()
+        return True
+    except Exception:
+        log.exception("MON Prometheus exporter is not running")
+        return False
+
+
+if __name__ == "__main__":
+    main()
diff --git a/osm_mon/cmd/mon_server.py b/osm_mon/cmd/mon_server.py
new file mode 100644
index 0000000..c4fa08b
--- /dev/null
+++ b/osm_mon/cmd/mon_server.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2018 Whitestack, LLC
+# *************************************************************
+
+# This file is part of OSM Monitoring module
+# All Rights Reserved to Whitestack, LLC
+
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+
+#         http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact: bdiaz@whitestack.com or glavado@whitestack.com
+##
+import argparse
+import logging
+import sys
+
+from osm_mon.core.config import Config
+from osm_mon.server.server import Server
+from osm_mon.cmd.mon_utils import wait_till_core_services_are_ready
+
+
+def main():
+    parser = argparse.ArgumentParser(prog="osm-mon-server")
+    parser.add_argument("--config-file", nargs="?", help="MON configuration file")
+    args = parser.parse_args()
+    cfg = Config(args.config_file)
+
+    root = logging.getLogger()
+    root.setLevel(logging.getLevelName(cfg.get("global", "loglevel")))
+    ch = logging.StreamHandler(sys.stdout)
+    ch.setLevel(logging.getLevelName(cfg.get("global", "loglevel")))
+    formatter = logging.Formatter(
+        "%(asctime)s - %(name)s - %(levelname)s - %(message)s", "%m/%d/%Y %I:%M:%S %p"
+    )
+    ch.setFormatter(formatter)
+    root.addHandler(ch)
+
+    log = logging.getLogger(__name__)
+    if wait_till_core_services_are_ready(cfg, "osm-mon-server"):
+        log.info("Starting MON Server...")
+        log.debug("Config: %s", cfg.conf)
+        log.info("Initializing database...")
+        try:
+            server = Server(cfg)
+            server.run()
+        except Exception as e:
+            log.error("Failed to start MON Server")
+            log.exception("Exception: %s", str(e))
+    else:
+        log.error("Failed to start MON Server")
+
+
+if __name__ == "__main__":
+    main()