Fix INF-328 and INF-373 the resource change and update issue 40/9940/1
authorZhang Rong(Jon) <rong.zhang@windriver.com>
Tue, 22 Nov 2022 13:27:11 +0000 (21:27 +0800)
committerJackie Huang <jackie.huang@windriver.com>
Mon, 5 Dec 2022 04:47:14 +0000 (12:47 +0800)
Issue-ID: INF-328
Issue-ID: INF-373
Issue-ID: INF-374
Signed-off-by: Zhang Rong(Jon) <rong.zhang@windriver.com>
Change-Id: I579585e0b5be9129d3921d77025aa7c4f898f83c

14 files changed:
o2ims/adapter/clients/ocloud_client.py
o2ims/service/auditor/alarm_handler.py
o2ims/service/auditor/ocloud_handler.py
o2ims/service/auditor/pserver_acc_handler.py
o2ims/service/auditor/pserver_cpu_handler.py
o2ims/service/auditor/pserver_dev_handler.py
o2ims/service/auditor/pserver_eth_handler.py
o2ims/service/auditor/pserver_handler.py
o2ims/service/auditor/pserver_if_handler.py
o2ims/service/auditor/pserver_mem_handler.py
o2ims/service/auditor/pserver_port_handler.py
o2ims/service/auditor/pserver_res_handler.py [new file with mode: 0644]
o2ims/service/auditor/resourcepool_handler.py
o2ims/service/command/notify_handler.py

index 015da1f..b8eeb21 100644 (file)
@@ -43,7 +43,7 @@ class StxOcloudClient(BaseClient):
     def _get(self, id) -> ocloudModel.StxGenericModel:
         return self.driver.getInstanceInfo()
 
-    def _list(self, **filters):
+    def _list(self, **filters) -> List[ocloudModel.StxGenericModel]:
         return [self.driver.getInstanceInfo()]
 
     def _set_stx_client(self):
@@ -58,7 +58,7 @@ class StxResourcePoolClient(BaseClient):
     def _get(self, id) -> ocloudModel.StxGenericModel:
         return self.driver.getResourcePoolDetail(id)
 
-    def _list(self, **filters):
+    def _list(self, **filters) -> List[ocloudModel.StxGenericModel]:
         return self.driver.getResourcePoolList(**filters)
 
     def _set_stx_client(self):
@@ -73,7 +73,7 @@ class StxDmsClient(BaseClient):
     def _get(self, name) -> ocloudModel.StxGenericModel:
         return self.driver.getK8sDetail(name)
 
-    def _list(self, **filters):
+    def _list(self, **filters) -> List[ocloudModel.StxGenericModel]:
         return self.driver.getK8sList(**filters)
 
     def _set_stx_client(self):
@@ -536,23 +536,65 @@ class StxClientImp(object):
 
     @ staticmethod
     def _hostconverter(host):
+        selected_keys = [
+            "hostname", "personality", "id", "mgmt_ip", "mgmt_mac",
+            "software_load", "capabilities",
+            "operational", "availability", "administrative",
+            "boot_device", "rootfs_device", "install_state", "subfunctions",
+            "clock_synchronization", "max_cpu_mhz_allowed"
+        ]
+        content = host.to_dict()
+        filtered = dict(
+            filter(lambda item: item[0] in selected_keys, content.items()))
+        setattr(host, 'filtered', filtered)
         setattr(host, 'name', host.hostname)
         return host
 
     @ staticmethod
     def _cpuconverter(cpu):
+        selected_keys = [
+            "cpu", "core", "thread", "allocated_function", "numa_node",
+            "cpu_model", "cpu_family"
+        ]
+        content = cpu.to_dict()
+        filtered = dict(
+            filter(lambda item: item[0] in selected_keys, content.items()))
+        setattr(cpu, 'filtered', filtered)
         setattr(cpu, 'name', cpu.ihost_uuid.split(
             '-', 1)[0] + '-cpu-'+str(cpu.cpu))
         return cpu
 
     @ staticmethod
     def _memconverter(mem):
