Refactor watchers
[pti/o2.git] / o2ims / service / watcher / ocloud_watcher.py
1 # Copyright (C) 2021 Wind River Systems, Inc.\r
2 #\r
3 #  Licensed under the Apache License, Version 2.0 (the "License");\r
4 #  you may not use this file except in compliance with the License.\r
5 #  You may obtain a copy of the License at\r
6 #\r
7 #      http://www.apache.org/licenses/LICENSE-2.0\r
8 #\r
9 #  Unless required by applicable law or agreed to in writing, software\r
10 #  distributed under the License is distributed on an "AS IS" BASIS,\r
11 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 #  See the License for the specific language governing permissions and\r
13 #  limitations under the License.\r
14 \r
15 # from o2ims.domain.resource_type import ResourceTypeEnum\r
16 from o2ims.service.client.base_client import BaseClient\r
17 # from o2ims.domain.stx_object import StxGenericModel\r
18 # from o2ims.service.unit_of_work import AbstractUnitOfWork\r
19 from o2ims.service.watcher.base import BaseWatcher\r
20 from o2ims.domain import commands\r
21 from o2ims.service.messagebus import MessageBus\r
22 \r
23 from o2common.helper import o2logging\r
24 logger = o2logging.get_logger(__name__)\r
25 \r
26 \r
27 class OcloudWatcher(BaseWatcher):\r
28     def __init__(self, ocloud_client: BaseClient,\r
29                  bus: MessageBus) -> None:\r
30         super().__init__(ocloud_client, bus)\r
31 \r
32     def _targetname(self):\r
33         return "ocloud"\r
34 \r
35     def _probe(self, parent: object = None):\r
36         newmodel = self._client.get(None)\r
37         if newmodel:\r
38             logger.debug("found ocloud: " + newmodel.name)\r
39         else:\r
40             logger.warning("Failed to find out any ocloud")\r
41         #     self._compare_and_update(ocloudmodel)\r
42         return [commands.UpdateOCloud(newmodel)] if newmodel else []\r
43 \r
44 # def _compare_and_update(self, ocloudmodel: StxGenericModel) -> bool:\r
45 #     with self._uow:\r
46 #         # localmodel = self._uow.stxobjects.get(str(ocloudmodel.id))\r
47 #         oclouds = self._uow.stxobjects.list(ResourceTypeEnum.OCLOUD)\r
48 #         if len(oclouds) > 1:\r
49 #             raise InvalidOcloudState("More than 1 ocloud is found")\r
50 #         if len(oclouds) == 0:\r
51 #             logger.info("add ocloud:" + ocloudmodel.name\r
52 #                         + " update_at: " + str(ocloudmodel.updatetime)\r
53 #                         + " id: " + str(ocloudmodel.id)\r
54 #                         + " hash: " + str(ocloudmodel.hash))\r
55 #             self._uow.stxobjects.add(ocloudmodel)\r
56 #         else:\r
57 #             localmodel = oclouds.pop()\r
58 #             if localmodel.is_outdated(ocloudmodel):\r
59 #                 logger.info("update ocloud:" + ocloudmodel.name\r
60 #                             + " update_at: " + str(ocloudmodel.updatetime)\r
61 #                             + " id: " + str(ocloudmodel.id)\r
62 #                             + " hash: " + str(ocloudmodel.hash))\r
63 #                 localmodel.update_by(ocloudmodel)\r
64 #                 self._uow.stxobjects.update(localmodel)\r
65 #         self._uow.commit()\r
66 \r
67 \r
68 class DmsWatcher(BaseWatcher):\r
69     def __init__(self, client: BaseClient,\r
70                  bus: MessageBus) -> None:\r
71         super().__init__(client, bus)\r
72 \r
73     def _targetname(self):\r
74         return "dms"\r
75 \r
76     def _probe(self, parent: object = None):\r
77         ocloudid = parent.id if parent else None\r
78         newmodels = self._client.list(ocloudid=ocloudid)\r
79         # for newmodel in newmodels:\r
80         #     super()._compare_and_update(newmodel)\r
81         # return newmodels\r
82         return [commands.UpdateDms(m) for m in newmodels]\r