diff options
author | Joseph O'Leary <joseph.o.leary@est.tech> | 2020-02-21 08:44:13 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2020-02-21 08:44:13 +0000 |
commit | 06d595819918da57b6ce3ffeb9346c7913f2c66b (patch) | |
tree | 2e6429d28d6ca3a02e40fb18c047e71fe3eeb01a /components/pm-subscription-handler/pmsh_service/pmsh_service_main.py | |
parent | c462be48a8b56a7e925315d79f18c5c97123459f (diff) | |
parent | 26b76c02052269ea850d8d4efd6deb536115a0af (diff) |
Merge "Add Support for Activation and Deactivation"
Diffstat (limited to 'components/pm-subscription-handler/pmsh_service/pmsh_service_main.py')
-rwxr-xr-x | components/pm-subscription-handler/pmsh_service/pmsh_service_main.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/components/pm-subscription-handler/pmsh_service/pmsh_service_main.py b/components/pm-subscription-handler/pmsh_service/pmsh_service_main.py new file mode 100755 index 00000000..ab330320 --- /dev/null +++ b/components/pm-subscription-handler/pmsh_service/pmsh_service_main.py @@ -0,0 +1,94 @@ +# ============LICENSE_START=================================================== +# Copyright (C) 2019-2020 Nordix Foundation. +# ============================================================================ +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +import sys +import time +import threading + +import mod.aai_client as aai +import mod.pmsh_logging as logger +from mod import db, create_app +from mod.config_handler import ConfigHandler +from mod.pmsh_utils import AppConfig +from mod.subscription import Subscription, AdministrativeState + + +def subscription_processor(config_handler, administrative_state, mr_pub, app): + """ + Checks for changes of administrative state in config and proceeds to process + the Subscription if a change has occurred + + Args: + config_handler (ConfigHandler): Configuration Handler used to get config + administrative_state (str): The administrative state + mr_pub (_MrPub): MR publisher + app (db): DB application + """ + app.app_context().push() + config = config_handler.get_config() + sub, nfs = aai.get_pmsh_subscription_data(config) + new_administrative_state = config['policy']['subscription']['administrativeState'] + polling_period = 30.0 + + try: + if administrative_state == new_administrative_state: + logger.debug('Administrative State did not change in the Config') + else: + sub.process_subscription(nfs, mr_pub) + + except Exception as err: + logger.debug(f'Error occurred during the activation/deactivation process {err}') + + threading.Timer(polling_period, subscription_processor, + [config_handler, new_administrative_state, mr_pub, app]).start() + + +def main(): + + try: + config_handler = ConfigHandler() + config = config_handler.get_config() + app_conf = AppConfig(**config['config']) + app = create_app() + app.app_context().push() + db.create_all(app=app) + sub, nfs = aai.get_pmsh_subscription_data(config) + mr_pub = app_conf.get_mr_pub('policy_pm_publisher') + mr_sub = app_conf.get_mr_sub('policy_pm_subscriber') + initial_start_delay = 5.0 + + administrative_state = AdministrativeState.LOCKED.value + subscription_in_db = Subscription.get(sub.subscriptionName) + if subscription_in_db is not None: + administrative_state = subscription_in_db.status + + threading.Timer(initial_start_delay, subscription_processor, + [config_handler, administrative_state, mr_pub, app]).start() + + threading.Timer(20.0, mr_sub.poll_policy_topic, [sub.subscriptionName, app]).start() + + except Exception as e: + logger.debug(f'Failed to Init PMSH: {e}') + sys.exit(e) + + while True: + logger.debug(Subscription.get_all_nfs_subscription_relations()) + time.sleep(5) + + +if __name__ == '__main__': + main() |