# 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.adapter.ocloud_repository import OcloudRepository\r
+from o2ims.service.unit_of_work import AbstractUnitOfWork\r
+\r
+import logging\r
+logger = logging.getLogger(__name__)\r
\r
\r
class InvalidOcloudState(Exception):\r
raise NotImplementedError\r
\r
\r
-class OcloudWather(BaseWatcher):\r
+class OcloudWatcher(BaseWatcher):\r
def __init__(self, ocloud_client: BaseClient,\r
- repo: OcloudRepository) -> None:\r
+ uow: AbstractUnitOfWork) -> None:\r
super().__init__(ocloud_client)\r
- self._repo = repo\r
+ self._uow = uow\r
\r
def _targetname(self):\r
return "ocloud"\r
self._compare_and_update(ocloudmodel)\r
\r
def _compare_and_update(self, ocloudmodel: StxGenericModel) -> bool:\r
- # localmodel = self._repo.get(ocloudmodel.id)\r
- oclouds = self._repo.list()\r
- if len(oclouds) > 1:\r
- raise InvalidOcloudState("More than 1 ocloud is found")\r
- if len(oclouds) == 0:\r
- self._repo.add(ocloudmodel)\r
- else:\r
- localmodel = oclouds.pop()\r
- if localmodel.is_outdated(ocloudmodel):\r
- localmodel.update_by(ocloudmodel)\r
- self._repo.update(localmodel)\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) -> None:\r
+ def __init__(self, client: BaseClient,\r
+ uow: AbstractUnitOfWork) -> None:\r
super().__init__(client)\r
+ self._uow = uow\r
\r
def _targetname(self):\r
return "dms"\r
\r
+ def _probe(self):\r
+ ocloudmodel = self._client.get(None)\r
+ if ocloudmodel:\r
+ self._compare_and_update(ocloudmodel)\r
+\r
+ def _compare_and_update(self, newmodel: StxGenericModel) -> bool:\r
+ with self._uow:\r
+ # localmodel = self._uow.stxobjects.get(ocloudmodel.id)\r
+ localmodel = self._uow.stxobjects.get(str(newmodel.id))\r
+ if not localmodel:\r
+ logger.info("add dms:" + newmodel.name)\r
+ self._uow.stxobjects.add(newmodel)\r
+ elif localmodel.is_outdated(newmodel):\r
+ logger.info("update dms:" + newmodel.name)\r
+ localmodel.update_by(newmodel)\r
+ self._uow.stxobjects.update(newmodel)\r
+ self._uow.commit()\r
+\r
\r
class ResourcePoolWatcher(BaseWatcher):\r
- def __init__(self) -> None:\r
+ def __init__(self, client: BaseClient,\r
+ uow: AbstractUnitOfWork) -> None:\r
super().__init__()\r
+ self._uow = uow\r
\r
def _targetname(self):\r
- return "ocloud"\r
+ return "resourcepool"\r
+\r
+ def _probe(self):\r
+ ocloudmodel = self._client.get(None)\r
+ if ocloudmodel:\r
+ logger.info("detect ocloudmodel:" + ocloudmodel.name)\r
+ self._compare_and_update(ocloudmodel)\r
+\r
+ def _compare_and_update(self, newmodel: StxGenericModel) -> bool:\r
+ with self._uow:\r
+ # localmodel = self._uow.stxobjects.get(ocloudmodel.id)\r
+ localmodel = self._uow.stxobjects.get(str(newmodel.id))\r
+ if not localmodel:\r
+ self._uow.stxobjects.add(newmodel)\r
+ elif localmodel.is_outdated(newmodel):\r
+ localmodel.update_by(newmodel)\r
+ self._uow.stxobjects.update(newmodel)\r
+ self._uow.commit()\r
\r
\r
class ResourceWatcher(BaseWatcher):\r
- def __init__(self) -> None:\r
+ def __init__(self, client: BaseClient,\r
+ uow: AbstractUnitOfWork) -> None:\r
super().__init__()\r
+ self._uow = uow\r
\r
def _targetname(self):\r
return "resource"\r
+\r
+ def _probe(self):\r
+ ocloudmodel = self._client.get(None)\r
+ if ocloudmodel:\r
+ self._compare_and_update(ocloudmodel)\r
+\r
+ def _compare_and_update(self, newmodel: StxGenericModel) -> bool:\r
+ with self._uow:\r
+ # localmodel = self._repo.get(ocloudmodel.id)\r
+ localmodel = self._uow.stxobjects.get(str(newmodel.id))\r
+ if not localmodel:\r
+ self._uow.stxobjects.add(newmodel)\r
+ elif localmodel.is_outdated(newmodel):\r
+ localmodel.update_by(newmodel)\r
+ self._uow.stxobjects.update(newmodel)\r
+ self._uow.commit()\r