Refactor watchers
[pti/o2.git] / o2ims / service / watcher / ocloud_watcher.py
index 6a73f48..bf4ce43 100644 (file)
 #  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.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.domain.stx_object import StxGenericModel\r
+from o2ims.service.unit_of_work import AbstractUnitOfWork\r
 from o2ims.service.watcher.base import BaseWatcher\r
+from o2ims.domain import commands\r
+from o2ims.service.messagebus import MessageBus\r
 \r
 from o2common.helper import o2logging\r
 logger = o2logging.get_logger(__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
+                 bus: MessageBus) -> None:\r
+        super().__init__(ocloud_client, bus)\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
+        newmodel = self._client.get(None)\r
+        if newmodel:\r
+            logger.debug("found ocloud: " + newmodel.name)\r
+        else:\r
+            logger.warning("Failed to find out any ocloud")\r
+        #     self._compare_and_update(ocloudmodel)\r
+        return [commands.UpdateOCloud(newmodel)] if newmodel else []\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
+# 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
+                 bus: MessageBus) -> None:\r
+        super().__init__(client, bus)\r
 \r
     def _targetname(self):\r
         return "dms"\r
@@ -75,6 +76,7 @@ class DmsWatcher(BaseWatcher):
     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
+        # for newmodel in newmodels:\r
+        #     super()._compare_and_update(newmodel)\r
+        # return newmodels\r
+        return [commands.UpdateDms(m) for m in newmodels]\r