|
From: <wgh...@us...> - 2009-08-25 01:19:55
|
Revision: 22799
http://personalrobots.svn.sourceforge.net/personalrobots/?rev=22799&view=rev
Author: wghassan
Date: 2009-08-25 01:19:47 +0000 (Tue, 25 Aug 2009)
Log Message:
-----------
added AppStatus and AppUpdate messages
Modified Paths:
--------------
pkg/trunk/sandbox/web/launchman/src/launchman/app.py
pkg/trunk/sandbox/web/launchman/src/launchman.py
pkg/trunk/sandbox/web/webui/src/webui/mod/webui/db_webui.py
pkg/trunk/sandbox/web/webui/src/webui/mod/webui/jslib/ros.js
pkg/trunk/sandbox/web/webui/src/webui/mod/webui/templates/header.cs
Added Paths:
-----------
pkg/trunk/sandbox/web/launchman/msg/AppStatus.msg
pkg/trunk/sandbox/web/launchman/msg/AppUpdate.msg
Removed Paths:
-------------
pkg/trunk/sandbox/web/launchman/msg/TaskStatus.msg
Added: pkg/trunk/sandbox/web/launchman/msg/AppStatus.msg
===================================================================
--- pkg/trunk/sandbox/web/launchman/msg/AppStatus.msg (rev 0)
+++ pkg/trunk/sandbox/web/launchman/msg/AppStatus.msg 2009-08-25 01:19:47 UTC (rev 22799)
@@ -0,0 +1 @@
+string[] active
Added: pkg/trunk/sandbox/web/launchman/msg/AppUpdate.msg
===================================================================
--- pkg/trunk/sandbox/web/launchman/msg/AppUpdate.msg (rev 0)
+++ pkg/trunk/sandbox/web/launchman/msg/AppUpdate.msg 2009-08-25 01:19:47 UTC (rev 22799)
@@ -0,0 +1,5 @@
+Header header
+string taskid
+string username
+string status
+time started
Deleted: pkg/trunk/sandbox/web/launchman/msg/TaskStatus.msg
===================================================================
--- pkg/trunk/sandbox/web/launchman/msg/TaskStatus.msg 2009-08-25 01:18:43 UTC (rev 22798)
+++ pkg/trunk/sandbox/web/launchman/msg/TaskStatus.msg 2009-08-25 01:19:47 UTC (rev 22799)
@@ -1,5 +0,0 @@
-Header header
-string taskid
-string username
-string status
-time started
Modified: pkg/trunk/sandbox/web/launchman/src/launchman/app.py
===================================================================
--- pkg/trunk/sandbox/web/launchman/src/launchman/app.py 2009-08-25 01:18:43 UTC (rev 22798)
+++ pkg/trunk/sandbox/web/launchman/src/launchman/app.py 2009-08-25 01:19:47 UTC (rev 22799)
@@ -53,11 +53,12 @@
try:
self.taskid = taskid
self.app_file = app_file
- self.name = doc['name']
- self.package = doc['package']
- self.provides = doc['provides']
- self.launch_file = doc['launch_file']
- self.depends = doc['depends']
+ self.name = doc['name'].strip()
+ self.package = doc['package'].strip()
+ self.launch_file = doc['launch_file'].strip()
+
+ self.provides = doc.get('provides', None)
+ self.depends = doc.get('depends', None)
except KeyError:
print "Invalid YAML file"
Modified: pkg/trunk/sandbox/web/launchman/src/launchman.py
===================================================================
--- pkg/trunk/sandbox/web/launchman/src/launchman.py 2009-08-25 01:18:43 UTC (rev 22798)
+++ pkg/trunk/sandbox/web/launchman/src/launchman.py 2009-08-25 01:19:47 UTC (rev 22799)
@@ -38,6 +38,8 @@
import roslib; roslib.load_manifest(PKG)
+import time
+
from launchman.srv import *
from launchman.msg import *
import rospy
@@ -52,8 +54,14 @@
from launchman import app
-class TaskGroup:
- def __init__(self, manager):
+class AppGroup:
+ def __init__(self, manager, apprunner):
+ self.apprunner = None
+ self.manager = manager
+
+class AppRunner:
+ def __init__(self, taskid, manager):
+ self.taskid = taskid
self.task = AppUpdate(None, None, None, None, None)
self.app = None
self.runner = None
@@ -98,7 +106,7 @@
def __repr__(self):
- return "<TaskGroup %s %s %s>" % (self.app.provides, self.app.taskid, len(self.childGroups))
+ return "<AppRunner %s: %s %s %s>" % (self.taskid, self.app.provides, self.app.taskid, len(self.childGroups))
@@ -116,96 +124,94 @@
def start_task(self, req):
a = app.App(req.taskid)
pgroup = None
- group = self._taskGroups.get(a.provides, None)
- if group:
- if group.task.taskid == req.taskid:
+ runner = self._taskGroups.get(a.provides, None)
+ if runner:
+ if runner.task.taskid == req.taskid:
print "already running"
return StartTaskResponse("already running")
- self._stopTask(group)
+ self._stopTask(runner)
- if a.depends and a.depends.strip():
- print "depends", a.depends
+ if a.depends:
pgroup = self._taskGroups.get(a.depends, None)
if not pgroup:
print "no parent task group %s running." % str(a.depends)
return StartTaskResponse("no parent task group %s running." % str(a.depends))
- self._apps[req.taskid] = a
- group = TaskGroup(self)
- group.app = a
+ runner = AppRunner(req.taskid, self)
+ runner.app = a
+ self._apps[req.taskid] = runner
+
if a.provides:
- self._taskGroups[a.provides] = group
+ self._taskGroups[a.provides] = runner
if pgroup:
- pgroup.childGroups.append(group)
+ pgroup.childGroups.append(runner)
- print "startTask [%s, %s, %s]" % (req.taskid, a.name, req.username)
- group.task.taskid = req.taskid
- group.task.username = req.username
- group.task.started = rospy.get_rostime()
- group.task.status = "starting"
+ #print "startTask [%s, %s, %s]" % (req.taskid, a.name, req.username)
+ runner.task.taskid = req.taskid
+ runner.task.username = req.username
+ runner.task.started = rospy.get_rostime()
+ runner.task.status = "starting"
- self.app_update.publish(group.task)
+ self.app_update.publish(runner.task)
- group.launch()
+ runner.launch()
- group.task.status = "running"
- self.app_update.publish(group.task)
+ time.sleep(1)
+ runner.task.status = "running"
+ self.app_update.publish(runner.task)
self._send_status()
return StartTaskResponse("done")
def showstate(self):
print "_" * 40
- for provides, group in self._taskGroups.items():
- print provides, group.childGroups
+ for provides, runner in self._taskGroups.items():
+ print provides, runner.childGroups
- def _stopTask(self, group):
- print "_stopTask", group.app.provides
+ def _stopTask(self, runner):
+ runner.task.status = "stopping"
+ self.app_update.publish(runner.task)
- group.task.status = "stopping"
- self.app_update.publish(group.task)
-
- print "childGroups", group, group.childGroups
- for cgroup in group.childGroups[:]:
+ for cgroup in runner.childGroups[:]:
self._stopTask(cgroup)
- group.stop()
+ runner.stop()
+ time.sleep(1)
- group.task.status = "stopped"
- self.app_update.publish(group.task)
+ runner.task.status = "stopped"
+ self.app_update.publish(runner.task)
- if group.app.depends:
- pgroup = self._taskGroups.get(group.app.depends.strip(), None)
+ if runner.app.depends:
+ pgroup = self._taskGroups.get(runner.app.depends, None)
if pgroup:
- pgroup.childGroups.remove(group)
+ pgroup.childGroups.remove(runner)
- if group.app.provides:
- print "removing", group.app.provides
- del self._taskGroups[group.app.provides]
+ if runner.app.provides:
+ print "removing", runner.app.provides
+ del self._taskGroups[runner.app.provides]
+ if runner.taskid in self._apps:
+ del self._apps[runner.taskid]
+ print "removing", runner.taskid
+
def stop_task(self, req):
- app = self._apps[req.taskid]
+ if req.taskid not in self._apps:
+ return StopTaskResponse("no such task: %s" % req.taskid)
+
+ runner = self._apps[req.taskid]
- group = self._taskGroups.get(app.provides, None)
- if not group:
- msg = "no such group: " + str(app.provides)
- return StopTaskResponse(msg)
+ self._stopTask(runner)
- self._stopTask(group)
-
- del self._apps[req.taskid]
-
self._send_status()
return StopTaskResponse("done")
def status_update(self, req):
- self._send_status()
- for provides, group in self._taskGroups.items():
- self.app_update.publish(group.task)
+ for provides, runner in self._taskGroups.items():
+ self.app_update.publish(runner.task)
return StatusUpdateResponse("done")
Modified: pkg/trunk/sandbox/web/webui/src/webui/mod/webui/db_webui.py
===================================================================
--- pkg/trunk/sandbox/web/webui/src/webui/mod/webui/db_webui.py 2009-08-25 01:18:43 UTC (rev 22798)
+++ pkg/trunk/sandbox/web/webui/src/webui/mod/webui/db_webui.py 2009-08-25 01:19:47 UTC (rev 22799)
@@ -83,8 +83,6 @@
class Application(hdfhelp.HdfRow):
def fetchApp(self, prefix, hdf):
- warn('taskid', self.taskid)
- warn('taskid', repr(self.taskid))
_app = app.App(str(self.taskid))
hdf.setValue(prefix + ".name", _app.name)
Modified: pkg/trunk/sandbox/web/webui/src/webui/mod/webui/jslib/ros.js
===================================================================
--- pkg/trunk/sandbox/web/webui/src/webui/mod/webui/jslib/ros.js 2009-08-25 01:18:43 UTC (rev 22798)
+++ pkg/trunk/sandbox/web/webui/src/webui/mod/webui/jslib/ros.js 2009-08-25 01:19:47 UTC (rev 22799)
@@ -62,13 +62,17 @@
}
},
+ receive_service: function(json_result) {
+ // implement this to return the result to the calling service call.
+ },
+
receive: function(json_result) {
try {
+ this.lastTime = json_result.since;
this.evalMessages(json_result);
} catch (e) {
ros_debug("Error with evalMessages.");
}
- this.lastTime = json_result.since;
this.pump();
},
@@ -498,3 +502,32 @@
gRosClasses["RosOut_Widget"] = function(dom){
return new RosOut_Widget(dom);
}
+
+
+
+
+var ActiveTasks = Class.create({
+ initialize: function(domobj) {
+ this.pump = null;
+ this.domobj = domobj;
+ this.topics = [domobj.getAttribute("topic")];
+ },
+
+ init: function() {
+ this.domobj.innerHTML = "";
+ },
+
+ receive: function(msg) {
+ var s = "";
+ for(var i=0; i<msg.active.length; i++) {
+ s = s + "|" + msg.active[i];
+ }
+ this.domobj.innerHTML = s;
+ }
+});
+
+gRosClasses["ActiveTasks"] = function(dom){
+ return new ActiveTasks(dom);
+}
+
+
Modified: pkg/trunk/sandbox/web/webui/src/webui/mod/webui/templates/header.cs
===================================================================
--- pkg/trunk/sandbox/web/webui/src/webui/mod/webui/templates/header.cs 2009-08-25 01:18:43 UTC (rev 22798)
+++ pkg/trunk/sandbox/web/webui/src/webui/mod/webui/templates/header.cs 2009-08-25 01:19:47 UTC (rev 22799)
@@ -2,7 +2,10 @@
<tr>
<td width=1%><nobr>Robot: <?cs var:CGI.ServerName?></td>
<td width=1%><img src="templates/images/toolbar/grid-blue-split.gif"></td>
-<td width=90%>Core Status: <font color=green>Running</td>
+<td width=90%><nobr>Core Status: <font color=green>Running</font>
+<span objtype=ActiveTasks topic="/app_status"/>
+</nobr>
+</td>
<td width=1%><img src="templates/images/toolbar/grid-blue-split.gif"></td>
<td width=1%><nobr><div objtype=CircuitMonitor topic="/power_board_state"/></td>
<td width=1%><img src="templates/images/toolbar/grid-blue-split.gif"></td>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|