Author: remi
Date: 2009-04-06 09:35:25 +0200 (Mon, 06 Apr 2009)
New Revision: 4343
Modified:
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
Log:
* refactored the "scheduler" resource according the last scheduler module
modifications
Modified:
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
===================================================================
---
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
2009-04-06 07:34:22 UTC (rev 4342)
+++
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
2009-04-06 07:35:25 UTC (rev 4343)
@@ -3,12 +3,24 @@
#
==============================================================================
# This resource depends of the following resources :
-'''
+
import datetime
from util.scheduler.Scheduler import Scheduler
from util.scheduler.Task import *
+# Scheduler manager events/statuses
+ST_NAME_SCM_RUN = "scheduler_manager_run"
+ST_NAME_SCM_TASK_ADDED = "scheduler_manager_task_added"
+ST_NAME_SCM_TASK_REMOVED = "scheduler_manager_task_removed"
+
+# Attitune manager events/statuses list
+SW_NAME_SCHEDULER_MANAGER = [
+ ST_NAME_SCM_RUN,
+ ST_NAME_SCM_TASK_ADDED,
+ ST_NAME_SCM_TASK_REMOVED,
+]
+
#
------------------------------------------------------------------------------
# Declaration of the resource "scheduler".
#
------------------------------------------------------------------------------
@@ -22,62 +34,141 @@
self.name = "scheduler"
self.comment = "Resource to manage the scheduler."
self.fileName = RESOURCE_FILENAME
- self.scheduler = Scheduler()
+ # Create the scheduler.
+ self.__scheduler = Scheduler(globals())
+ self.__scheduler.setOnTaskAddedCallback(self.__onTaskAdded)
+ self.__scheduler.setOnTaskRemovedCallback(self.__onTaskRemoved)
+ # Registering the scheduler manager statuses.
+ for statusName in SW_NAME_SCHEDULER_MANAGER:
+ eventsHandler.insert(statusName)
def start(self):
- self.scheduler.start()
+ self.__scheduler.start()
+ self.__publishEvents(True, ST_NAME_SCM_RUN, ["True",])
def stop(self):
- self.scheduler.stop()
+ self.__scheduler.stop()
+ self.__publishEvents(True, ST_NAME_SCM_RUN, ["False",])
#
--------------------------------------------------------------------------
+ # Private methods
+ #
--------------------------------------------------------------------------
+
+ def __publishEvents(self, sendToClients, eventName, eventValues = []):
+ def async():
+ values = ""
+ for value in eventValues:
+ values += value + ":"
+ if len(values) > 0:
+ values = values[:-1]
+ eventStruct = {
+ 'name' : eventName,
+ 'value' : values,
+ 'delay' : "0.0",
+ 'type' : "string"
+ }
+ if sendToClients:
+ clientsManager.pushEvents([eventStruct,])
+ eventsHandler.emit(eventName, (values, 0.0))
+ t = threading.Thread(target = async)
+ t.start()
+
+ def __onTaskAdded(self, task):
+ print "Task added :", task.getDescription().getName(),
task.getDescription().toString()
+ self.__publishEvents(True, ST_NAME_SCM_TASK_ADDED,
+ [task.getDescription().getId(), task.getDescription().getName()])
+
+ def __onTaskRemoved(self, task):
+ print "Task removed :", task.getDescription().toString()
+ self.__publishEvents(True, ST_NAME_SCM_TASK_REMOVED,
+ [task.getDescription().getId(), task.getDescription().getName()])
+
+ def weekMaskStringToList(self, weekMaskString):
+ result = [True, True, True, True, True, True, True]
+ if weekMaskString <= 2:
+ return result
+ weekMaskString = weekMaskString[1:-1]
+ try:
+ splitedStr = weekMaskString.split(",")
+ if len(splitedStr) == 7:
+ for i, value in enumerate(splitedStr):
+ if value == "1":
+ result[i] = True
+ else:
+ result[i] = False
+ except:
+ pass
+ return result
+
+ #
--------------------------------------------------------------------------
# Public methods
#
--------------------------------------------------------------------------
- def createTask_RunEveryX(self, weekMask, hour, minute, second, command):
+ def getScheduler(self):
+ """Get the scheduler.
+ @return: A Scheduler object.
+ """
+ return self.__scheduler
+
+ def createTask_RunEveryX(self, name, weekMask, hour, minute, second,
+ command, arguments, data):
"""Create a task which start every x delay.
- hour, minute, second define the time delay between 2 executions.
- Typically for a pooling task.
+ @param name: Task name.
@param weekMask: Week mask. [True, True, True, True, True, True, True]
@param hour: <0..23>
@param minute: <0..59>
@param second: <0..59>
@param command: Command to execute.
- @return: The task id.
+ @param arguments: Arguments of the command.
+ @param data: User data.
+ @return: The task id and the task name or None None.
"""
- task = Task(SCH_LOOP_REL, weekMask, hour, minute, second, command)
- return self.scheduler.insertTask(task)
+ task = Task(SCH_LOOP_REL, weekMask, hour, minute, second, -1, -1, -1,
+ command, arguments, data)
+ return self.__scheduler.insertTask(task, name)
- def createTask_RunEveryXFromFullHour(self, weekMask, hour, minute, second,
- command):
+ def createTask_RunEveryXFromFullHour(self, name, weekMask, hour, minute,
second,
+ command, arguments, data):
"""Create a task which start every x delay synchronized with hh:00:00.
- Typically for an alarm task. (Clock gadget start at hour:00, 15, 30,
45)
- The first execution will be at hour begin + delay time.
+ @param name: Task name.
@param weekMask: Week mask. [True, True, True, True, True, True, True]
@param hour: <0..23>
@param minute: <0..59>
@param second: <0..59>
@param command: Command to execute.
- @return: The task id.
+ @param arguments: Arguments of the command.
+ @param data: User data.
+ @return: The task id and the task name or None None.
"""
- task = Task(SCH_LOOP_ABS, weekMask, hour, minute, second, command)
- return self.scheduler.insertTask(task)
+ task = Task(SCH_LOOP_ABS, weekMask, hour, minute, second, -1, -1, -1,
+ command, arguments, data)
+ return self.__scheduler.insertTask(task, name)
- def createTask_RunDailyAtTime(self, weekMask, hour, minute, second,
command):
+ def createTask_RunDailyAtTime(self, name, weekMask, hour, minute, second,
+ command, arguments, data):
"""Create a daily task which run at fixed time.
+ @param name: Task name.
@param weekMask: Week mask. [True, True, True, True, True, True, True]
@param hour: <0..23>
@param minute: <0..59>
@param second: <0..59>
@param command: Command to execute.
- @return: The task id.
+ @param arguments: Arguments of the command.
+ @param data: User data.
+ @return: The task id and the task name or None None.
"""
- task = Task(SCH_ONCE_ABS, weekMask, hour, minute, second, command)
- return self.scheduler.insertTask(task)
+ task = Task(SCH_ONCE_ABS, weekMask, hour, minute, second, -1, -1, -1,
+ command, arguments, data)
+ return self.__scheduler.insertTask(task, name)
- def createTask_RunOnceAtDateTime(self, year, month, day, hour, minute,
- second, command):
+ def createTask_RunOnceAtDateTime(self, name, year, month, day, hour,
minute,
+ second, command, arguments, data):
"""Create a task which run once time at a specific date time.
+ @param name: Task name.
@param year: Year.
@param month: <1..12>
@param day: <1..31>
@@ -85,34 +176,75 @@
@param minute: <0..59>
@param second: <0..59>
@param command: Command to execute.
- @return: The task id.
+ @param arguments: Arguments of the command.
+ @param data: User data.
+ @return: The task id and the task name or None None.
"""
task = Task(SCH_ONCE_ABS, [True, True, True, True, True, True, True],
- hour, minute, second, command, year, month, day)
- return self.scheduler.insertTask(task)
+ hour, minute, second, year, month, day, command, arguments, data)
+ return self.__scheduler.insertTask(task, name)
- def createTask_RunOnceDelayed(self, hour, minute, second, command):
+ def createTask_RunOnceDelayed(self, name, hour, minute, second, command,
+ arguments, data):
"""Create a task which run once time after a delay.
+ @param name: Task name.
@param hour: <0..23>
@param minute: <0..59>
@param second: <0..59>
@param command: Command to execute.
- @return: The task id.
+ @param arguments: Arguments of the command.
+ @param data: User data.
+ @return: The task id and the task name or None None.
"""
task = Task(SCH_ONCE_REL, [True, True, True, True, True, True, True],
- hour, minute, second, command)
- return self.scheduler.insertTask(task)
+ hour, minute, second, -1, -1, -1, command, arguments, data)
+ return self.__scheduler.insertTask(task, name)
+ def createTask(self, command, arguments, taskType, taskName, weekMask,
hour,
+ minute, second, year, month, day, data):
+ """Create a task to start a gadget.
+ @param command: Command to execute.
+ @param arguments: Arguments of the command.
+ @param taskType: <EVERY X|EVERY X FROM FULL HOUR|DAILY AT|ONCE AT|
+ ONCE DELAYED>
+ @param taskName: Task name.
+ @param weekMask: Week mask. [True, True, True, True, True, True, True]
+ @param hour: <0..23>
+ @param minute: <0..59>
+ @param second: <0..59>
+ @param year: Year.
+ @param month: <1..12>
+ @param day: <1..31>
+ @param data: User data.
+ @return: The task id and the task name or None None.
+ """
+ if taskType == "EVERY X":
+ return self.createTask_RunEveryX(taskName, weekMask, hour, minute,
+ second, command, arguments, data)
+ if taskType == "EVERY X FROM FULL HOUR":
+ return self.createTask_RunEveryXFromFullHour(taskName, weekMask,
+ hour, minute, second, command, arguments, data)
+ if taskType == "DAILY AT":
+ return self.createTask_RunDailyAtTime(taskName, weekMask, hour,
+ minute, second, command, arguments, data)
+ if taskType == "ONCE AT":
+ return self.createTask_RunOnceAtDateTime(taskName, year, month,
day,
+ hour, minute, second, command, arguments, data)
+ if taskType == "ONCE DELAYED":
+ return self.createTask_RunOnceDelayed(taskName, hour, minute,
+ second, command, arguments, data)
+ return None, None
+
def removeTask(self, taskId):
"""Remove a task from the scheduler.
@param taskId: Task id.
"""
- self.scheduler.removeTask(taskId)
+ self.__scheduler.removeTask(taskId)
def clear(self):
"""Clear the scheduler.
"""
- self.scheduler.clear()
+ self.__scheduler.clear()
# Create an instance of the resource
resourceScheduler = TDSResourceScheduler("resourceScheduler")
@@ -120,193 +252,6 @@
resourcesManager.addResource(resourceScheduler)
#
------------------------------------------------------------------------------
-# Declaration of the service "run_daily_at_time".
-#
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunDailyAtTime(TDSService):
-
- def configure(self):
- self.parametersDict = {
- 'command' : 'string',
- 'hour' : 'uint8',
- 'minute' : 'uint8',
- 'second' : 'uint8',
- 'week_mask' : 'string',
- }
- self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
- self.exclusiveExecution = False
- self.name = "run_daily_at_time"
- self.comment = "Create a daily task which run at fixed time."
-
- def execute(self, id, parameters):
- headersStruct = self.getDefaultHeadersStruct()
- contentStruct = self.getDefaultContentStruct()
- contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- command = parameters['command']
- if len(parameters['week_mask']) < 38:
- weekMask = [True, True, True, True, True, True, True]
- else:
- weekMask = eval(parameters['week_mask'][1:-1])
- hour = parameters['hour']
- minute = parameters['minute']
- second = parameters['second']
- id = resourceScheduler.createTask_RunDailyAtTime(weekMask, hour,
minute,
- second, command)
- contentStruct['root']['data'] = id
- return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunDailyAtTime)
-
-
-#
------------------------------------------------------------------------------
-# Declaration of the service "run_every_x".
-#
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunEveryX(TDSService):
-
- def configure(self):
- self.parametersDict = {
- 'command' : 'string',
- 'hour' : 'uint8',
- 'minute' : 'uint8',
- 'second' : 'uint8',
- 'week_mask' : 'string',
- }
- self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
- self.exclusiveExecution = False
- self.name = "run_every_x"
- self.comment = "Create a task which start every x delay."
-
- def execute(self, id, parameters):
- headersStruct = self.getDefaultHeadersStruct()
- contentStruct = self.getDefaultContentStruct()
- contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- command = parameters['command']
- if len(parameters['week_mask']) < 38:
- weekMask = [True, True, True, True, True, True, True]
- else:
- weekMask = eval(parameters['week_mask'][1:-1])
- hour = parameters['hour']
- minute = parameters['minute']
- second = parameters['second']
- id = resourceScheduler.createTask_RunEveryX(weekMask, hour, minute,
- second, command)
- contentStruct['root']['data'] = id
- return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunEveryX)
-
-#
------------------------------------------------------------------------------
-# Declaration of the service "run_every_x_from_full_hour".
-#
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunEveryXFromFullHour(TDSService):
-
- def configure(self):
- self.parametersDict = {
- 'command' : 'string',
- 'hour' : 'uint8',
- 'minute' : 'uint8',
- 'second' : 'uint8',
- 'week_mask' : 'string',
- }
- self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
- self.exclusiveExecution = False
- self.name = "run_every_x_from_full_hour"
- self.comment = "Create a task which start every x delay synchronized
with hh:00:00."
-
- def execute(self, id, parameters):
- headersStruct = self.getDefaultHeadersStruct()
- contentStruct = self.getDefaultContentStruct()
- contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- command = parameters['command']
- if len(parameters['week_mask']) < 38:
- weekMask = [True, True, True, True, True, True, True]
- else:
- weekMask = eval(parameters['week_mask'][1:-1])
- hour = parameters['hour']
- minute = parameters['minute']
- second = parameters['second']
- id = resourceScheduler.createTask_RunEveryXFromFullHour(weekMask, hour,
- minute, second, command)
- contentStruct['root']['data'] = id
- return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunEveryXFromFullHour)
-
-#
------------------------------------------------------------------------------
-# Declaration of the service "run_once_delayed".
-#
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunOnceDelayed(TDSService):
-
- def configure(self):
- self.parametersDict = {
- 'command' : 'string',
- 'hour' : 'uint8',
- 'minute' : 'uint8',
- 'second' : 'uint8',
- }
- self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
- self.exclusiveExecution = False
- self.name = "run_once_delayed"
- self.comment = "Create a task which start every x delay synchronized
with hh:00:00."
-
- def execute(self, id, parameters):
- headersStruct = self.getDefaultHeadersStruct()
- contentStruct = self.getDefaultContentStruct()
- contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- command = parameters['command']
- hour = parameters['hour']
- minute = parameters['minute']
- second = parameters['second']
- id = resourceScheduler.createTask_RunOnceDelayed(hour, minute, second,
- command)
- contentStruct['root']['data'] = id
- return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunOnceDelayed)
-
-#
------------------------------------------------------------------------------
-# Declaration of the service "run_once_at_date_time".
-#
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunOnceAtDateTime(TDSService):
-
- def configure(self):
- self.parametersDict = {
- 'command' : 'string',
- 'year' : 'int',
- 'month' : 'uint8',
- 'day' : 'uint8',
- 'hour' : 'uint8',
- 'minute' : 'uint8',
- 'second' : 'uint8',
- }
- self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
- self.exclusiveExecution = False
- self.name = "run_once_at_date_time"
- self.comment = "Create a task which run once time at a specific date
time."
-
- def execute(self, id, parameters):
- headersStruct = self.getDefaultHeadersStruct()
- contentStruct = self.getDefaultContentStruct()
- contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- command = parameters['command']
- year = parameters['year']
- month = parameters['month']
- day = parameters['day']
- hour = parameters['hour']
- minute = parameters['minute']
- second = parameters['second']
- id = resourceScheduler.createTask_RunOnceAtDateTime(year, month, day,
- hour, minute, second, command)
- contentStruct['root']['data'] = id
- return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunOnceAtDateTime)
-
-#
------------------------------------------------------------------------------
# Declaration of the service "clear".
#
------------------------------------------------------------------------------
class TDSServiceSchedulerClear(TDSService):
@@ -351,4 +296,3 @@
# Register the service into the resource
resourceScheduler.addService(TDSServiceSchedulerRemoveTask)
-'''
------------------------------------------------------------------------------
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn