def shutdown(self):
        self.shutdownEvt.wait()
        self.logger.info('Initiating shutdown...')

        # stop services
        self.logger.info('Stopping services...')
        for service in [x for x in self.services.values()
                        if x is not self]:
            service.shutdown()

        self.running = False
        
        # shutdown session manager
        if SessionManager.sm:
            self.logger.info('Closing session manager...')
            SessionManager.close()
        
        # close database
        if _db.db_handle:
            self.logger.info('Closing database...')
            _db.close()

        self.logger.info('All services have been shut down successfully')
        # shutdown logging
        logging.shutdown()
        self.shutdowninprogress = False
def close():
    SessionManager.close()
    _db.close()