+        selected_keys = [
+            "memtotal_mib", "memavail_mib", "vm_hugepages_use_1G",
+            "vm_hugepages_possible_1G", "hugepages_configured",
+            "vm_hugepages_avail_1G", "vm_hugepages_nr_1G",
+            "vm_hugepages_nr_4K", "vm_hugepages_nr_2M",
+            "vm_hugepages_possible_2M", "vm_hugepages_avail_2M",
+            "platform_reserved_mib", "numa_node"
+        ]
+        content = mem.to_dict()
+        filtered = dict(
+            filter(lambda item: item[0] in selected_keys, content.items()))
+        setattr(mem, 'filtered', filtered)
         setattr(mem, 'name', mem.ihost_uuid.split('-', 1)[0] +
                 '-mem-node-'+str(mem.numa_node))
         return mem
 
     @ staticmethod
     def _ethconverter(eth):
+        selected_keys = [
+            "name", "namedisplay", "dev_id", "pdevice", "capabilities",
+            "type", "driver", "mac", "numa_node",
+            "pciaddr", "pclass", "psvendor", "psdevice",
+            "sriov_totalvfs", "sriov_numvfs", "dpdksupport",
+            "sriov_vf_driver", "sriov_vf_pdevice_id", "interface_uuid"
+        ]
+        content = eth.to_dict()
+        filtered = dict(
+            filter(lambda item: item[0] in selected_keys, content.items()))
+        setattr(eth, 'filtered', filtered)
         setattr(eth, 'name', eth.host_uuid.split('-', 1)[0] + '-'+eth.name)
         setattr(eth, 'updated_at', None)
         setattr(eth, 'created_at', None)
@@ -560,6 +602,15 @@ class StxClientImp(object):
 
     @ staticmethod
     def _ifconverter(ifs):
+        selected_keys = [
+            "ifname", "iftype", "imac", "vlan_id", "imtu",
+            "ifclass", "uses", "max_tx_rate",
+            "sriov_vf_driver", "sriov_numvfs", "ptp_role"
+        ]
+        content = ifs.to_dict()
+        filtered = dict(
+            filter(lambda item: item[0] in selected_keys, content.items()))
+        setattr(ifs, 'filtered', filtered)
         setattr(ifs, 'name', ifs.ihost_uuid.split('-', 1)[0] + '-'+ifs.ifname)
         setattr(ifs, 'updated_at', None)
         setattr(ifs, 'created_at', None)
@@ -567,6 +618,15 @@ class StxClientImp(object):
 
     @ staticmethod
     def _devconverter(dev):
+        selected_keys = [
+            "name", "pdevice", "pciaddr", "pvendor_id", "pvendor",
+            "pclass_id", "pclass", "psvendor", "psdevice",
+            "sriov_totalvfs", "sriov_numvfs", "numa_node"
+        ]
+        content = dev.to_dict()
+        filtered = dict(
+            filter(lambda item: item[0] in selected_keys, content.items()))
+        setattr(dev, 'filtered', filtered)
         setattr(dev, 'name', dev.host_uuid.split('-', 1)[0] + '-'+dev.name)
         return dev
 
index 4c7c054..2847a85 100644 (file)
@@ -137,9 +137,10 @@ def create_by(fmobj: FaultGenericModel) -> AlarmEventRecord:
 def update_by(target: AlarmEventRecord, fmobj: FaultGenericModel
               ) -> None:
     # content = json.loads(fmobj.content)
-    target.hash = fmobj.hash
     if fmobj.status == 'clear':
         target.perceivedSeverity = alarm_obj.PerceivedSeverityEnum.CLEARED
