--- /dev/null
+# -*- coding: utf-8 -*-
+
+# This file is part of OSM Monitoring module
+
+# 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.
+
+import pymongo
+import time
+import socket
+import logging
+
+
+def wait_till_core_services_are_ready(config, process_name="osm-mon", commondb_wait_time=5, kafka_wait_time=5):
+
+ logging.debug("wait_till_services_are_ready()")
+
+ if not config:
+ logging.info("Config information is not available")
+ return False
+
+ # Check if common-db is ready
+ while(True):
+ commondb_url = config.conf["database"].get("uri")
+ try:
+ commondb = pymongo.MongoClient(commondb_url)
+ commondb.server_info()
+ break
+ except Exception:
+ logging.info("{} process is waiting for commondb to come up...".format(process_name))
+ time.sleep(commondb_wait_time)
+
+ # Check if kafka is ready
+ while(True):
+ port_in_use = False
+ # Logic to check kafka is ready
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+ if s.connect_ex(("kafka", int(config.conf["message"].get("port")))) == 0:
+ port_in_use = True
+ if port_in_use:
+ break
+ else:
+ logging.info("{} process is waiting for kafka to come up...".format(process_name))
+ time.sleep(kafka_wait_time)
+
+ return True