Add the vesagent worker scheduler as celery task 43/47543/1
authorBin Yang <bin.yang@windriver.com>
Tue, 15 May 2018 07:46:27 +0000 (07:46 +0000)
committerBin Yang <bin.yang@windriver.com>
Tue, 15 May 2018 07:46:27 +0000 (07:46 +0000)
The vesagent configurion logic will trigger the
vesagent worker scheduler via celery

Change-Id: I2504f2ef2672c25416062f63ffdfc5495b9200b4
Issue-ID: MULTICLOUD-230
Signed-off-by: Bin Yang <bin.yang@windriver.com>
windriver/titanium_cloud/vesagent/tasks.py [new file with mode: 0644]
windriver/titanium_cloud/vesagent/vesagent_ctrl.py

diff --git a/windriver/titanium_cloud/vesagent/tasks.py b/windriver/titanium_cloud/vesagent/tasks.py
new file mode 100644 (file)
index 0000000..09591b4
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright (c) 2017-2018 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.
+
+### VES agent workers
+from __future__ import absolute_import, unicode_literals
+from titanium_cloud.celery import app
+import os
+import logging
+import json
+import time
+
+from django.core.cache import cache
+
+logger = logging.getLogger(__name__)
+
+
+@app.task(bind=True)
+def scheduleBacklogs(self, vimid):
+    # make sure only one task runs here
+    logger.info("schedule with vimid:%" % (vimid))
+
+    logger.debug("scheduleBacklogs starts")
+    backlog_count, next_time_slot = processBacklogs()
+    logger.debug("processBacklogs return with %s, %s" % (backlog_count, next_time_slot))
+
+    # sleep for next_time_slot
+    while backlog_count > 0:
+        time.sleep(next_time_slot)
+        backlog_count, next_time_slot = processBacklogs()
+
+    logger.debug("scheduleBacklogs stops")
+
+
+def processBacklogs():
+    # find out count of valid backlog and the next time slot
+    backlog_count = 2 #debug the timer sleep
+    next_time_slot = 10
+
+    logger.debug("process backlogs starts")
+
+    #TBD
+
+    logger.debug("return with %s" %(backlog_count, next_time_slot))
+    return backlog_count, next_time_slot
+
index 987a096..0cc2e9f 100644 (file)
@@ -22,6 +22,7 @@ from rest_framework.views import APIView
 
 from django.conf import settings
 from common.msapi import extsys
+from titanium_cloud.vesagent.tasks import scheduleBacklogs
 from titanium_cloud.vesagent.event_domain.fault_vm import buildBacklog_fault_vm
 
 from django.core.cache import cache
@@ -257,6 +258,8 @@ class VesAgentCtrl(APIView):
                 # cache forever
                 cache.set("VesAgentBacklogs.config.%s" % vimid, VesAgentBacklogsConfigStr, None)
 
+                # notify schduler
+                scheduleBacklogs.delay(vimid)
         except Exception as e:
             self._logger.error("exception:%s" % str(e))
             VesAgentBacklogsConfig = {"error":"exception occurs during build backlogs"}