Refactor watchers
[pti/o2.git] / o2ims / service / watcher / base.py
index 6700eb3..0daf8d4 100644 (file)
 #  See the License for the specific language governing permissions and\r
 #  limitations under the License.\r
 \r
+# from logging import exception\r
+# from cgtsclient import exc\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
-\r
+# from o2ims.domain.stx_object import StxGenericModel\r
+# from o2ims.service.unit_of_work import AbstractUnitOfWork\r
+from o2ims.domain import commands\r
+from o2ims.service.messagebus import MessageBus\r
 from o2common.helper import o2logging\r
 logger = o2logging.get_logger(__name__)\r
 \r
 \r
 class BaseWatcher(object):\r
     def __init__(self, client: BaseClient,\r
-                 uow: AbstractUnitOfWork) -> None:\r
+                 bus: MessageBus) -> None:\r
         super().__init__()\r
         self._client = client\r
-        self._uow = uow\r
+        self._bus = bus\r
+        # self._uow = bus.uow\r
 \r
     def targetname(self) -> str:\r
         return self._targetname()\r
 \r
-    def probe(self, parent: object = None):\r
-        return self._probe(parent)\r
+    def probe(self, parent: commands.UpdateStxObject = None):\r
+        try:\r
+            cmds = self._probe(parent.data if parent else None)\r
+            for cmd in cmds:\r
+                self._bus.handle(cmd)\r
+\r
+            # return self._probe(parent)\r
+            return cmds\r
+        except Exception as ex:\r
+            logger.warning("Failed to probe resource due to: " + str(ex))\r
+            return []\r
 \r
-    def _probe(self, parent: object = None):\r
+    def _probe(self, parent: object = None) -> commands.UpdateStxObject:\r
         raise NotImplementedError\r
 \r
     def _targetname(self):\r
         raise NotImplementedError\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 entry:" + newmodel.name)\r
-                self._uow.stxobjects.add(newmodel)\r
-            elif localmodel.is_outdated(newmodel):\r
-                logger.info("update entry:" + newmodel.name)\r
-                localmodel.update_by(newmodel)\r
-                self._uow.stxobjects.update(localmodel)\r
-            self._uow.commit()\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 entry:" + newmodel.name)\r
+                self._uow.stxobjects.add(newmodel)\r
+            elif localmodel.is_outdated(newmodel):\r
+                logger.info("update entry:" + newmodel.name)\r
+                localmodel.update_by(newmodel)\r
+                self._uow.stxobjects.update(localmodel)\r
+            self._uow.commit()\r
 \r
 \r
 # node to organize watchers in tree hierachy\r
@@ -74,7 +87,7 @@ class WatcherTree(object):
                      + self.watcher.targetname())\r
         childdepth = depth - 1 if depth > 0 else 0\r
         resources = self.watcher.probe(parentresource)\r
-        logger.debug("probe returns " + str(len(resources)) + "resources")\r
+        logger.debug("probe returns " + str(len(resources)) + " resources")\r
 \r
         if depth == 1:\r
             # stop recursive\r