diff options
author | 2020-02-12 11:35:20 +0000 | |
---|---|---|
committer | 2020-02-20 16:03:48 +0000 | |
commit | 26b76c02052269ea850d8d4efd6deb536115a0af (patch) | |
tree | f7485d7ccd0e7d95c000b9c05bce2c371c34581a /components/pm-subscription-handler/pmsh_service/pmsh_service_main.py | |
parent | d42ac06c733c43e19a01b4203c1b987b4973ccfd (diff) |
Add Support for Activation and Deactivation
* Add support for reconfiguration of the administrativeState field
* Add support for policy feedback handling
* Fix network function filter applying to non active network functions
Signed-off-by: ERIMROB <robertas.rimkus@est.tech>
Change-Id: Ic1cfc3207b2495c1d8d10acd0ed1c40114cf4643
Issue-ID: DCAEGEN2-1830
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() |