Add polling worker for watcher to probe
[pti/o2.git] / o2ims / entrypoints / resource_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 import cotyledon\r
16 \r
17 from o2ims.service.watcher.worker import PollWorker\r
18 from o2ims.service.watcher.base import OcloudWatcher\r
19 from o2ims.service.watcher.base import DmsWatcher\r
20 # from o2ims.service.client.base_client import BaseClient\r
21 from o2ims.adapter.clients.ocloud_sa_client import StxSaDmsClient\r
22 from o2ims.adapter.clients.ocloud_sa_client import StxSaOcloudClient\r
23 \r
24 from o2ims import bootstrap\r
25 # from o2ims import config\r
26 # import redis\r
27 \r
28 import logging\r
29 logger = logging.getLogger(__name__)\r
30 \r
31 # r = redis.Redis(**config.get_redis_host_and_port())\r
32 \r
33 \r
34 class WatcherService(cotyledon.Service):\r
35     def __init__(self, worker_id, args=None) -> None:\r
36         super().__init__(worker_id)\r
37         self.args = args\r
38         self.bus = bootstrap.bootstrap()\r
39         self.worker = PollWorker()\r
40         # self.stxrepo = self.bus.uow.stxobjects\r
41         # tbd: 1 client per resource pool\r
42         # self.client = StxSaOcloudClient()\r
43 \r
44     def run(self):\r
45         try:\r
46             self.worker.add_watcher(OcloudWatcher(StxSaOcloudClient(),\r
47                                     self.bus.uow))\r
48             self.worker.add_watcher(DmsWatcher(StxSaDmsClient(),\r
49                                     self.bus.uow))\r
50             self.worker.start()\r
51         except Exception as ex:\r
52             logger.warning("WorkerService Exception:" + str(ex))\r
53         finally:\r
54             self.worker.stop()\r
55 \r
56 \r
57 def start_watchers(sm: cotyledon.ServiceManager = None):\r
58     watchersm = sm if sm else cotyledon.ServiceManager()\r
59     watchersm.add(WatcherService, workers=1, args=())\r
60     watchersm.run()\r
61 \r
62 \r
63 def main():\r
64     logger.info("Resource watcher starting")\r
65     start_watchers()\r
66 \r
67 \r
68 if __name__ == "__main__":\r
69     main()\r