-# 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 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
-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
- bus: MessageBus) -> None:\r
- super().__init__()\r
- self._client = client\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: 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) -> 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
-\r
-\r
-# node to organize watchers in tree hierachy\r
-class WatcherTree(object):\r
- def __init__(self, watcher: BaseWatcher) -> None:\r
- super().__init__()\r
- self.watcher = watcher\r
- self.children = {}\r
-\r
- def addchild(self, watcher: BaseWatcher) -> object:\r
- child = WatcherTree(watcher)\r
- self.children[watcher.targetname()] = child\r
- return child\r
-\r
- def removechild(self, targetname: str) -> object:\r
- return self.children.pop(targetname)\r
-\r
- # probe all resources by parent, depth = 0 for indefinite recursive\r
- def probe(self, parentresource=None, depth: int = 0):\r
- logger.debug("probe resources with watcher: "\r
- + 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
-\r
- if depth == 1:\r
- # stop recursive\r
- return\r
-\r
- for res in resources:\r
- for targetname in self.children.keys():\r
- self.children[targetname].probe(res, childdepth)\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 logging import exception
+# from cgtsclient import exc
+from o2common.service.client.base_client import BaseClient
+from o2common.domain import commands
+from o2common.service.messagebus import MessageBus
+from o2common.helper import o2logging
+logger = o2logging.get_logger(__name__)
+
+
+class BaseWatcher(object):
+ def __init__(self, client: BaseClient,
+ bus: MessageBus) -> None:
+ super().__init__()
+ self._client = client
+ self._bus = bus
+ self._tags = None
+ # self._uow = bus.uow
+
+ def targetname(self) -> str:
+ return self._targetname()
+
+ def probe(self, parent: commands.Command = None, tags: object = None):
+ try:
+ cmds = self._probe(
+ parent.data if parent else None, tags)
+ for cmd in cmds:
+ self._bus.handle(cmd)
+
+ # return self._probe(parent)
+ return cmds
+ except Exception as ex:
+ logger.warning("Failed to probe %s watcher due to: %s - %s" %
+ (self._targetname(), type(ex), str(ex)))
+ return []
+
+ def _probe(self, parent: object = None, tags: object = None) \
+ -> commands.Command:
+ raise NotImplementedError
+
+ def _targetname(self):
+ raise NotImplementedError
+
+ # def _compare_and_update(self, newmodel: StxGenericModel) -> bool:
+ # with self._uow:
+ # # localmodel = self._uow.stxobjects.get(ocloudmodel.id)
+ # localmodel = self._uow.stxobjects.get(str(newmodel.id))
+ # if not localmodel:
+ # logger.info("add entry:" + newmodel.name)
+ # self._uow.stxobjects.add(newmodel)
+ # elif localmodel.is_outdated(newmodel):
+ # logger.info("update entry:" + newmodel.name)
+ # localmodel.update_by(newmodel)
+ # self._uow.stxobjects.update(localmodel)
+ # self._uow.commit()
+
+
+# node to organize watchers in tree hierachy
+class WatcherTree(object):
+ def __init__(self, watcher: BaseWatcher) -> None:
+ super().__init__()
+ self.watcher = watcher
+ self.children = {}
+ self.tags = None
+
+ def addchild(self, watcher: BaseWatcher) -> object:
+ child = WatcherTree(watcher)
+ self.children[watcher.targetname()] = child
+ return child
+
+ def removechild(self, targetname: str) -> object:
+ return self.children.pop(targetname)
+
+ # probe all resources by parent, depth = 0 for indefinite recursive
+ def probe(self, parentresource=None, depth: int = 0, tags: object = None):
+ logger.debug("probe resources with watcher: "
+ + self.watcher.targetname())
+ childdepth = depth - 1 if depth > 0 else 0
+ resources = self.watcher.probe(parentresource, tags)
+ logger.debug("probe returns " + str(len(resources)) + " resources")
+ if self.watcher._tags is not None:
+ tags = self.watcher._tags
+
+ if depth == 1:
+ # stop recursive
+ return
+
+ for res in resources:
+ for targetname in self.children.keys():
+ self.children[targetname].probe(res, childdepth, tags)