+
+    target.hash = fmobj.hash
     target.events.append(events.AlarmEventChanged(
         id=fmobj.id,
         notificationEventType=AlarmNotificationEventEnum.CLEAR,
index 388013f..04b4800 100644 (file)
@@ -105,6 +105,7 @@ def update_by(ocloud: Ocloud, stxobj: StxGenericModel) -> None:
     ocloud.createtime = stxobj.createtime
     ocloud.updatetime = stxobj.updatetime
     # ocloud.content = stxobj.content
+
     ocloud.hash = stxobj.hash
     ocloud.version_number = ocloud.version_number + 1
     ocloud.events.append(events.OcloudChanged(
index da1516e..31d81b1 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-import json
 
+from o2common.service.unit_of_work import AbstractUnitOfWork
 from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
-from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_acc(
     cmd: commands.UpdatePserverAcc,
     uow: AbstractUnitOfWork
@@ -96,52 +91,3 @@ def update_pserver_acc(
             logger.info("Update the accelerator of pserver: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    # description = "%s : An Accelerator resource of the physical server"\
-    #     % stxobj.name
-    content = json.loads(stxobj.content)
-    selected_keys = [
-        "name", "pdevice", "pciaddr", "pvendor_id", "pvendor",
-        "pclass_id", "pclass", "psvendor", "psdevice",
-        "sriov_totalvfs", "sriov_numvfs", "numa_node"
-    ]
-    filtered = dict(
-        filter(lambda item: item[0] in selected_keys, content.items()))
-    extensions = json.dumps(filtered)
-    description = ";".join([f"{k}:{v}" for k, v in filtered.items()])
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description,
-                        extensions)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
index ac2b50f..1c15025 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-import json
 
-from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
 from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.domain import commands, events
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_cpu(
     cmd: commands.UpdatePserverCpu,
     uow: AbstractUnitOfWork
@@ -96,50 +91,3 @@ def update_pserver_cpu(
             logger.info("Update the cpu of pserver: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    # description = "%s : A CPU resource of the physical server" % stxobj.name
-    content = json.loads(stxobj.content)
-    selected_keys = [
-        "cpu", "core", "thread", "allocated_function", "numa_node",
-        "cpu_model", "cpu_family"
-    ]
-    filtered = dict(
-        filter(lambda item: item[0] in selected_keys, content.items()))
-    extensions = json.dumps(filtered)
-    description = ";".join([f"{k}:{v}" for k, v in filtered.items()])
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description,
-                        extensions)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
index 0efe123..1e6b2f5 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-# import json
 
+from o2common.service.unit_of_work import AbstractUnitOfWork
 from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
-from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_dev(
     cmd: commands.UpdatePserverDev,
     uow: AbstractUnitOfWork
@@ -96,41 +91,3 @@ def update_pserver_dev(
             logger.info("Update the device of pserver: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    description = "%s : A device resource of the physical server"\
-        % stxobj.name
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
index 4e9872c..14cbdfd 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-import json
 
-from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
 from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.domain import commands, events
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_eth(
     cmd: commands.UpdatePserverEth,
     uow: AbstractUnitOfWork
@@ -96,54 +91,3 @@ def update_pserver_eth(
             logger.info("Update the ethernet of pserver: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    # description = "%s : An ethernet resource of the physical server"\
-    #     % stxobj.name
-    content = json.loads(stxobj.content)
-    selected_keys = [
-        "name", "namedisplay", "dev_id", "pdevice", "capabilities",
-        "type", "driver", "mac", "numa_node",
-        "pciaddr", "pclass", "psvendor", "psdevice",
-        "sriov_totalvfs", "sriov_numvfs", "dpdksupport",
-        "sriov_vf_driver", "sriov_vf_pdevice_id", "interface_uuid"
-    ]
-    filtered = dict(
-        filter(lambda item: item[0] in selected_keys, content.items()))
-    extensions = json.dumps(filtered)
-    description = ";".join([f"{k}:{v}" for k, v in filtered.items()])
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description,
-                        extensions)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
index f8ad40c..d5949ee 100644 (file)
@@ -107,24 +107,12 @@ def is_outdated(resource: Resource, stxobj: StxGenericModel):
 
 def create_by(stxobj: StxGenericModel, parentid: str, resourcetype_id: str) \
         -> Resource:
-    # content = json.loads(stxobj.content)
     resourcetype_id = resourcetype_id
     resourcepool_id = parentid
     parent_id = None  # the root of the resource has no parent id
     gAssetId = ''  # TODO: global ID
-    # description = "%s : A physical server resource" % stxobj.name
-    content = json.loads(stxobj.content)
-    selected_keys = [
-        "hostname", "personality", "id", "mgmt_ip", "mgmt_mac",
-        "software_load", "capabilities",
-        "operational", "availability", "administrative",
-        "boot_device", "rootfs_device", "install_state", "subfunctions",
-        "clock_synchronization", "max_cpu_mhz_allowed"
-    ]
-    filtered = dict(
-        filter(lambda item: item[0] in selected_keys, content.items()))
-    extensions = json.dumps(filtered)
-    description = ";".join([f"{k}:{v}" for k, v in filtered.items()])
+    extensions = json.dumps(stxobj.filtered)
+    description = ";".join([f"{k}:{v}" for k, v in stxobj.filtered.items()])
     resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
                         parent_id, gAssetId, stxobj.content, description,
                         extensions)
@@ -146,9 +134,12 @@ def update_by(target: Resource, stxobj: StxGenericModel,
               parentid: str) -> None:
     if target.resourceId != stxobj.id:
         raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
     target.updatetime = stxobj.updatetime
     target.hash = stxobj.hash
+    target.elements = stxobj.content
+    target.extensions = json.dumps(stxobj.filtered)
+    target.description = ";".join(
+        [f"{k}:{v}" for k, v in stxobj.filtered.items()])
     target.version_number = target.version_number + 1
     target.events.append(events.ResourceChanged(
         id=stxobj.id,
index 022f717..4f337ad 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-import json
 
-from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
 from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.domain import commands, events
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_if(
     cmd: commands.UpdatePserverIf,
     uow: AbstractUnitOfWork
@@ -96,52 +91,3 @@ def update_pserver_if(
             logger.info("Update the interface of pserver: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    # description = "%s : An interface resource of the physical server"\
-    #     % stxobj.name
-    content = json.loads(stxobj.content)
-    selected_keys = [
-        "ifname", "iftype", "imac", "vlan_id", "imtu",
-        "ifclass", "uses", "max_tx_rate",
-        "sriov_vf_driver", "sriov_numvfs", "ptp_role"
-    ]
-    filtered = dict(
-        filter(lambda item: item[0] in selected_keys, content.items()))
-    extensions = json.dumps(filtered)
-    description = ";".join([f"{k}:{v}" for k, v in filtered.items()])
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description,
-                        extensions)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
index 21af49d..2e0309b 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-import json
 
+from o2common.service.unit_of_work import AbstractUnitOfWork
 from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
-from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_mem(
     cmd: commands.UpdatePserverMem,
     uow: AbstractUnitOfWork
@@ -96,55 +91,3 @@ def update_pserver_mem(
             logger.info("Update the memory of pserver: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    # description = "%s : A memory resource of the physical server"\
-    #     % stxobj.name
-    content = json.loads(stxobj.content)
-    selected_keys = [
-        "memtotal_mib", "memavail_mib", "vm_hugepages_use_1G",
-        "vm_hugepages_possible_1G", "hugepages_configured",
-        "vm_hugepages_avail_1G", "vm_hugepages_nr_1G",
-        "vm_hugepages_nr_4K", "vm_hugepages_nr_2M",
-        "vm_hugepages_possible_2M", "vm_hugepages_avail_2M",
-        "platform_reserved_mib", "numa_node"
-    ]
-    filtered = dict(
-        filter(lambda item: item[0] in selected_keys, content.items()))
-    extensions = json.dumps(filtered)
-    description = ";".join([f"{k}:{v}" for k, v in filtered.items()])
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description,
-                        extensions)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
index 1faa08a..402085b 100644 (file)
 # pylint: disable=unused-argument
 from __future__ import annotations
 import uuid
-# import json
 
-from o2ims.domain import commands, events
-from o2ims.domain.stx_object import StxGenericModel
 from o2common.service.unit_of_work import AbstractUnitOfWork
-from o2ims.domain.resource_type import MismatchedModel
-from o2ims.domain.ocloud import Resource, ResourceType
+from o2ims.domain import commands, events
+from o2ims.domain.ocloud import ResourceType
 from o2ims.domain.subscription_obj import NotificationEventEnum
+from o2ims.service.auditor.pserver_res_handler import is_outdated, \
+    create_by, update_by
 
 from o2common.helper import o2logging
 logger = o2logging.get_logger(__name__)
 
 
-class InvalidResourceType(Exception):
-    pass
-
-
 def update_pserver_port(
     cmd: commands.UpdatePserverIfPort,
     uow: AbstractUnitOfWork
@@ -96,41 +91,3 @@ def update_pserver_port(
             logger.info("Update the port of pserver interface: " + stxobj.id
                         + ", name: " + stxobj.name)
         uow.commit()
-
-
-def is_outdated(resource: Resource, stxobj: StxGenericModel):
-    return True if resource.hash != stxobj.hash else False
-
-
-def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
-        -> Resource:
-    # content = json.loads(stxobj.content)
-    resourcetype_id = resourcetype_id
-    resourcepool_id = parent.resourcePoolId
-    parent_id = parent.resourceId
-    gAssetId = ''  # TODO: global ID
-    description = "%s : A port resource of the interface"\
-        % stxobj.name
-    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
-                        parent_id, gAssetId, stxobj.content, description)
-    resource.createtime = stxobj.createtime
-    resource.updatetime = stxobj.updatetime
-    resource.hash = stxobj.hash
-
-    return resource
-
-
-def update_by(target: Resource, stxobj: StxGenericModel,
-              parentid: str) -> None:
-    if target.resourceId != stxobj.id:
-        raise MismatchedModel("Mismatched Id")
-    target.createtime = stxobj.createtime
-    target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
-    target.version_number = target.version_number + 1
-    target.events.append(events.ResourceChanged(
-        id=stxobj.id,
-        resourcePoolId=target.resourcePoolId,
-        notificationEventType=NotificationEventEnum.MODIFY,
-        updatetime=stxobj.updatetime
-    ))
diff --git a/o2ims/service/auditor/pserver_res_handler.py b/o2ims/service/auditor/pserver_res_handler.py
new file mode 100644 (file)
index 0000000..946c27a
--- /dev/null
@@ -0,0 +1,75 @@
+# Copyright (C) 2022 Wind River Systems, Inc.
+#
+#  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 o2ims.domain import events
+from o2ims.domain.stx_object import StxGenericModel
+from o2ims.domain.subscription_obj import NotificationEventEnum
+from o2ims.domain.resource_type import MismatchedModel
+from o2ims.domain.ocloud import Resource
+
+from o2common.helper import o2logging
+logger = o2logging.get_logger(__name__)
+
+
+class InvalidResourceType(Exception):
+    pass
+
+
+def is_outdated(resource: Resource, stxobj: StxGenericModel):
+    return True if resource.hash != stxobj.hash else False
+
+
+def create_by(stxobj: StxGenericModel, parent: Resource, resourcetype_id: str)\
+        -> Resource:
+    resourcetype_id = resourcetype_id
+    resourcepool_id = parent.resourcePoolId
+    parent_id = parent.resourceId
+    gAssetId = ''  # TODO: global ID
+    extensions = json.dumps(stxobj.filtered)
+    description = ";".join([f"{k}:{v}" for k, v in stxobj.filtered.items()])
+    resource = Resource(stxobj.id, resourcetype_id, resourcepool_id,
+                        parent_id, gAssetId, stxobj.content, description,
+                        extensions)
+    resource.createtime = stxobj.createtime
+    resource.updatetime = stxobj.updatetime
+    resource.hash = stxobj.hash
+
+    resource.events.append(events.ResourceChanged(
+        id=stxobj.id,
+        resourcePoolId=resource.resourcePoolId,
+        notificationEventType=NotificationEventEnum.CREATE,
+        updatetime=stxobj.updatetime
+    ))
+
+    return resource
+
+
+def update_by(target: Resource, stxobj: StxGenericModel, parent: Resource)\
+        -> None:
+    if target.resourceId != stxobj.id:
+        raise MismatchedModel("Mismatched Id")
+    target.updatetime = stxobj.updatetime
+    target.hash = stxobj.hash
+    target.elements = stxobj.content
+    target.extensions = json.dumps(stxobj.filtered)
+    target.description = ";".join(
+        [f"{k}:{v}" for k, v in stxobj.filtered.items()])
+    target.version_number = target.version_number + 1
+    target.events.append(events.ResourceChanged(
+        id=stxobj.id,
+        resourcePoolId=target.resourcePoolId,
+        notificationEventType=NotificationEventEnum.MODIFY,
+        updatetime=stxobj.updatetime
+    ))
index 366b77f..fd5ea8a 100644 (file)
@@ -100,10 +100,10 @@ def update_by(target: ResourcePool, stxobj: StxGenericModel,
     target.name = stxobj.name
     target.location = content['location'] if content['location'] is not None \
         else ''
-    target.createtime = stxobj.createtime
     target.updatetime = stxobj.updatetime
-    target.hash = stxobj.hash
     target.oCloudId = parentid
+
+    target.hash = stxobj.hash
     target.version_number = target.version_number + 1
     target.events.append(events.ResourcePoolChanged(
         id=stxobj.id,
index 06dc824..01c91c5 100644 (file)
@@ -89,6 +89,8 @@ def _notify_resourcetype(uow, data):
                             sub_data['subscriptionId'],
                             sub_data['filter']))
                     continue
+                if len(args) == 0:
+                    continue
                 args.append(ocloud.ResourceType.resourceTypeId == data.id)
                 ret = uow.resource_types.list_with_count(*args)
                 if ret[0] > 0:
@@ -136,6 +138,8 @@ def _notify_resourcepool(uow, data):
                             sub_data['subscriptionId'],
                             sub_data['filter']))
                     continue
+                if len(args) == 0:
+                    continue
                 args.append(ocloud.ResourcePool.resourcePoolId == data.id)
                 ret = uow.resource_pools.list_with_count(*args)
                 if ret[0] > 0:
@@ -185,6 +189,8 @@ def _notify_dms(uow, data):
                             sub_data['subscriptionId'],
                             sub_data['filter']))
                     continue
+                if len(args) == 0:
+                    continue
                 args.append(
                     ocloud.DeploymentManager.deploymentManagerId == data.id)
                 ret = uow.deployment_managers.list_with_count(*args)
@@ -200,14 +206,6 @@ def _notify_dms(uow, data):
             callback_smo(sub, data, dms_dict)
 
 
-class FilterNotEffect(Exception):
-    pass
-
-
-class FilterEffect(Exception):
-    pass
-
-
 def _notify_resource(uow, data):
     with uow:
         resource = uow.resources.get(data.id)
@@ -243,6 +241,8 @@ def _notify_resource(uow, data):
                             sub_data['subscriptionId'],
                             sub_data['filter']))
                     continue
+                if len(args) == 0:
+                    continue
                 args.append(ocloud.Resource.resourceId == data.id)
                 ret = uow.resources.list_with_count(res_pool_id, *args)
                 if ret[0] > 0: