b559959b93a939c0e4650a9e470d1f789fb12309
[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.ocloud_watcher import OcloudWatcher\r
19 from o2ims.service.watcher.ocloud_watcher import DmsWatcher\r
20 from o2ims.service.watcher.resourcepool_watcher import ResourcePoolWatcher\r
21 from o2ims.adapter.clients.ocloud_sa_client import StxSaDmsClient\r
22 from o2ims.adapter.clients.ocloud_sa_client import StxSaOcloudClient\r
23 from o2ims.adapter.clients.ocloud_sa_client import StxSaResourcePoolClient\r
24 \r
25 from o2ims.service.watcher.pserver_watcher import PServerWatcher\r
26 from o2ims.adapter.clients.ocloud_sa_client import StxPserverClient\r
27 \r
28 from o2ims.service.watcher.pserver_cpu_watcher import PServerCpuWatcher\r
29 from o2ims.adapter.clients.ocloud_sa_client import StxCpuClient\r
30 \r
31 from o2ims.service.watcher.base import WatcherTree\r
32 \r
33 from o2ims import bootstrap\r
34 # from o2ims import config\r
35 # import redis\r
36 \r
37 import logging\r
38 logger = logging.getLogger(__name__)\r
39 \r
40 # r = redis.Redis(**config.get_redis_host_and_port())\r
41 \r
42 \r
43 class WatcherService(cotyledon.Service):\r
44     def __init__(self, worker_id, args=None) -> None:\r
45         super().__init__(worker_id)\r
46         self.args = args\r
47         self.bus = bootstrap.bootstrap()\r
48         self.worker = PollWorker()\r
49 \r
50     def run(self):\r
51         try:\r
52             root = WatcherTree(OcloudWatcher(\r
53                 StxSaOcloudClient(), self.bus.uow))\r
54             root.addchild(\r
55                 DmsWatcher(StxSaDmsClient(), self.bus.uow))\r
56 \r
57             child_respool = root.addchild(\r
58                 ResourcePoolWatcher(StxSaResourcePoolClient(),\r
59                                     self.bus.uow))\r
60             child_pserver = child_respool.addchild(\r
61                 PServerWatcher(StxPserverClient(), self.bus.uow))\r
62             child_pserver.addchild(\r
63                 PServerCpuWatcher(StxCpuClient(), self.bus.uow))\r
64 \r
65             self.worker.add_watcher(root)\r
66 \r
67             self.worker.start()\r
68         except Exception as ex:\r
69             logger.warning("WorkerService Exception:" + str(ex))\r
70         finally:\r
71             self.worker.stop()\r
72 \r
73 \r
74 def start_watchers(sm: cotyledon.ServiceManager = None):\r
75     watchersm = sm if sm else cotyledon.ServiceManager()\r
76     watchersm.add(WatcherService, workers=1, args=())\r
77     watchersm.run()\r
78 \r
79 \r
80 def main():\r
81     logger.info("Resource watcher starting")\r
82     start_watchers()\r
83 \r
84 \r
85 if __name__ == "__main__":\r
86     main()\r