diff options
author | krishnaa96 <krishna.moorthy6@wipro.com> | 2021-07-20 11:44:26 +0530 |
---|---|---|
committer | krishnaa96 <krishna.moorthy6@wipro.com> | 2021-07-20 14:38:09 +0530 |
commit | f90e03c6a749ee25df3ac74355981861d59160d0 (patch) | |
tree | 400b9f6b2ef6a07b1dbb4ebeeb58e8c026e00a45 /apps/pci/optimizers/config | |
parent | 555e5727d1c818108ff255a1b9fe4542b768ad5c (diff) |
Add cps client to PCI app
- Add CPS client
- Add configuration to switch between
CPS and config DB
Issue-ID: OPTFRA-978
Signed-off-by: krishnaa96 <krishna.moorthy6@wipro.com>
Change-Id: Ibce259123864a16e5f9e3b8e53563151d8036a88
Diffstat (limited to 'apps/pci/optimizers/config')
-rw-r--r-- | apps/pci/optimizers/config/__init__.py | 0 | ||||
-rw-r--r-- | apps/pci/optimizers/config/config_client.py | 37 | ||||
-rw-r--r-- | apps/pci/optimizers/config/configdb.py | 51 | ||||
-rw-r--r-- | apps/pci/optimizers/config/cps.py | 72 |
4 files changed, 160 insertions, 0 deletions
diff --git a/apps/pci/optimizers/config/__init__.py b/apps/pci/optimizers/config/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/apps/pci/optimizers/config/__init__.py diff --git a/apps/pci/optimizers/config/config_client.py b/apps/pci/optimizers/config/config_client.py new file mode 100644 index 0000000..7e5a737 --- /dev/null +++ b/apps/pci/optimizers/config/config_client.py @@ -0,0 +1,37 @@ +# ------------------------------------------------------------------------- +# Copyright (C) 2021 Wipro Limited. +# +# 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. +# +# ------------------------------------------------------------------------- +# + + +class ConfigClient(object): + + subclasses = {} + + @classmethod + def register_subclass(cls, type): + def decorator(subclass): + cls.subclasses[type] = subclass + return subclass + + return decorator + + @classmethod + def create(cls, type): + if type not in cls.subclasses: + raise ValueError('Bad config client type {}'.format(type)) + + return cls.subclasses[type]() diff --git a/apps/pci/optimizers/config/configdb.py b/apps/pci/optimizers/config/configdb.py new file mode 100644 index 0000000..cfc7ce1 --- /dev/null +++ b/apps/pci/optimizers/config/configdb.py @@ -0,0 +1,51 @@ +# ------------------------------------------------------------------------- +# Copyright (C) 2021 Wipro Limited. +# +# 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. +# +# ------------------------------------------------------------------------- +# + +from datetime import datetime as dt +import uuid + +from apps.pci.optimizers.config.config_client import ConfigClient +from osdf.config.base import osdf_config +from osdf.logging.osdf_logging import debug_log +from osdf.utils.interfaces import RestClient + + +@ConfigClient.register_subclass('configdb') +class ConfigDb(ConfigClient): + + def __init__(self): + self.config = osdf_config.deployment + uid, passwd = self.config['configDbUserName'], self.config['configDbPassword'] + headers = dict(transaction_id=str(uuid.uuid4())) + self.rc = RestClient(userid=uid, passwd=passwd, method="GET", log_func=debug_log.debug, headers=headers) + + def get_cell_list(self, network_id): + ts = dt.strftime(dt.now(), '%Y-%m-%d %H:%M:%S%z') + cell_list_url = '{}/{}/{}/{}'.format(self.config['configDbUrl'], + self.config['configDbGetCellListUrl'], network_id, ts) + return self.rc.request(raw_response=True, url=cell_list_url).json() + + def get_nbr_list(self, network_id, cell_id): + ts = dt.strftime(dt.now(), '%Y-%m-%d %H:%M:%S%z') + nbr_list_url = '{}/{}/{}/{}'.format(self.config['configDbUrl'], + self.config['configDbGetNbrListUrl'], cell_id, ts) + response = self.rc.request(url=nbr_list_url, raw_response=True).json() + + debug_log.debug("cell_id {} nbr_list {}".format(cell_id, response.get('nbrList'))) + + return response.get('nbrList', []) diff --git a/apps/pci/optimizers/config/cps.py b/apps/pci/optimizers/config/cps.py new file mode 100644 index 0000000..9cf1b1f --- /dev/null +++ b/apps/pci/optimizers/config/cps.py @@ -0,0 +1,72 @@ +# ------------------------------------------------------------------------- +# Copyright (C) 2021 Wipro Limited. +# +# 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 json + +from apps.pci.optimizers.config.config_client import ConfigClient +from osdf.config.base import osdf_config +from osdf.logging.osdf_logging import debug_log +from osdf.utils.interfaces import RestClient + + +@ConfigClient.register_subclass('cps') +class Cps(ConfigClient): + + def __init__(self): + self.config = osdf_config.deployment + username, password = self.config['cpsUsername'], self.config['cpsPassword'] + headers = { + "Content-Type": "application/json", + "Accept": "application/json" + } + self.rc = RestClient(userid=username, passwd=password, method="POST", + log_func=debug_log.debug, headers=headers) + + def get_cell_list(self, network_id): + cell_list_url = '{}/{}'.format(self.config['cpsUrl'], self.config['cpsCellListUrl']) + data = { + 'inputParameters': { + 'regionId': network_id + } + } + response = self.rc.request(url=cell_list_url, data=json.dumps(data)) + debug_log.debug("cell list response {}".format(response)) + return sorted([x['idNRCellCU'] for x in response.get('NRCellCU')]) + + def get_nbr_list(self, network_id, cell_id): + nbr_list_url = '{}/{}'.format(self.config['cpsUrl'], self.config['cpsNbrListUrl']) + data = { + 'inputParameters': { + 'regionId': network_id, + 'idNRCellCU': cell_id + } + } + response = self.rc.request(url=nbr_list_url, data=json.dumps(data)) + debug_log.debug("nbr list response {}".format(response)) + nbr_list = [] + for cell_relation in response.get('NRCellRelation'): + nbr = { + 'targetCellId': cell_relation['attributes']['nRTCI'], + 'pciValue': int(cell_relation['attributes']['nRPCI']), + 'ho': cell_relation['attributes']['isHOAllowed'] + } + nbr_list.append(nbr) + + debug_log.debug("cell_id {} nbr_list {}".format(cell_id, nbr_list)) + + return nbr_list |