-# Copyright (C) 2021 Wind River Systems, Inc.\r
-#\r
-# Licensed under the Apache License, Version 2.0 (the "License");\r
-# you may not use this file except in compliance with the License.\r
-# You may obtain a copy of the License at\r
-#\r
-# http://www.apache.org/licenses/LICENSE-2.0\r
-#\r
-# Unless required by applicable law or agreed to in writing, software\r
-# distributed under the License is distributed on an "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-# See the License for the specific language governing permissions and\r
-# limitations under the License.\r
-\r
-from o2ims.domain.resource_type import ResourceTypeEnum\r
-from o2ims.service.client.base_client import BaseClient\r
-from o2ims.domain.stx_object import StxGenericModel\r
-from o2ims.service.unit_of_work import AbstractUnitOfWork\r
-from o2ims.service.watcher.base import BaseWatcher\r
-\r
-import logging\r
-logger = logging.getLogger(__name__)\r
-\r
-\r
-class InvalidOcloudState(Exception):\r
- pass\r
-\r
-\r
-class OcloudWatcher(BaseWatcher):\r
- def __init__(self, ocloud_client: BaseClient,\r
- uow: AbstractUnitOfWork) -> None:\r
- super().__init__(ocloud_client, uow)\r
-\r
- def _targetname(self):\r
- return "ocloud"\r
-\r
- def _probe(self, parent: object = None):\r
- ocloudmodel = self._client.get(None)\r
- if ocloudmodel:\r
- self._compare_and_update(ocloudmodel)\r
- return [ocloudmodel]\r
-\r
- def _compare_and_update(self, ocloudmodel: StxGenericModel) -> bool:\r
- with self._uow:\r
- # localmodel = self._uow.stxobjects.get(str(ocloudmodel.id))\r
- oclouds = self._uow.stxobjects.list(ResourceTypeEnum.OCLOUD)\r
- if len(oclouds) > 1:\r
- raise InvalidOcloudState("More than 1 ocloud is found")\r
- if len(oclouds) == 0:\r
- logger.info("add ocloud:" + ocloudmodel.name\r
- + " update_at: " + str(ocloudmodel.updatetime)\r
- + " id: " + str(ocloudmodel.id)\r
- + " hash: " + str(ocloudmodel.hash))\r
- self._uow.stxobjects.add(ocloudmodel)\r
- else:\r
- localmodel = oclouds.pop()\r
- if localmodel.is_outdated(ocloudmodel):\r
- logger.info("update ocloud:" + ocloudmodel.name\r
- + " update_at: " + str(ocloudmodel.updatetime)\r
- + " id: " + str(ocloudmodel.id)\r
- + " hash: " + str(ocloudmodel.hash))\r
- localmodel.update_by(ocloudmodel)\r
- self._uow.stxobjects.update(localmodel)\r
- self._uow.commit()\r
-\r
-\r
-class DmsWatcher(BaseWatcher):\r
- def __init__(self, client: BaseClient,\r
- uow: AbstractUnitOfWork) -> None:\r
- super().__init__(client, uow)\r
-\r
- def _targetname(self):\r
- return "dms"\r
-\r
- def _probe(self, parent: object = None):\r
- ocloudid = parent.id if parent else None\r
- newmodels = self._client.list(ocloudid=ocloudid)\r
- for newmodel in newmodels:\r
- super()._compare_and_update(newmodel)\r
- return newmodels\r
+# Copyright (C) 2021 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.
+
+# from o2ims.domain.resource_type import ResourceTypeEnum
+from o2common.service.client.base_client import BaseClient
+from o2ims.domain.stx_object import StxGenericModel
+# from o2common.service.unit_of_work import AbstractUnitOfWork
+from o2common.service.watcher.base import BaseWatcher
+from o2ims.domain import commands
+from o2common.service.messagebus import MessageBus
+
+from o2common.helper import o2logging
+logger = o2logging.get_logger(__name__)
+
+
+class OcloudWatcher(BaseWatcher):
+ def __init__(self, ocloud_client: BaseClient,
+ bus: MessageBus) -> None:
+ super().__init__(ocloud_client, bus)
+
+ def _targetname(self):
+ return "ocloud"
+
+ def _probe(self, parent: object = None, tags: object = None):
+ newmodel = self._client.get(None)
+ if newmodel:
+ logger.debug("found ocloud: " + newmodel.name)
+ else:
+ logger.warning("Failed to find out any ocloud")
+ # self._compare_and_update(ocloudmodel)
+ return [commands.UpdateOCloud(newmodel)] if newmodel else []
+
+# def _compare_and_update(self, ocloudmodel: StxGenericModel) -> bool:
+# with self._uow:
+# # localmodel = self._uow.stxobjects.get(str(ocloudmodel.id))
+# oclouds = self._uow.stxobjects.list(ResourceTypeEnum.OCLOUD)
+# if len(oclouds) > 1:
+# raise InvalidOcloudState("More than 1 ocloud is found")
+# if len(oclouds) == 0:
+# logger.info("add ocloud:" + ocloudmodel.name
+# + " update_at: " + str(ocloudmodel.updatetime)
+# + " id: " + str(ocloudmodel.id)
+# + " hash: " + str(ocloudmodel.hash))
+# self._uow.stxobjects.add(ocloudmodel)
+# else:
+# localmodel = oclouds.pop()
+# if localmodel.is_outdated(ocloudmodel):
+# logger.info("update ocloud:" + ocloudmodel.name
+# + " update_at: " + str(ocloudmodel.updatetime)
+# + " id: " + str(ocloudmodel.id)
+# + " hash: " + str(ocloudmodel.hash))
+# localmodel.update_by(ocloudmodel)
+# self._uow.stxobjects.update(localmodel)
+# self._uow.commit()
+
+
+class DmsWatcher(BaseWatcher):
+ def __init__(self, client: BaseClient,
+ bus: MessageBus) -> None:
+ super().__init__(client, bus)
+
+ def _targetname(self):
+ return "dms"
+
+ def _probe(self, parent: StxGenericModel, tags: object = None):
+ ocloudid = parent.id
+ newmodels = self._client.list(ocloudid=ocloudid)
+ # for newmodel in newmodels:
+ # super()._compare_and_update(newmodel)
+ # return newmodels
+ return [commands.UpdateDms(data=m, parentid=ocloudid)
+ for m in newmodels]