rhmessaging commits: r3643 - in mgmt/trunk/cumin/python/cumin: usergrid and 1 other directory.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-23 11:29:33 -0400 (Wed, 23 Sep 2009)
New Revision: 3643
Modified:
mgmt/trunk/cumin/python/cumin/parameters.py
mgmt/trunk/cumin/python/cumin/usergrid/widgets.py
mgmt/trunk/cumin/python/cumin/widgets.py
Log:
* Move the user attribute to cumin-common code, and put an instance
on CuminPage
* Only show the page nav to the main administration page if the user
has the admin role
Modified: mgmt/trunk/cumin/python/cumin/parameters.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/parameters.py 2009-09-23 15:01:11 UTC (rev 3642)
+++ mgmt/trunk/cumin/python/cumin/parameters.py 2009-09-23 15:29:33 UTC (rev 3643)
@@ -4,6 +4,10 @@
from model import Pool
from model import Job
+class UserAttribute(Attribute):
+ def get(self, session):
+ return session.user_session.subject
+
class ObjectAssociateAttribute(Attribute):
def __init__(self, app, name, object):
super(ObjectAssociateAttribute, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/usergrid/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/usergrid/widgets.py 2009-09-23 15:01:11 UTC (rev 3642)
+++ mgmt/trunk/cumin/python/cumin/usergrid/widgets.py 2009-09-23 15:29:33 UTC (rev 3643)
@@ -1,6 +1,7 @@
from wooly import *
from wooly.widgets import *
+from cumin.parameters import *
from cumin.widgets import *
from cumin.util import *
from cumin.grid.submission import *
@@ -12,18 +13,11 @@
strings = StringCatalog(__file__)
-class UserAttribute(Attribute):
- def get(self, session):
- return session.user_session.subject
-
class MainPage(CuminPage, ModeSet):
def __init__(self, app, name):
super(MainPage, self).__init__(app, name)
- self.user = UserAttribute(app, "user")
- self.add_attribute(self.user)
-
- self.main = MainView(app, "main", self.user)
+ self.main = MainView(app, "main")
self.add_mode(self.main)
self.set_default_frame(self.main)
@@ -31,31 +25,26 @@
return "User Grid"
class MainView(CuminMainView):
- def __init__(self, app, name, user):
+ def __init__(self, app, name):
super(MainView, self).__init__(app, name)
- self.overview = OverviewFrame(app, "overview", user)
+ self.overview = OverviewFrame(app, "overview")
self.add_tab(self.overview)
- self.submissions = UserSubmissionSet(app, "submissions", user)
+ self.submissions = UserSubmissionSet(app, "submissions")
self.add_tab(self.submissions)
- self.slots = UserSlotSet(app, "slots", user)
+ self.slots = UserSlotSet(app, "slots")
self.add_tab(self.slots)
class OverviewFrame(Widget):
- def __init__(self, app, name, user):
- super(OverviewFrame, self).__init__(app, name)
-
def render_title(self, session):
return "Overview"
class UserSubmissionSet(SubmissionSet):
- def __init__(self, app, name, user):
+ def __init__(self, app, name):
super(UserSubmissionSet, self).__init__(app, name)
- self.user = user
-
self.scheduler_col.visible = False
self.submitter_col.visible = False
@@ -63,18 +52,13 @@
pass # XXX return "where m.name = %(name)s"
def get_sql_values(self, session):
- user = self.user.get(session)
+ user = self.page.user.get(session)
return {"name": user.name}
class UserSlotSet(SlotSet):
- def __init__(self, app, name, user):
- super(UserSlotSet, self).__init__(app, name)
-
- self.user = user
-
def render_sql_where(self, session):
return "where s.remote_user like %(name)s"
def get_sql_values(self, session):
- user = self.user.get(session)
+ user = self.page.user.get(session)
return {"name": "%s%%" % user.name}
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-23 15:01:11 UTC (rev 3642)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-23 15:29:33 UTC (rev 3643)
@@ -73,10 +73,19 @@
self.html_class = CuminPageLinks.__name__
def do_get_items(self, session):
- return (self.app.main_page,
- self.app.user_grid_page,
- self.app.account_page)
+ pages = list()
+ user = self.page.user.get(session)
+ for role in user.roles:
+ if role.name == "admin":
+ pages.append(self.app.main_page)
+ break
+
+ pages.append(self.app.user_grid_page)
+ pages.append(self.app.account_page)
+
+ return pages
+
def render_item_content(self, session, page):
href = Session(page).marshal()
title = page.render_title(session)
@@ -1330,6 +1339,9 @@
self.__modal = Attribute(app, "modal")
self.add_attribute(self.__modal)
+ self.user = UserAttribute(app, "user")
+ self.add_attribute(self.user)
+
def save_session(self, session):
if self.app.debug:
self.app.debug.sessions.append(session)
16 years, 7 months
rhmessaging commits: r3642 - in mgmt/trunk/cumin/python/cumin: usergrid and 1 other directory.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-23 11:01:11 -0400 (Wed, 23 Sep 2009)
New Revision: 3642
Added:
mgmt/trunk/cumin/python/cumin/usergrid/widgets.py
mgmt/trunk/cumin/python/cumin/usergrid/widgets.strings
Removed:
mgmt/trunk/cumin/python/cumin/usergrid/main.strings
Modified:
mgmt/trunk/cumin/python/cumin/grid/slot.py
mgmt/trunk/cumin/python/cumin/usergrid/main.py
Log:
* Add a user-scope slots listing
* Move the widget code to its own file
* Remove obsolete template junk
Modified: mgmt/trunk/cumin/python/cumin/grid/slot.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/slot.py 2009-09-22 18:57:58 UTC (rev 3641)
+++ mgmt/trunk/cumin/python/cumin/grid/slot.py 2009-09-23 15:01:11 UTC (rev 3642)
@@ -45,6 +45,10 @@
s.qmf_update_time > now() - interval '60 minutes'
"""
+ def render_title(self, session):
+ count = self.get_item_count(session)
+ return "Slots %s" % fmt_count(count)
+
class NameColumn(SqlTableColumn):
def render_title(self, session, data):
return "Name"
Modified: mgmt/trunk/cumin/python/cumin/usergrid/main.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/usergrid/main.py 2009-09-22 18:57:58 UTC (rev 3641)
+++ mgmt/trunk/cumin/python/cumin/usergrid/main.py 2009-09-23 15:01:11 UTC (rev 3642)
@@ -7,6 +7,8 @@
from wooly.widgets import Link
+from widgets import *
+
strings = StringCatalog(__file__)
class UserGridModule(CuminModule):
@@ -15,42 +17,3 @@
app.add_page(app.user_grid_page)
module = UserGridModule()
-
-class MainPage(CuminPage, ModeSet):
- def __init__(self, app, name):
- super(MainPage, self).__init__(app, name)
-
- self.main = MainView(app, "main")
- self.add_mode(self.main)
- self.set_default_frame(self.main)
-
- def render_title(self, session):
- return "User Grid"
-
-class MainView(CuminMainView):
- def __init__(self, app, name):
- super(MainView, self).__init__(app, name)
-
- self.overview = OverviewFrame(app, "overview")
- self.add_tab(self.overview)
-
- self.submission = UserSubmissionSet(app, "submissions")
- self.add_tab(self.submission)
-
-class OverviewFrame(Widget):
- def render_title(self, session):
- return "Overview"
-
-class UserSubmissionSet(SubmissionSet):
- def __init__(self, app, name):
- super(UserSubmissionSet, self).__init__(app, name)
-
- self.scheduler_col.visible = False
- self.submitter_col.visible = False
-
- def render_sql_where(self, session):
- pass
- #return "where m.name = %(name)s"
-
- def get_sql_values(self, session):
- return {"name": session.user_session.subject.name}
Deleted: mgmt/trunk/cumin/python/cumin/usergrid/main.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/usergrid/main.strings 2009-09-22 18:57:58 UTC (rev 3641)
+++ mgmt/trunk/cumin/python/cumin/usergrid/main.strings 2009-09-23 15:01:11 UTC (rev 3642)
@@ -1,83 +0,0 @@
-[UserMainFrame.css]
-#head {
- padding: 0;
- min-height: 2.75em;
- background: #f9f9ff url("resource?name=shade.png") repeat-x scroll bottom center;
-}
-
-#logo {
- float: left;
- margin: 0.25em 1em;
-}
-
-#tabs {
- padding: 0 0 0 2em;
- position: relative;
- top: 1.175em;
-}
-
-#tabs li {
- display: inline;
-}
-
-#tabs li a {
- padding: 0.275em 0.5em;
- border-top: 1px solid #ccc;
- border-right: 1px solid #ccc;
- border-left: 1px solid #e7e7e7;
- -moz-border-radius: 0.35em 0.35em 0 0;
- -webkit-border-radius: 0.35em 0.35em 0 0;
- color: #333;
- background-color: #f7f7f7;
- line-height: 1.6em;
-}
-
-#tabs li:first-child a {
- border-left: 1px solid #ccc;
-}
-
-#tabs li a.selected {
- background-color: #fff;
- position: relative;
- z-index: 2;
-}
-
-#user {
- padding: 0.25em 0.5em;
- float: right;
- font-size: 0.9em;
-}
-
-#actions {
- padding: 0.25em 0.5em;
- float: right;
- font-size: 0.9em;
-}
-
-#body {
- border-top: 1px solid #ccc;
- padding: 0.75em 1em;
- position: relative;
- z-index: 1;
- min-height: 20em;
-}
-
-[UserMainFrame.html]
-<div id="head">
- <div id="user">
- Hi, {user_name}
- <strong>·</strong>
- <a id="logout" onclick="wooly.clearUpdates()" href="{logout_href}">Log Out</a>
- </div>
-
- <img id="logo" src="resource?name=rhlogo-32.png"/>
-
- <ul id="tabs">{tabs}</ul>
-</div>
-
-<div id="body">{content}</div>
-
-<div id="foot"/>
-
-[UserMainFrame.frame_html]
-<li><a href="{frame_href}">{frame_title}</a></li>
Added: mgmt/trunk/cumin/python/cumin/usergrid/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/usergrid/widgets.py (rev 0)
+++ mgmt/trunk/cumin/python/cumin/usergrid/widgets.py 2009-09-23 15:01:11 UTC (rev 3642)
@@ -0,0 +1,80 @@
+from wooly import *
+from wooly.widgets import *
+
+from cumin.widgets import *
+from cumin.util import *
+from cumin.grid.submission import *
+from cumin.grid.slot import *
+
+from wooly.widgets import Link
+
+from widgets import *
+
+strings = StringCatalog(__file__)
+
+class UserAttribute(Attribute):
+ def get(self, session):
+ return session.user_session.subject
+
+class MainPage(CuminPage, ModeSet):
+ def __init__(self, app, name):
+ super(MainPage, self).__init__(app, name)
+
+ self.user = UserAttribute(app, "user")
+ self.add_attribute(self.user)
+
+ self.main = MainView(app, "main", self.user)
+ self.add_mode(self.main)
+ self.set_default_frame(self.main)
+
+ def render_title(self, session):
+ return "User Grid"
+
+class MainView(CuminMainView):
+ def __init__(self, app, name, user):
+ super(MainView, self).__init__(app, name)
+
+ self.overview = OverviewFrame(app, "overview", user)
+ self.add_tab(self.overview)
+
+ self.submissions = UserSubmissionSet(app, "submissions", user)
+ self.add_tab(self.submissions)
+
+ self.slots = UserSlotSet(app, "slots", user)
+ self.add_tab(self.slots)
+
+class OverviewFrame(Widget):
+ def __init__(self, app, name, user):
+ super(OverviewFrame, self).__init__(app, name)
+
+ def render_title(self, session):
+ return "Overview"
+
+class UserSubmissionSet(SubmissionSet):
+ def __init__(self, app, name, user):
+ super(UserSubmissionSet, self).__init__(app, name)
+
+ self.user = user
+
+ self.scheduler_col.visible = False
+ self.submitter_col.visible = False
+
+ def render_sql_where(self, session):
+ pass # XXX return "where m.name = %(name)s"
+
+ def get_sql_values(self, session):
+ user = self.user.get(session)
+ return {"name": user.name}
+
+class UserSlotSet(SlotSet):
+ def __init__(self, app, name, user):
+ super(UserSlotSet, self).__init__(app, name)
+
+ self.user = user
+
+ def render_sql_where(self, session):
+ return "where s.remote_user like %(name)s"
+
+ def get_sql_values(self, session):
+ user = self.user.get(session)
+ return {"name": "%s%%" % user.name}
Added: mgmt/trunk/cumin/python/cumin/usergrid/widgets.strings
===================================================================
16 years, 7 months
rhmessaging commits: r3641 - store/trunk/cpp/tests/cluster.
by rhmessaging-commits@lists.jboss.org
Author: kpvdr
Date: 2009-09-22 14:57:58 -0400 (Tue, 22 Sep 2009)
New Revision: 3641
Modified:
store/trunk/cpp/tests/cluster/run_cluster_tests
Log:
Added temp dir cleaning to cluster tests
Modified: store/trunk/cpp/tests/cluster/run_cluster_tests
===================================================================
--- store/trunk/cpp/tests/cluster/run_cluster_tests 2009-09-22 18:17:46 UTC (rev 3640)
+++ store/trunk/cpp/tests/cluster/run_cluster_tests 2009-09-22 18:57:58 UTC (rev 3641)
@@ -316,4 +316,6 @@
exit 1;
fi
+../clean.sh
+
exit 0
16 years, 7 months
rhmessaging commits: r3640 - in store/trunk/cpp: lib/jrnl and 2 other directories.
by rhmessaging-commits@lists.jboss.org
Author: kpvdr
Date: 2009-09-22 14:17:46 -0400 (Tue, 22 Sep 2009)
New Revision: 3640
Modified:
store/trunk/cpp/lib/JournalImpl.cpp
store/trunk/cpp/lib/MessageStoreImpl.cpp
store/trunk/cpp/lib/jrnl/pmgr.hpp
store/trunk/cpp/tests/SimpleTest.cpp
store/trunk/cpp/tests/python_tests/flow_to_disk.py
store/trunk/cpp/tests/run_python_tests
Log:
Store tests for new flow-to-disk functionality for qpid r817748.
Modified: store/trunk/cpp/lib/JournalImpl.cpp
===================================================================
--- store/trunk/cpp/lib/JournalImpl.cpp 2009-09-22 14:02:42 UTC (rev 3639)
+++ store/trunk/cpp/lib/JournalImpl.cpp 2009-09-22 18:17:46 UTC (rev 3640)
@@ -252,6 +252,8 @@
#define MAX_AIO_SLEEPS 1000 // 10 sec
#define AIO_SLEEP_TIME 10000 // 10 ms
+// Return true if content is recovered from store; false if content is external and must be recovered from an external store.
+// Throw exception for all errors.
bool
JournalImpl::loadMsgContent(u_int64_t rid, std::string& data, size_t length, size_t offset)
{
Modified: store/trunk/cpp/lib/MessageStoreImpl.cpp
===================================================================
--- store/trunk/cpp/lib/MessageStoreImpl.cpp 2009-09-22 14:02:42 UTC (rev 3639)
+++ store/trunk/cpp/lib/MessageStoreImpl.cpp 2009-09-22 18:17:46 UTC (rev 3640)
@@ -1474,15 +1474,15 @@
JournalImpl* jc = static_cast<JournalImpl*>(queue->getExternalQueueStore());
if (txn->getXid().empty()) {
if (message->isContentReleased()) {
- jc->enqueue_extern_data_record(size, dtokp.get(), false);
+ jc->enqueue_extern_data_record(size, dtokp.get(), !message->isPersistent());
} else {
- jc->enqueue_data_record(buff, size, size, dtokp.get(), false);
+ jc->enqueue_data_record(buff, size, size, dtokp.get(), !message->isPersistent());
}
} else {
if (message->isContentReleased()) {
- jc->enqueue_extern_txn_data_record(size, dtokp.get(), txn->getXid(), false);
+ jc->enqueue_extern_txn_data_record(size, dtokp.get(), txn->getXid(), !message->isPersistent());
} else {
- jc->enqueue_txn_data_record(buff, size, size, dtokp.get(), txn->getXid(), false);
+ jc->enqueue_txn_data_record(buff, size, size, dtokp.get(), txn->getXid(), !message->isPersistent());
}
}
} else {
Modified: store/trunk/cpp/lib/jrnl/pmgr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/pmgr.hpp 2009-09-22 14:02:42 UTC (rev 3639)
+++ store/trunk/cpp/lib/jrnl/pmgr.hpp 2009-09-22 18:17:46 UTC (rev 3640)
@@ -87,7 +87,7 @@
page_state _state; ///< Status of page
u_int64_t _frid; ///< First rid in page (used for fhdr init)
u_int32_t _wdblks; ///< Total number of dblks in page so far
- u_int32_t _rdblks; ///< Total number of dblks in page so far
+ u_int32_t _rdblks; ///< Total number of dblks in page
std::deque<data_tok*>* _pdtokl; ///< Page message tokens list
fcntl* _wfh; ///< File handle for incrementing write compl counts
fcntl* _rfh; ///< File handle for incrementing read compl counts
Modified: store/trunk/cpp/tests/SimpleTest.cpp
===================================================================
--- store/trunk/cpp/tests/SimpleTest.cpp 2009-09-22 14:02:42 UTC (rev 3639)
+++ store/trunk/cpp/tests/SimpleTest.cpp 2009-09-22 18:17:46 UTC (rev 3640)
@@ -377,7 +377,8 @@
store.stage(pmsg);
//append to it
- msg->releaseContent(&store);//ensure that data is not held in memory but is appended to disk when added
+ msg->setStore(&store);
+ msg->releaseContent();//ensure that data is not held in memory but is appended to disk when added
store.appendContent(cpmsg, data1);
store.appendContent(cpmsg, data2);
Modified: store/trunk/cpp/tests/python_tests/flow_to_disk.py
===================================================================
--- store/trunk/cpp/tests/python_tests/flow_to_disk.py 2009-09-22 14:02:42 UTC (rev 3639)
+++ store/trunk/cpp/tests/python_tests/flow_to_disk.py 2009-09-22 18:17:46 UTC (rev 3640)
@@ -34,16 +34,16 @@
# --- Helper functions ---
- def _browse(self, qn, dt, am, numMsgs, msgSize, txnConsume):
+ def _browse(self, queueName, destinationTag, acquireMode, numMsgs, msgSize, txnConsume):
txid = None
if txnConsume:
- txid = self._makeXid("consumer-xid-%s" % qn)
+ txid = self._makeXid("consumer-xid-%s" % queueName)
self.session.dtx_select()
self.assertEqual(self.XA_OK, self.session.dtx_start(xid=txid).status)
- self.session.message_subscribe(queue=qn, destination=dt, acquire_mode=am)
- self.session.message_flow(destination=dt, unit=self.session.credit_unit.message, value=0xFFFFFFFF)
- self.session.message_flow(destination=dt, unit=self.session.credit_unit.byte, value=0xFFFFFFFF)
- queue = self.session.incoming(dt)
+ self.session.message_subscribe(queue=queueName, destination=destinationTag, acquire_mode=acquireMode)
+ self.session.message_flow(destination=destinationTag, unit=self.session.credit_unit.message, value=0xFFFFFFFF)
+ self.session.message_flow(destination=destinationTag, unit=self.session.credit_unit.byte, value=0xFFFFFFFF)
+ queue = self.session.incoming(destinationTag)
ids = RangedSet()
for msgNum in range(0, numMsgs):
expectedStr = self._makeMessage(msgNum, msgSize)
@@ -52,16 +52,16 @@
ids.add(msg.id)
return ids, txid
- def _checkCancel(self, qn, dt, numMsgs, ids):
+ def _checkCancel(self, queueName, destinationTag, numMsgs, ids):
self.session.message_release(ids)
- self.session.queue_declare(queue=qn)
- self.assertEqual(numMsgs, self.session.queue_query(queue=qn).message_count)
- self.session.message_cancel(destination=dt)
+ self.session.queue_declare(queue=queueName)
+ self.assertEqual(numMsgs, self.session.queue_query(queue=queueName).message_count)
+ self.session.message_cancel(destination=destinationTag)
- def _checkConsume(self, qn, am, numMsgs, ids, txid, txnConsume):
- if am == self.session.acquire_mode.not_acquired:
- self.session.queue_declare(queue=qn)
- self.assertEqual(numMsgs, self.session.queue_query(queue=qn).message_count)
+ def _checkConsume(self, queueName, acquireMode, numMsgs, ids, txid, txnConsume):
+ if acquireMode == self.session.acquire_mode.not_acquired:
+ self.session.queue_declare(queue=queueName)
+ self.assertEqual(numMsgs, self.session.queue_query(queue=queueName).message_count)
response = self.session.message_acquire(ids)
for range in ids:
for msgId in range:
@@ -73,10 +73,15 @@
self.assertEqual(self.XA_OK, self.session.dtx_commit(xid=txid, one_phase=False).status)
self._resetChannel()
- def _checkEmpty(self, qn):
- self.session.queue_declare(queue=qn)
- self.assertEqual(0, self.session.queue_query(queue=qn).message_count)
+ def _checkEmpty(self, queueName):
+ self.session.queue_declare(queue=queueName)
+ self.assertEqual(0, self.session.queue_query(queue=queueName).message_count)
+ def _handleSessionClose(self):
+ time.sleep(1)
+ self.tearDown()
+ self.setUp()
+
def _makeMessage(self, msgCnt, msgSize):
msg = "Message-%04d" % msgCnt
msgLen = len(msg)
@@ -93,19 +98,44 @@
branchqual = "v%s" % self.txCounter
return self.session.xid(format=0, global_id=txid, branch_id=branchqual)
- def _produce(self, qn, dm, numMsgs, msgSize, txnProduce):
+ def _produceDirect(self, queueName, deliveryMode, numMsgs, msgSize, txnProduce):
if txnProduce:
- txid = self._makeXid("producer-xid-%s" % qn)
+ txid = self._makeXid("producer-xid-%s" % queueName)
self.session.dtx_select()
self.assertEqual(self.XA_OK, self.session.dtx_start(xid=txid).status)
for msgNum in range(0, numMsgs):
msg_str = self._makeMessage(msgNum, msgSize)
- self.session.message_transfer(message=Message(self.session.delivery_properties(routing_key=qn, delivery_mode=dm), msg_str))
+ self.session.message_transfer(message=Message(self.session.delivery_properties(routing_key=queueName, delivery_mode=deliveryMode), msg_str))
if txnProduce:
self.assertEqual(self.XA_OK, self.session.dtx_end(xid=txid).status)
self.assertEqual(self.XA_OK, self.session.dtx_prepare(xid=txid).status)
self.assertEqual(self.XA_OK, self.session.dtx_commit(xid=txid, one_phase=False).status)
self._resetChannel()
+
+ def _produceFanout(self, exchangeName, deliveryMode, numMsgs, msgSize, txnProduce, fail_on_msg):
+ if txnProduce:
+ txid = self._makeXid("producer-xid-%s" % exchangeName)
+ self.session.dtx_select()
+ self.assertEqual(self.XA_OK, self.session.dtx_start(xid=txid).status)
+ try:
+ msgNum = 0
+ for msgNum in range(0, numMsgs):
+ msg_str = self._makeMessage(msgNum, msgSize)
+ self.session.message_transfer(destination=exchangeName, message=Message(self.session.delivery_properties(delivery_mode=deliveryMode), msg_str))
+ if fail_on_msg != None and msgNum > fail_on_msg and not txnProduce:
+ self.fail("Failed to throw SessionException on message_transfer %s" % fail_on_msg)
+ except SessionException:
+ if fail_on_msg != None and msgNum == fail_on_msg and not txnProduce:
+ self._handleSessionClose()
+ if txnProduce:
+ self.assertEqual(self.XA_OK, self.session.dtx_end(xid=txid).status)
+ if (fail_on_msg != None and txnProduce):
+ self.assertNotEqual(self.XA_OK, self.session.dtx_prepare(xid=txid).status)
+ self.assertEqual(self.XA_OK, self.session.dtx_rollback(xid=txid).status)
+ else:
+ self.assertEqual(self.XA_OK, self.session.dtx_prepare(xid=txid).status)
+ self.assertEqual(self.XA_OK, self.session.dtx_commit(xid=txid, one_phase=False).status)
+ self._resetChannel()
def _randomBool(self):
if random.randint(0, 1) > 0:
@@ -113,112 +143,72 @@
return False
def _resetChannel(self):
- self.session.close()
+ try:
+ self.session.close()
+ except Exception, e:
+ pass
self.session = self.conn.session("test-session", 1)
- # --- Simple tests ---
+ # --- Simple test framework (single queue) ---
- def test_FlowToDisk_00_SimpleMaxCount(self):
- """Flow-to-disk tests based on setting max_count"""
- self.simpleLimit("test_FlowToDisk_00a", max_count = 10)
- self.simpleLimit("test_FlowToDisk_00b", max_count = 10, persistent = True)
- self.simpleLimit("test_FlowToDisk_00c", max_count = 10, max_size = 10000000, numMsgs = 100, msgSize = 10000)
- self.simpleLimit("test_FlowToDisk_00d", max_count = 10, max_size = 10000000, persistent = True, numMsgs = 100, msgSize = 10000)
-
- def test_FlowToDisk_01_SimpleMaxSize(self):
- """Flow-to-disk tests based on setting max_size"""
- self.simpleLimit("test_FlowToDisk_01a", max_size = 100)
- self.simpleLimit("test_FlowToDisk_01b", max_size = 100, persistent = True)
- self.simpleLimit("test_FlowToDisk_01c", max_size = 100000, numMsgs = 100, msgSize = 10000)
- self.simpleLimit("test_FlowToDisk_01d", max_size = 100000, persistent = True, numMsgs = 100, msgSize = 10000)
-
- def test_FlowToDisk_02_SimpleMaxCountNotAcquired(self):
- """Flow-to-disk tests based on setting max_count, but not using pre-acquired mode (ie browsing)"""
- self.simpleLimit("test_FlowToDisk_02a", max_count = 10, pre_acquired = False)
- self.simpleLimit("test_FlowToDisk_02b", max_count = 10, persistent = True, pre_acquired = False)
- self.simpleLimit("test_FlowToDisk_02c", max_count = 10, max_size = 10000000, pre_acquired = False, numMsgs = 100, msgSize = 10000)
- self.simpleLimit("test_FlowToDisk_02d", max_count = 10, max_size = 10000000, persistent = True, pre_acquired = False, numMsgs = 100, msgSize = 10000)
-
- def test_FlowToDisk_03_SimpleMaxSizeNotAcquired(self):
- """Flow-to-disk tests based on setting max_size, but not using pre-acquired mode (ie browsing)"""
- self.simpleLimit("test_FlowToDisk_03a", max_size = 100, pre_acquired = False)
- self.simpleLimit("test_FlowToDisk_03b", max_size = 100, persistent = True, pre_acquired = False)
- self.simpleLimit("test_FlowToDisk_03c", max_size = 100, pre_acquired = False, numMsgs = 100, msgSize = 10000)
- self.simpleLimit("test_FlowToDisk_03d", max_size = 100, persistent = True, pre_acquired = False, numMsgs = 100, msgSize = 10000)
-
- def test_FlowToDisk_04_MaxSizeMaxCount(self):
- """Flow-to-disk tests based on setting both max-count and max-size at the same time"""
- self.simpleLimit("test_FlowToDisk_04a", max_count = 10, max_size = 1000)
- self.simpleLimit("test_FlowToDisk_04b", max_count = 10, max_size = 1000, msgSize = 250)
- self.simpleLimit("test_FlowToDisk_04c", max_count = 10, max_size = 1000, persistent = True)
- self.simpleLimit("test_FlowToDisk_04d", max_count = 10, max_size = 1000, msgSize = 250, persistent = True)
-
- def test_FlowToDisk_05_Randomized(self):
- """Randomized flow-to-disk tests"""
- seed = long(1000.0 * time.time())
- print "seed=0x%x" % seed
- random.seed(seed)
- for i in range(0, 10):
- self.randomLimit(i)
-
- def simpleLimit(self, qn, max_count = None, max_size = None, persistent = False, pre_acquired = True, numMsgs = 15, msgSize = None, browse = True):
- qa = {'qpid.policy_type':'flow_to_disk'}
+ def simpleLimit(self, queueName, max_count = None, max_size = None, persistent = False, pre_acquired = True, numMsgs = 15, msgSize = None, browse = True, policy = "flow_to_disk"):
+ if max_count != None or max_size != None:
+ queueArgs = {'qpid.policy_type':policy}
if max_count != None:
- qa['qpid.max_count'] = max_count
+ queueArgs['qpid.max_count'] = max_count
if max_size != None:
- qa['qpid.max_size'] = max_size
+ queueArgs['qpid.max_size'] = max_size
if persistent:
- dm = self.session.delivery_mode.persistent
+ deliveryMode = self.session.delivery_mode.persistent
else:
- dm = self.session.delivery_mode.non_persistent
+ deliveryMode = self.session.delivery_mode.non_persistent
if pre_acquired:
- am = self.session.acquire_mode.pre_acquired
+ acquireMode = self.session.acquire_mode.pre_acquired
else:
- am = self.session.acquire_mode.not_acquired
+ acquireMode = self.session.acquire_mode.not_acquired
# Cycle through the produce/consume block transaction combinations
for i in range(0, 4):
- tp = i & 1 != 0 # Transactional produce
- tc = i & 2 != 0 # Transactional consume
- self.txSimpleLimit(qn, qa, dm, am, numMsgs, msgSize, tp, tc, browse)
+ txnProduce = i & 1 != 0 # Transactional produce
+ txnConsume = i & 2 != 0 # Transactional consume
+ self._txSimpleLimit(queueName, queueArgs, deliveryMode, acquireMode, numMsgs, msgSize, txnProduce, txnConsume, browse)
- def randomLimit(self, count):
- qa = {'qpid.policy_type':'flow_to_disk'}
- qn = "randomized_test_%04d" % count
+ def randomLimit(self, count, policy = "flow_to_disk"):
+ queueArgs = {'qpid.policy_type':policy}
+ queueName = "randomized_test_%04d" % count
# Flow to disk policy
maxCount = None
if self._randomBool():
maxCount = random.randint(0,10000)
- qa['qpid.max_count'] = maxCount
+ queueArgs['qpid.max_count'] = maxCount
maxSize = None
if self._randomBool():
maxSize = random.randint(0, 1000000)
- qa['qpid.max_size'] = maxSize
+ queueArgs['qpid.max_size'] = maxSize
# Persistence
if self._randomBool():
- dm = self.session.delivery_mode.persistent
+ deliveryMode = self.session.delivery_mode.persistent
else:
- dm = self.session.delivery_mode.non_persistent
+ deliveryMode = self.session.delivery_mode.non_persistent
# Acquired mode
if self._randomBool():
- am = self.session.acquire_mode.pre_acquired
+ acquireMode = self.session.acquire_mode.pre_acquired
browse = False
else:
- am = self.session.acquire_mode.not_acquired
+ acquireMode = self.session.acquire_mode.not_acquired
browse = self._randomBool()
numMsgs = random.randint(1, 10000)
sizeLimit = int(1000000 / numMsgs)
msgSize = random.randint(1, sizeLimit)
- tp = self._randomBool()
- tc = self._randomBool()
+ txnProduce = self._randomBool()
+ txnConsume = self._randomBool()
- #print " qn=%s, qa=%s, dm=%s, am=%s, numMsgs=%d, msgSize=%d, tp=%s, tc=%s, browse=%s" % (qn, qa, dm, am, numMsgs, msgSize, tp, tc, browse)
- self.txSimpleLimit(qn, qa, dm, am, numMsgs, msgSize, tp, tc, browse)
+ self._txSimpleLimit(queueName, queueArgs, deliveryMode, acquireMode, numMsgs, msgSize, txnProduce, txnConsume, browse)
- def txSimpleLimit(self, qn, qa, dm, am, numMsgs, msgSize, tp, tc, browse):
+ def _txSimpleLimit(self, queueName, queueArgs, deliveryMode, acquireMode, numMsgs, msgSize, txnProduce, txnConsume, browse):
"""
Test a simple case of message limits which will force flow-to-disk.
* queue_args sets a limit - either max_count and/or max_size
@@ -227,19 +217,356 @@
* Check the broker has no messages left.
"""
- self.session.queue_declare(queue=qn, durable=True, arguments=qa)
+ self.session.queue_declare(queue=queueName, durable=True, arguments=queueArgs)
- # --- Add messages ---
- self._produce(qn, dm, numMsgs, msgSize, tp)
+ # Add messages
+ self._produceDirect(queueName, deliveryMode, numMsgs, msgSize, txnProduce)
- # --- Browse messages (if possible) ---
- if am == self.session.acquire_mode.not_acquired and browse:
- dtA = "tagA-%d-%d" % (tp, tc)
- ids, txid = self._browse(qn, dtA, am, numMsgs, msgSize, False)
- self._checkCancel(qn, dtA, numMsgs, ids)
+ # Browse messages (if possible)
+ if acquireMode == self.session.acquire_mode.not_acquired and browse:
+ dtA = "tagA-%d-%d" % (txnProduce, txnConsume)
+ ids, txid = self._browse(queueName, dtA, acquireMode, numMsgs, msgSize, False)
+ self._checkCancel(queueName, dtA, numMsgs, ids)
- # --- Consume messages ---
- dtB = "tagB-%d-%d" % (tp, tc)
- ids, txid = self._browse(qn, dtB, am, numMsgs, msgSize, tc)
- self._checkConsume(qn, am, numMsgs, ids, txid, tc)
- self._checkEmpty(qn)
+ # Consume messages
+ dtB = "tagB-%d-%d" % (txnProduce, txnConsume)
+ ids, txid = self._browse(queueName, dtB, acquireMode, numMsgs, msgSize, txnConsume)
+ self._checkConsume(queueName, acquireMode, numMsgs, ids, txid, txnConsume)
+ self._checkEmpty(queueName)
+
+ self.session.queue_delete(queue=queueName)
+
+ # --- Multi-queue test framework ---
+
+ def multiQueueLimit(self, queueMap, exchangeName = "amq.fanout", persistent = False, pre_acquired = True, numMsgs = 15, msgSize = None, browse = True, policy = "flow_to_disk", fail_on_msg = None):
+ if persistent:
+ deliveryMode = self.session.delivery_mode.persistent
+ else:
+ deliveryMode = self.session.delivery_mode.non_persistent
+ if pre_acquired:
+ acquireMode = self.session.acquire_mode.pre_acquired
+ else:
+ acquireMode = self.session.acquire_mode.not_acquired
+ # Cycle through the produce/consume block transaction combinations
+ for i in range(0, 4):
+ txnProduce = i & 1 != 0 # Transactional produce
+ txnConsume = i & 2 != 0 # Transactional consume
+ self._txMultiQueueLimit(queueMap, exchangeName, deliveryMode, acquireMode, numMsgs, msgSize, txnProduce, txnConsume, browse, policy, fail_on_msg)
+
+ def _txMultiQueueLimit(self, queueMap, exchangeName, deliveryMode, acquireMode, numMsgs, msgSize, txnProduce, txnConsume, browse, policy, fail_on_msg):
+ """
+ Test a multi-queue case
+ queueMap = queue map where map is queue name (key) against queue args (value)
+ """
+ self._multiQueueSetup(queueMap, exchangeName, txnProduce, txnConsume, policy)
+ self._produceFanout(exchangeName, deliveryMode, numMsgs, msgSize, txnProduce, fail_on_msg)
+ if fail_on_msg == None:
+ # Browse messages (ie get without acquiring)
+ if acquireMode == self.session.acquire_mode.not_acquired and browse:
+ for queue in queueMap.iterkeys():
+ deliveryTagA = "tagA-%d-%d" % (txnProduce, txnConsume)
+ queueName = "%s-%d-%d" % (queue, txnProduce, txnConsume)
+ ids, txid = self._browse(queueName, deliveryTagA, acquireMode, numMsgs, msgSize, False)
+ self._checkCancel(queueName, deliveryTagA, numMsgs, ids)
+ # Consume messages
+ for queue in queueMap.iterkeys():
+ deliveryTagB = "tagB-%d-%d" % (txnProduce, txnConsume)
+ queueName = "%s-%d-%d" % (queue, txnProduce, txnConsume)
+ ids, txid = self._browse(queueName, deliveryTagB, acquireMode, numMsgs, msgSize, txnConsume)
+ self._checkConsume(queueName, acquireMode, numMsgs, ids, txid, txnConsume)
+ self._checkEmpty(queueName)
+ self._multiQueueTeardown(queueMap, exchangeName, txnProduce, txnConsume)
+
+ def _multiQueueSetup(self, queueMap, exchangeName, txnProduce, txnConsume, policy, exclusive = True):
+ for queue, qp in queueMap.iteritems():
+ queueArgs = {}
+ ftd = False
+ for p,v in qp.iteritems():
+ if p == "persistent":
+ d = v == True
+ elif p == "qpid.max_count":
+ if v != None:
+ queueArgs[p] = v
+ ftd = True
+ elif p == "qpid.max_size":
+ if v != None:
+ queueArgs[p] = v
+ ftd = True
+ if ftd:
+ queueArgs["qpid.policy_type"] = policy
+ queueName = "%s-%d-%d" % (queue, txnProduce, txnConsume)
+ self.session.queue_declare(queue = queueName, durable = d, arguments = queueArgs, exclusive = exclusive)
+ self.session.exchange_bind(exchange = exchangeName, queue = queueName)
+
+ def _multiQueueTeardown(self, queueMap, exchangeName, txnProduce, txnConsume):
+ for queue in queueMap.iterkeys():
+ queueName = "%s-%d-%d" % (queue, txnProduce, txnConsume)
+ self.session.exchange_unbind(exchange = exchangeName, queue = queueName)
+ self.session.queue_delete(queue = queueName)
+
+ # --- Simple tests ---
+
+ def test_01_SimpleMaxCount(self):
+ """Flow-to-disk tests based on setting max_count"""
+ # Small msgs
+ self.simpleLimit("test_01a", max_count = 10)
+ self.simpleLimit("test_01b", max_count = 10, persistent = True)
+ # Large msgs - set max_size to high number to make sure it does not interfere
+ #self.simpleLimit("test_00c", max_count = 10, max_size = 10000000, numMsgs = 100, msgSize = 10000)
+ #self.simpleLimit("test_00d", max_count = 10, max_size = 10000000, persistent = True, numMsgs = 100, msgSize = 10000)
+
+ def test_02_SimpleMaxSize(self):
+ """Flow-to-disk tests based on setting max_size"""
+ # Small msgs
+ self.simpleLimit("test_02a", max_size = 100)
+ self.simpleLimit("test_02b", max_size = 100, persistent = True)
+ # Large msgs - set max_size to high number to make sure it does not interfere
+ #self.simpleLimit("test_01c", max_size = 100000, numMsgs = 100, msgSize = 10000)
+ #self.simpleLimit("test_01d", max_size = 100000, persistent = True, numMsgs = 100, msgSize = 10000)
+
+ def test_03_SimpleMaxCountNotAcquired(self):
+ """Flow-to-disk tests based on setting max_count, but not using pre-acquired mode (ie browsing)"""
+ # Small msgs
+ self.simpleLimit("test_03a", max_count = 10, pre_acquired = False)
+ self.simpleLimit("test_03b", max_count = 10, persistent = True, pre_acquired = False)
+ # Large msgs - set max_size to high number to make sure it does not interfere
+ #self.simpleLimit("test_02c", max_count = 10, max_size = 10000000, pre_acquired = False, numMsgs = 100, msgSize = 10000)
+ #self.simpleLimit("test_02d", max_count = 10, max_size = 10000000, persistent = True, pre_acquired = False, numMsgs = 100, msgSize = 10000)
+
+ def test_04_SimpleMaxSizeNotAcquired(self):
+ """Flow-to-disk tests based on setting max_size, but not using pre-acquired mode (ie browsing)"""
+ # Small msgs
+ self.simpleLimit("test_04a", max_size = 100, pre_acquired = False)
+ self.simpleLimit("test_04b", max_size = 100, persistent = True, pre_acquired = False)
+ # Large msgs - set max_size to high number to make sure it does not interfere
+ #self.simpleLimit("test_03c", max_size = 100, pre_acquired = False, numMsgs = 100, msgSize = 10000)
+ #self.simpleLimit("test_03d", max_size = 100, persistent = True, pre_acquired = False, numMsgs = 100, msgSize = 10000)
+
+ def test_05_MaxSizeMaxCount(self):
+ """Flow-to-disk tests based on setting both max-count and max-size at the same time"""
+ # Small msgs
+ self.simpleLimit("test_05a", max_count = 10, max_size = 1000)
+ self.simpleLimit("test_05b", max_count = 10, max_size = 1000, msgSize = 250)
+ # Large msgs - set max_size to high number to make sure it does not interfere
+ #self.simpleLimit("test_04c", max_count = 10, max_size = 1000, persistent = True)
+ #self.simpleLimit("test_04d", max_count = 10, max_size = 1000, msgSize = 250, persistent = True)
+
+ # --- Multi-queue tests ---
+
+ def test_06_MultiQueueTransQueueTransMsg(self):
+ """Flow-to-disk tests where queues and messages are transient and messages are routed to more than one queue"""
+ queueMap1 = {"test_06a" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_06b" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap1)
+
+ queueMap2 = {"test_06c" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_06d" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap2, fail_on_msg = 10)
+
+ queueMap3 = {"test_06e" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_06f" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap3, msgSize = 100, fail_on_msg = 10)
+ queueMap4 = {"test_06g" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_06h" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap4, fail_on_msg = 8)
+
+ queueMap5 = {"test_06i" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_06j" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap5, msgSize = 100, fail_on_msg = 8)
+
+ queueMap6 = {"test_06k" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_06l" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_06m" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_06n" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap6, msgSize = 100, fail_on_msg = 8)
+
+ def test_07_MultiQueueDurableQueueTransMsg(self):
+ """Flow-to-disk tests where queues are durable and messages are transient and messages are routed to more than one queue"""
+ queueMap1 = {"test_07a" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_07b" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap1)
+
+ queueMap2 = {"test_07c" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_07d" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap2)
+
+ queueMap3 = {"test_07e" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_07f" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap3, msgSize = 100)
+
+ queueMap4 = {"test_07g" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None},
+ "test_07h" : {"persistent":True, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap4)
+
+ queueMap5 = {"test_07i" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_07j" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap5, msgSize = 100)
+
+ queueMap6 = {"test_07k" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_07l" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None},
+ "test_07m" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_07n" : {"persistent":True, "qpid.max_count":8, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap6, msgSize = 100)
+
+
+ def test_08_MultiQueueTransQueueDurableMsg(self):
+ """Flow-to-disk tests where queues are transient and messages are durable and messages are routed to more than one queue"""
+ queueMap1 = {"test_08a" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_08b" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap1, persistent = True)
+
+ queueMap2 = {"test_08c" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_08d" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap2, persistent = True, fail_on_msg = 10)
+
+ queueMap3 = {"test_08e" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_08f" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap3, msgSize = 100, persistent = True, fail_on_msg = 10)
+
+ queueMap4 = {"test_08g" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_08h" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap4, persistent = True, fail_on_msg = 8)
+
+ queueMap5 = {"test_08i" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_08j" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap5, msgSize = 100, persistent = True, fail_on_msg = 8)
+
+ queueMap6 = {"test_08k" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_08l" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_08m" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_08n" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap6, msgSize = 100, persistent = True, fail_on_msg = 8)
+
+ def test_09_MultiQueueDurableQueueDurableMsg(self):
+ """Flow-to-disk tests where queues and messages are durable and messages are routed to more than one queue"""
+ queueMap1 = {"test_09a" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_09b" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap1, persistent = True)
+
+ queueMap2 = {"test_09c" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_09d" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap2, persistent = True)
+
+ queueMap3 = {"test_09e" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_09f" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap3, msgSize = 100, persistent = True)
+
+ queueMap4 = {"test_09g" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None},
+ "test_09h" : {"persistent":True, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap4, persistent = True)
+
+ queueMap5 = {"test_09i" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_09j" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap5, msgSize = 100, persistent = True)
+
+ queueMap6 = {"test_09k" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_09l" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None},
+ "test_09m" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_09n" : {"persistent":True, "qpid.max_count":8, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap6, msgSize = 100, persistent = True)
+
+ def test_10_MultiQueueMixedQueueTransMsg(self):
+ """Flow-to-disk tests where both queues are both durable and transient and messages are transient and messages are routed to more than one queue"""
+ queueMap1 = {"test_10a" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10b" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap1)
+
+ queueMap2 = {"test_10c" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10d" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap2)
+
+ queueMap3 = {"test_10e" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10f" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap3, fail_on_msg = 10)
+
+ queueMap4 = {"test_10g" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10h" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap4, msgSize = 100)
+
+ queueMap5 = {"test_10i" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10j" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap5, msgSize = 100, fail_on_msg = 10)
+
+ queueMap6 = {"test_10k" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_10l" : {"persistent":True, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap6, fail_on_msg = 10)
+
+ queueMap7 = {"test_10m" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None},
+ "test_10n" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap7, fail_on_msg = 8)
+
+ queueMap8 = {"test_10o" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_10p" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap8, msgSize = 100, fail_on_msg = 10)
+
+ queueMap9 = {"test_10q" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_10r" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap9, msgSize = 100, fail_on_msg = 8)
+
+ queueMap10 = {"test_10s" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10t" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_10u" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_10v" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": 800},
+ "test_10w" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_10x" : {"persistent":True, "qpid.max_count":12, "qpid.max_size": None},
+ "test_10y" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1100},
+ "test_10z" : {"persistent":True, "qpid.max_count":7, "qpid.max_size": 900} }
+ self.multiQueueLimit(queueMap10, msgSize = 100, fail_on_msg = 8)
+
+ def test_11_MultiQueueMixedQueueDurableMsg(self):
+ """Flow-to-disk tests where queues are both durable and transient and messages are durable and messages are routed to more than one queue"""
+ queueMap1 = {"test_11a" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11b" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap1, persistent = True)
+
+ queueMap2 = {"test_11c" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11d" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap2, persistent = True)
+
+ queueMap3 = {"test_11e" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11f" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap3, persistent = True, fail_on_msg = 10)
+
+ queueMap4 = {"test_11g" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11h" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap4, msgSize = 100, persistent = True)
+
+ queueMap5 = {"test_11i" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11j" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000} }
+ self.multiQueueLimit(queueMap5, msgSize = 100, persistent = True, fail_on_msg = 10)
+
+ queueMap6 = {"test_11k" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_11l" : {"persistent":True, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap6, persistent = True, fail_on_msg = 10)
+
+ queueMap7 = {"test_11m" : {"persistent":True, "qpid.max_count":10, "qpid.max_size": None},
+ "test_11n" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": None} }
+ self.multiQueueLimit(queueMap7, persistent = True, fail_on_msg = 8)
+
+ queueMap8 = {"test_11o" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_11p" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap8, msgSize = 100, persistent = True, fail_on_msg = 10)
+
+ queueMap9 = {"test_11q" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_11r" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 800} }
+ self.multiQueueLimit(queueMap9, msgSize = 100, persistent = True, fail_on_msg = 8)
+
+ queueMap10 = {"test_11s" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11t" : {"persistent":False, "qpid.max_count":10, "qpid.max_size": None},
+ "test_11u" : {"persistent":False, "qpid.max_count":None, "qpid.max_size": 1000},
+ "test_11v" : {"persistent":False, "qpid.max_count":8, "qpid.max_size": 800},
+ "test_11w" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": None},
+ "test_11x" : {"persistent":True, "qpid.max_count":12, "qpid.max_size": None},
+ "test_11y" : {"persistent":True, "qpid.max_count":None, "qpid.max_size": 1100},
+ "test_11z" : {"persistent":True, "qpid.max_count":7, "qpid.max_size": 900} }
+ self.multiQueueLimit(queueMap10, msgSize = 100, persistent = True, fail_on_msg = 8)
+
+ # --- Long and randomized tests ---
+
+ def test_12_Randomized(self):
+ """Randomized flow-to-disk tests"""
+ seed = long(1000.0 * time.time())
+ print "seed=0x%x" % seed
+ random.seed(seed)
+ for i in range(0, 10):
+ self.randomLimit(i)
Modified: store/trunk/cpp/tests/run_python_tests
===================================================================
--- store/trunk/cpp/tests/run_python_tests 2009-09-22 14:02:42 UTC (rev 3639)
+++ store/trunk/cpp/tests/run_python_tests 2009-09-22 18:17:46 UTC (rev 3640)
@@ -78,10 +78,12 @@
start_broker() {
${QPIDD} --daemon --port 0 --no-module-dir --load-module=${STORE_LIB} --data-dir=${STORE_DIR} --auth=no --log-enable info+ --log-to-file ${STORE_DIR}/broker.python-test.log > qpidd.port
LOCAL_PORT=`cat qpidd.port`
+ echo "run_python_tests: Started qpidd on port ${LOCAL_PORT}"
}
stop_broker() {
- ${QPIDD} -q --port $LOCAL_PORT
+ echo "run_python_tests: Stopping broker on port ${LOCAL_PORT}"
+ ${QPIDD} -q --port ${LOCAL_PORT}
}
fail=0
16 years, 7 months
rhmessaging commits: r3639 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-22 10:02:42 -0400 (Tue, 22 Sep 2009)
New Revision: 3639
Modified:
mgmt/trunk/cumin/python/cumin/widgets.strings
Log:
Adjust heading margins
Modified: mgmt/trunk/cumin/python/cumin/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-21 21:51:12 UTC (rev 3638)
+++ mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-22 14:02:42 UTC (rev 3639)
@@ -325,7 +325,7 @@
div.CuminSummary h1 {
font-size: 1.1em;
- margin: 0 0 1em 0;
+ margin: 0;
}
div.CuminSummary h1 img {
@@ -334,7 +334,7 @@
}
div.CuminSummary hr {
- margin: 0.75em 0;
+ margin: 0.65em 0;
border: 0;
border-top: 1px dotted #ccc;
padding: 0;
16 years, 7 months
rhmessaging commits: r3638 - in mgmt/trunk/cumin/python/cumin: grid and 2 other directories.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-21 17:51:12 -0400 (Mon, 21 Sep 2009)
New Revision: 3638
Modified:
mgmt/trunk/cumin/python/cumin/grid/job.py
mgmt/trunk/cumin/python/cumin/inventory/system.py
mgmt/trunk/cumin/python/cumin/messaging/queue.py
mgmt/trunk/cumin/python/cumin/widgets.py
Log:
Adjust top table column widths
Modified: mgmt/trunk/cumin/python/cumin/grid/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/job.py 2009-09-21 21:44:47 UTC (rev 3637)
+++ mgmt/trunk/cumin/python/cumin/grid/job.py 2009-09-21 21:51:12 UTC (rev 3638)
@@ -132,13 +132,13 @@
super(TopJobSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
- col.width = "70%"
+ col.width = "60%"
self.add_column(col)
self.set_default_column(col)
col = self.DurationColumn(app, "name")
- col.width = "20%"
+ col.width = "35%"
col.align = "right"
self.add_column(col)
Modified: mgmt/trunk/cumin/python/cumin/inventory/system.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/inventory/system.py 2009-09-21 21:44:47 UTC (rev 3637)
+++ mgmt/trunk/cumin/python/cumin/inventory/system.py 2009-09-21 21:51:12 UTC (rev 3638)
@@ -86,13 +86,13 @@
super(TopSystemSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
- col.width = "70%"
+ col.width = "60%"
self.add_column(col)
self.set_default_column(col)
col = self.LoadColumn(app, "load")
- col.width = "20%"
+ col.width = "35%"
col.align = "right"
self.add_column(col)
Modified: mgmt/trunk/cumin/python/cumin/messaging/queue.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/queue.py 2009-09-21 21:44:47 UTC (rev 3637)
+++ mgmt/trunk/cumin/python/cumin/messaging/queue.py 2009-09-21 21:51:12 UTC (rev 3638)
@@ -159,13 +159,13 @@
super(TopQueueSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
- col.width = "70%"
+ col.width = "60%"
self.add_column(col)
self.set_default_column(col)
col = self.EnqueuesColumn(app, "enqueues")
- col.width = "20%"
+ col.width = "35%"
col.align = "right"
self.add_column(col)
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-21 21:44:47 UTC (rev 3637)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-21 21:51:12 UTC (rev 3638)
@@ -688,7 +688,7 @@
self.html_class = TopTable.__name__
col = self.CountColumn(app, "name")
- col.width = "1em"
+ col.width = "5%"
col.align = "right"
self.add_column(col)
16 years, 7 months
rhmessaging commits: r3637 - in mgmt/trunk: cumin/python/cumin/account and 2 other directories.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-21 17:44:47 -0400 (Mon, 21 Sep 2009)
New Revision: 3637
Modified:
mgmt/trunk/cumin/python/cumin/account/widgets.py
mgmt/trunk/cumin/python/cumin/account/widgets.strings
mgmt/trunk/cumin/python/cumin/main.py
mgmt/trunk/cumin/python/cumin/usergrid/main.py
mgmt/trunk/cumin/python/cumin/widgets.py
mgmt/trunk/cumin/python/cumin/widgets.strings
mgmt/trunk/wooly/python/wooly/parameters.py
mgmt/trunk/wooly/python/wooly/widgets.py
mgmt/trunk/wooly/python/wooly/widgets.strings
Log:
New global page navigation
Modified: mgmt/trunk/cumin/python/cumin/account/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/account/widgets.py 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/cumin/python/cumin/account/widgets.py 2009-09-21 21:44:47 UTC (rev 3637)
@@ -26,88 +26,33 @@
self.set_default_frame(self.account)
def render_title(self, session):
- return "MRG Account"
+ return "Your Account"
class AccountMainView(CuminMainView):
def __init__(self, app, name):
super(AccountMainView, self).__init__(app, name)
- self.main = AccountFrame(app, "main")
- self.add_tab(self.main)
+ self.settings = SettingsFrame(app, "main")
+ self.add_tab(self.settings)
- def render_admin_href(self, session):
- return Session(self.app.main_page).marshal()
-
-class AccountFrame(CuminFrame):
+class SettingsFrame(CuminFrame):
def __init__(self, app, name):
- super(AccountFrame, self).__init__(app, name)
+ super(SettingsFrame, self).__init__(app, name)
- self.view = AccountView(app, "view")
+ self.view = SettingsView(app, "view")
self.add_mode(self.view)
def render_title(self, session):
- return "Account"
+ return "Settings"
-class AccountView(Widget):
- def __init__(self, app, name):
- super(AccountView, self).__init__(app, name)
+class SettingsView(Widget):
+ def init(self):
+ # XXX deferring this, but I don't like it
+ task = main.module.change_password
+ link = TaskLink(self.app, "change_password", task, None)
+ link.html_class = "action"
+ self.add_child(link)
- self.add_child(self.Heading(app, "heading"))
-
- self.__tabs = TabbedModeSet(app, "tabs")
- self.add_child(self.__tabs)
-
- self.__tabs.add_tab(self.AccountTab(app, "acct"))
- #self.__tabs.add_tab(UserGridJobs(app, "jobs", None))
-
- class AccountTab(ActionSet):
- def __init__(self, app, name):
- super(AccountView.AccountTab, self).__init__(app, name)
-
- def init(self):
- # XXX deferring this, but I don't like it
- task = main.module.change_password
- link = TaskLink(self.app, "change_password", task, None)
- self.add_child(link)
-
- super(AccountView.AccountTab, self).init()
-
- def render_title(self, session):
- return "Account Settings"
-
- class Heading(CuminHeading):
- def render_title(self, session):
- return "Account"
-
- def render_icon_href(self, session):
- return "resource?name=pool-36.png"
-
-from cumin.grid.job import JobTab
-
-class UserGridJobs(JobTab):
- def render_title(self, session):
- return "Your Grid Jobs %s" % fmt_count(self.get_item_count(session))
-
- def render_sql_where(self, session):
- if hasattr(session, "user_session"):
- user = session.user_session.subject.name
- else:
- user = ""
- elems = list()
- elems.append("b.name like '%s%s'" % (user, "%"))
- elems.append(self.get_phase_sql(session))
- return "where %s" % " and ".join(elems)
-
- def get_sql_values(self, session):
- pass
-
- def get_visible_columns(self, session):
- return self.get_request_visible_columns(session, ["custom_group", "scheduler"])
-
- def render_user(self, session, *args):
- if hasattr(session, "user_session"):
- return session.user_session.subject.name
-
class LoginPage(HtmlPage):
def __init__(self, app, name):
super(LoginPage, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/account/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/account/widgets.strings 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/cumin/python/cumin/account/widgets.strings 2009-09-21 21:44:47 UTC (rev 3637)
@@ -75,55 +75,3 @@
[LoginForm.login_invalid]
<p class="login_invalid">The user name and password you entered do not
match any account.</p>
-
-[AccountMainView.html]
-<div id="head">
- <div id="user">
- Hi, {user_name}
- <strong>·</strong>
- <a id="account" onclick="wooly.clearUpdates()" href="{admin_href}">MRG Management</a>
- <strong>·</strong>
- <a id="logout" onclick="wooly.clearUpdates()" href="{logout_href}">Log Out</a>
- </div>
-
- <img id="logo" src="resource?name=rhlogo-32.png"/>
-
-</div>
-<div id="body">
-
-<div id="messages" style="display: {action_display};"><p title="close" onclick="cumin.hideActions()">x</p>{actions}</div>
- {heartbeat}
-
-{content}</div>
-
-<div id="foot"/>
-
-[AccountTab.html]
-<ul class="actions">
- <li>{change_password}</li>
-</ul>
-
-[MyGridJobs.html]
-<form id="{id}" method="post" action="?">
-<div class="rfloat">{phase}</div>
-Jobs submitted by {user}
-
- <div class="sactions" style="clear:right;">
- <h2>Act on Selected Jobs:</h2>
- {hold} {release} {remove}
- </div>
-
- <table class="mobjects">
- <thead>
- <tr>
- <th class="setnav" colspan="{column_count}">
- <div class="rfloat">{page}</div>
- {count}
- </th>
- </tr>
- <tr>{headers}</tr>
- </thead>
- <tbody>{items}</tbody>
- </table>
- <div>{hidden_inputs}</div>
-</form>
Modified: mgmt/trunk/cumin/python/cumin/main.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/main.py 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/cumin/python/cumin/main.py 2009-09-21 21:44:47 UTC (rev 3637)
@@ -121,7 +121,7 @@
self.set_default_frame(self.main)
def render_title(self, session):
- return "MRG Management"
+ return "MRG Administration"
class MainView(CuminMainView):
def __init__(self, app, name):
Modified: mgmt/trunk/cumin/python/cumin/usergrid/main.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/usergrid/main.py 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/cumin/python/cumin/usergrid/main.py 2009-09-21 21:44:47 UTC (rev 3637)
@@ -25,7 +25,7 @@
self.set_default_frame(self.main)
def render_title(self, session):
- return "MRG Grid"
+ return "User Grid"
class MainView(CuminMainView):
def __init__(self, app, name):
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-21 21:44:47 UTC (rev 3637)
@@ -35,6 +35,9 @@
self.heartbeat = CuminHeartBeat(app, "heartbeat")
self.add_child(self.heartbeat)
+ self.links = CuminPageLinks(app, "links")
+ self.add_child(self.links)
+
def do_process(self, session, *args):
self.tasks.process(session)
self.heartbeat.process(session)
@@ -63,9 +66,29 @@
return lsess.marshal()
- def render_account_href(self, session):
- return Session(self.app.account_page).marshal()
+class CuminPageLinks(ItemSet):
+ def __init__(self, app, name):
+ super(CuminPageLinks, self).__init__(app, name)
+ self.html_class = CuminPageLinks.__name__
+
+ def do_get_items(self, session):
+ return (self.app.main_page,
+ self.app.user_grid_page,
+ self.app.account_page)
+
+ def render_item_content(self, session, page):
+ href = Session(page).marshal()
+ title = page.render_title(session)
+
+ return fmt_link(href, title)
+
+ def render_item_class(self, session, page):
+ if page is session.page:
+ return "selected"
+ else:
+ return "_"
+
class CuminFrame(Frame, ModeSet):
def __init__(self, app, name):
super(CuminFrame, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-21 21:44:47 UTC (rev 3637)
@@ -1,21 +1,12 @@
[CuminMainView.css]
#head {
padding: 0;
- margin: 0;
- min-height: 2.75em;
background: #f9f9ff url("resource?name=shade.png") repeat-x scroll bottom center;
}
-#logo {
- float: left;
- margin: 0.25em 1em;
-}
-
#tabs {
- padding: 0 0 0 2em;
+ padding: 0;
margin: 0;
- position: relative;
- top: 1.175em;
}
#tabs li {
@@ -31,7 +22,7 @@
-webkit-border-radius: 0.35em 0.35em 0 0;
color: #333;
background-color: #f7f7f7;
- line-height: 1.6em;
+ line-height: 1.625em;
}
#tabs li:first-child a {
@@ -44,12 +35,32 @@
z-index: 2;
}
+#logo {
+ float: left;
+ margin: 0.6em 1em;
+}
+
+#local {
+ padding: 0.15em 0 0 0;
+ margin: 0;
+}
+
+#global {
+ padding: 0.35em 1em;
+ margin: 0;
+ font-size: 0.9em;
+}
+
#user {
- padding: 0.25em 0.5em;
- float: right;
+ padding: 0.35em 1em;
+ margin: 0;
font-size: 0.9em;
}
+#user {
+ float: right;
+}
+
#actions {
padding: 0.25em 0.5em;
float: right;
@@ -122,12 +133,76 @@
};
cumin.expireIntervalUpdate();
+[CuminMainView.html]
+<div id="head">
+ <img id="logo" src="resource?name=mrg-logo-32.png"/>
+
+ <div id="user">
+ Hi, {user_name}
+ <span class="separator">|</span>
+ <a id="logout" onclick="wooly.clearUpdates()" href="{logout_href}">Log out</a>
+ </div>
+
+ <div id="global">
+ {links}
+ </div>
+
+ <div id="local">
+ <ul id="tabs">{tabs}</ul>
+ </div>
+</div>
+
+<div id="body">
+ {tasks}
+
+ <div id="messages" style="display: {action_display};"><p title="close" onclick="cumin.hideActions()">x</p>{actions}</div>
+
+ {heartbeat}
+
+ {content}
+</div>
+
+<div id="foot"/>
+
+[CuminPageLinks.css]
+ul.CuminPageLinks {
+ padding: 0;
+ margin: 0;
+}
+
+ul.CuminPageLinks li {
+ display: inline;
+}
+
+ul.CuminPageLinks li {
+ display: inline;
+}
+
+ul.CuminPageLinks li:after {
+ content: " | ";
+}
+
+ul.CuminPageLinks li:after,
+span.separator {
+ color: #ccc;
+}
+
+ul.CuminPageLinks li:last-child:after {
+ content: ""
+}
+
+ul.CuminPageLinks li.selected,
+ul.CuminPageLinks li.selected a {
+ color: black;
+}
+
[CuminHeartBeat.css]
#updateStatus {
float:right;
padding: 0.25em;
font-size: 0.8em;
}
+
#updateStatus button {
display: none;
margin-left:0.5em;
@@ -143,33 +218,6 @@
<button id="shock">Resume Updates</button>
</div>
-[CuminMainView.html]
-<div id="head">
- <div id="user">
- Hi, {user_name}
- <strong>·</strong>
- <a id="account" onclick="wooly.clearUpdates()" href="{account_href}">Your Account</a>
- <strong>·</strong>
- <a id="logout" onclick="wooly.clearUpdates()" href="{logout_href}">Log Out</a>
- </div>
-
- <img id="logo" src="resource?name=mrg-logo-32.png"/>
-
- <ul id="tabs">{tabs}</ul>
-</div>
-
-<div id="body">
- {tasks}
-
- <div id="messages" style="display: {action_display};"><p title="close" onclick="cumin.hideActions()">x</p>{actions}</div>
-
- {heartbeat}
-
- {content}
-</div>
-
-<div id="foot"/>
-
[CuminView.css]
ul.context {
list-style: none;
Modified: mgmt/trunk/wooly/python/wooly/parameters.py
===================================================================
--- mgmt/trunk/wooly/python/wooly/parameters.py 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/wooly/python/wooly/parameters.py 2009-09-21 21:44:47 UTC (rev 3637)
@@ -81,8 +81,8 @@
return string
class BooleanParameter(Parameter):
- def __init__(self, model, name):
- Parameter.__init__(self, model, name)
+ def __init__(self, app, name):
+ Parameter.__init__(self, app, name)
self.default = False
@@ -103,3 +103,13 @@
session.set(key, None)
else:
session.unset(key)
+
+class PageParameter(Parameter):
+ def __init__(self, app, name):
+ super(PageParameter, self).__init__(app, name)
+
+ def do_unmarshal(self, string):
+ return self.app.pages_by_name.get(string)
+
+ def do_marshal(self, page):
+ return page.name
Modified: mgmt/trunk/wooly/python/wooly/widgets.py
===================================================================
--- mgmt/trunk/wooly/python/wooly/widgets.py 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/wooly/python/wooly/widgets.py 2009-09-21 21:44:47 UTC (rev 3637)
@@ -208,6 +208,23 @@
return None
+class SelectionItemSet(ItemSet):
+ def __init__(self, app, name, selection):
+ super(SelectionItemSet, self).__init__(app, name)
+
+ self.selection = selection
+
+ def init(self):
+ super(SelectionItemSet, self).init()
+
+ assert isinstance(self.selection, Parameter)
+
+ def render_item_class(self, session, item):
+ if self.selection.get(session) is item:
+ return "selected"
+ else:
+ return "_"
+
class RenderingItemSet(Widget):
def __init__(self, app, name, item_renderer):
super(RenderingItemSet, self).__init__(app, name)
Modified: mgmt/trunk/wooly/python/wooly/widgets.strings
===================================================================
--- mgmt/trunk/wooly/python/wooly/widgets.strings 2009-09-15 21:39:08 UTC (rev 3636)
+++ mgmt/trunk/wooly/python/wooly/widgets.strings 2009-09-21 21:44:47 UTC (rev 3637)
@@ -77,11 +77,16 @@
[Toggle.html]
<a href="{href}" class="Toggle {state}">{content}</a>
+[ItemSet.css]
+ul.ItemSet li.selected {
+ color: black;
+}
+
[ItemSet.html]
<ul id="{id}" class="{class}">{items}</ul>
[ItemSet.item_html]
-<li>{item_content}</li>
+<li class="{item_class}">{item_content}</li>
[ItemTree.html]
<ul class="ItemTree">{items}</ul>
16 years, 7 months
rhmessaging commits: r3636 - in mgmt/trunk: cumin/python/cumin/grid and 3 other directories.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-15 17:39:08 -0400 (Tue, 15 Sep 2009)
New Revision: 3636
Modified:
mgmt/trunk/cumin/python/cumin/grid/job.py
mgmt/trunk/cumin/python/cumin/grid/limit.py
mgmt/trunk/cumin/python/cumin/grid/negotiator.py
mgmt/trunk/cumin/python/cumin/grid/scheduler.py
mgmt/trunk/cumin/python/cumin/grid/submission.py
mgmt/trunk/cumin/python/cumin/inventory/system.py
mgmt/trunk/cumin/python/cumin/messaging/binding.py
mgmt/trunk/cumin/python/cumin/messaging/broker.py
mgmt/trunk/cumin/python/cumin/messaging/connection.py
mgmt/trunk/cumin/python/cumin/messaging/exchange.py
mgmt/trunk/cumin/python/cumin/messaging/queue.py
mgmt/trunk/cumin/python/cumin/widgets.py
mgmt/trunk/cumin/python/cumin/widgets.strings
mgmt/trunk/wooly/python/wooly/__init__.py
mgmt/trunk/wooly/python/wooly/tables.py
mgmt/trunk/wooly/python/wooly/tables.strings
Log:
* Make columns truncate according to width; incorporate this into
standard tables directly
* Clean up table class hierarchy
* Set widths on various table columns
Modified: mgmt/trunk/cumin/python/cumin/grid/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/job.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/grid/job.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -38,7 +38,7 @@
self.add_column(col)
col = self.ArgsColumn(app, "Args")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
self.phase = JobStatusSwitch(app, "phase")
@@ -86,11 +86,11 @@
state = self.phase.get(session)
return self.phase.get_title(state)
- class ArgsColumn(QmfTableColumn):
+ class ArgsColumn(ItemTableColumn):
def render_title(self, session, data):
return "Arguments"
- class CustomIdColumn(QmfTableColumn):
+ class CustomIdColumn(ItemTableColumn):
def render_title(self, session, data):
return "ID"
@@ -104,7 +104,7 @@
job_id, hash, num = id.rpartition('#')
return fmt_link(href, job_id, link_title=id)
- class StatusColumn(QmfTableColumn):
+ class StatusColumn(ItemTableColumn):
def render_title(self, session, data):
return "Status"
@@ -112,7 +112,7 @@
stat = data[self.name]
return JobStatusInfo.get_status_string(int(stat))
- class CommandColumn(QmfTableColumn):
+ class CommandColumn(ItemTableColumn):
def render_title(self, session, data):
return "Command"
@@ -132,15 +132,17 @@
super(TopJobSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
+ col.width = "70%"
self.add_column(col)
self.set_default_column(col)
col = self.DurationColumn(app, "name")
- col.alignment = "right"
+ col.width = "20%"
+ col.align = "right"
self.add_column(col)
- class NameColumn(TopClientTruncateColumn):
+ class NameColumn(TopTableColumn):
def render_title(self, session, data):
return "Name"
@@ -897,7 +899,7 @@
self.add_column(col)
col = self.JobsCountColumn(app, "jobs")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
class GroupColumn(SqlTableColumn):
Modified: mgmt/trunk/cumin/python/cumin/grid/limit.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/limit.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/grid/limit.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -30,11 +30,11 @@
self.set_default_column(col)
col = self.CurrentColumn(app, "curr")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.MaxColumn(app, "max")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
self.limit_count = self.LimitCount(app, "limit_count")
Modified: mgmt/trunk/cumin/python/cumin/grid/negotiator.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/negotiator.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/grid/negotiator.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -101,7 +101,7 @@
self.title = None
self.getter = getter
- self.alignment = "right"
+ self.align = "right"
self.user = False
self.negotiator = negotiator
self.task = task
Modified: mgmt/trunk/cumin/python/cumin/grid/scheduler.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/scheduler.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/grid/scheduler.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -34,15 +34,15 @@
self.add_column(col)
col = self.UsersColumn(app, "users")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.RunningJobsColumn(app, "running")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.HeldJobsColumn(app, "held")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
task = main.module.scheduler_set_start
Modified: mgmt/trunk/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/submission.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/grid/submission.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -14,12 +14,14 @@
super(SubmissionSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
+ col.width = "40%"
self.add_column(col)
self.scheduler_col = self.SchedulerColumn(app, "scheduler")
self.add_column(self.scheduler_col)
self.submitter_col = self.SubmitterColumn(app, "submitter")
+ self.width = "15%"
self.add_column(self.submitter_col)
col = self.IdleColumn(app, "idle")
@@ -47,7 +49,7 @@
def render_title(self, session):
return "Submissions %s" % fmt_count(self.get_item_count(session))
- class NameColumn(ClientTruncateColumn):
+ class NameColumn(TopTableColumn):
def render_title(self, session, data):
return "Name"
@@ -64,7 +66,7 @@
(session, data["scheduler_id"])
return fmt_link(href, data["scheduler_name"])
- class SubmitterColumn(ClientTruncateColumn):
+ class SubmitterColumn(SqlTableColumn):
def render_title(self, session, data):
return "Submitter"
Modified: mgmt/trunk/cumin/python/cumin/inventory/system.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/inventory/system.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/inventory/system.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -30,11 +30,11 @@
self.add_column(col)
col = self.FreeMemoryColumn(app, "mem_free")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.LoadColumn(app, "load")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
def render_title(self, session, *args):
@@ -86,15 +86,17 @@
super(TopSystemSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
+ col.width = "70%"
self.add_column(col)
self.set_default_column(col)
col = self.LoadColumn(app, "load")
- col.alignment = "right"
+ col.width = "20%"
+ col.align = "right"
self.add_column(col)
- class NameColumn(TopClientTruncateColumn):
+ class NameColumn(TopTableColumn):
def render_title(self, session, data):
return "Name"
Modified: mgmt/trunk/cumin/python/cumin/messaging/binding.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/binding.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/messaging/binding.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -30,11 +30,11 @@
self.add_column(col)
col = self.RateColumn(app, "rate")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.MatchedColumn(app, "matched")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
self.phase = PhaseSwitch(app, "phase")
Modified: mgmt/trunk/cumin/python/cumin/messaging/broker.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/broker.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/messaging/broker.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -26,6 +26,7 @@
self.add_parameter(self.group)
col = self.NameColumn(app, "name")
+ col.width = "40%"
self.add_column(col)
self.set_default_column(col)
Modified: mgmt/trunk/cumin/python/cumin/messaging/connection.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/connection.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/messaging/connection.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -33,11 +33,11 @@
self.add_column(col)
col = self.SentColumn(app, "sent")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.ReceivedColumn(app, "received")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
self.unit = StateSwitch(app, "unit")
Modified: mgmt/trunk/cumin/python/cumin/messaging/exchange.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/exchange.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/messaging/exchange.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -50,23 +50,23 @@
self.set_default_column(col)
col = self.ProducersColumn(app, "name")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.BindingsColumn(app, "bindings")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.ReceivedColumn(app, "received")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.RoutedColumn(app, "routed")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.DroppedColumn(app, "dropped")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
self.unit = UnitSwitch(app, "unit")
Modified: mgmt/trunk/cumin/python/cumin/messaging/queue.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/queue.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/messaging/queue.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -30,27 +30,28 @@
self.vhost = vhost
col = self.NameColumn(app, "name")
+ col.width = "30%"
self.add_column(col)
self.set_default_column(col)
col = self.ConsumersColumn(app, "consumers")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.BindingsColumn(app, "bindings")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.EnqueuedColumn(app, "enqueued")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.DequeuedColumn(app, "dequeued")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
col = self.DepthColumn(app, "depth")
- col.alignment = "right"
+ col.align = "right"
self.add_column(col)
self.unit = UnitSwitch(app, "unit")
@@ -87,7 +88,7 @@
vhost = self.vhost.get(session)
return {"id": vhost.id}
- class NameColumn(ClientTruncateColumn):
+ class NameColumn(SqlTableColumn):
def render_title(self, session, data):
return "Name"
@@ -158,15 +159,17 @@
super(TopQueueSet, self).__init__(app, name)
col = self.NameColumn(app, "name")
+ col.width = "70%"
self.add_column(col)
self.set_default_column(col)
col = self.EnqueuesColumn(app, "enqueues")
- col.alignment = "right"
+ col.width = "20%"
+ col.align = "right"
self.add_column(col)
- class NameColumn(TopClientTruncateColumn):
+ class NameColumn(TopTableColumn):
def render_title(self, session, data):
return "Name"
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -649,69 +649,24 @@
return fmt_link("", title, class_, link_title=hover, bm=bm, click=click)
-class ClientTruncateColumn(SqlTableColumn):
- def __init__(self, app, name):
- super(ClientTruncateColumn, self).__init__(app, name)
-
- self.col_percent = 33
-
- def get_class_list(self, session):
- cls = super(ClientTruncateColumn, self).get_class_list(session)
- cls.append("truncate")
- return cls
-
- def get_class_attr(self, session):
- cls = super(ClientTruncateColumn, self).get_class_attr(session)
- return "width=\"%i%%\" %s" % (self.col_percent, cls)
-
-class QmfTableColumn(ItemTableColumn):
- def render_content(self, session, data):
- key = self.get_column_key(session)
- return self.render_value(session, data[key])
-
- def render_value(self, session, value):
- return str(value)
-
class TopTableColumn(SqlTableColumn):
def __init__(self, app, name):
super(TopTableColumn, self).__init__(app, name)
self.header_class = TopTableColumnHeader
-class TopTableCountColumn(TopTableColumn):
- def get_class_list(self, session):
- cls = super(TopTableCountColumn, self).get_class_list(session)
- cls.append("top_count")
- return cls
-
class TopTableColumnHeader(ItemTableColumnHeader):
pass
-class TopClientTruncateColumn(ClientTruncateColumn):
+class TopTable(SqlTable):
def __init__(self, app, name):
- super(TopClientTruncateColumn, self).__init__(app, name)
-
- self.header_class = TopTableColumnHeader
- self.col_percent = 60
-
-class TruncatableItemTable(ItemTable):
- def render_extra_class(self, session, *args):
- """ if any columns are truncate, table needs a fixed layout """
- return True in [True for x in self.columns
- if isinstance(x, ClientTruncateColumn)] and " truncate" or ""
-
-class TruncatableTable(SqlTable):
- def render_extra_class(self, session, *args):
- """ if any columns are truncate, table needs a fixed layout """
- return True in [True for x in self.columns
- if isinstance(x, ClientTruncateColumn)] and " truncate" or ""
-
-class TopTable(TruncatableTable):
- def __init__(self, app, name):
super(TopTable, self).__init__(app, name)
+ self.html_class = TopTable.__name__
+
col = self.CountColumn(app, "name")
- col.alignment = "right"
+ col.width = "1em"
+ col.align = "right"
self.add_column(col)
self.update_enabled = True
@@ -723,13 +678,13 @@
def get_connection(self, session):
return self.app.model.get_sql_connection()
- class CountColumn(TopTableCountColumn):
+ class CountColumn(TopTableColumn):
def render_content(self, session, data):
count = self.parent.count.get(session)
self.parent.count.set(session, count + 1)
return count
-class CuminItemTable(TruncatableItemTable):
+class CuminItemTable(ItemTable):
def __init__(self, app, name):
super(CuminItemTable, self).__init__(app, name)
@@ -747,12 +702,14 @@
def get_connection(self, session):
return self.app.model.get_sql_connection()
-class CuminTable(TruncatableTable):
+class CuminTable(SqlTable):
def __init__(self, app, name):
super(CuminTable, self).__init__(app, name)
- self.update_enabled = True
+ self.html_class = CuminTable.__name__
+ # XXX self.update_enabled = True
+
self.paginator = Paginator(app, "page")
self.add_child(self.paginator)
@@ -946,6 +903,7 @@
super(CheckboxInputColumn, self).__init__(app, name, None)
self.header_class = CheckboxIdColumnHeader
+ self.width = "2em"
self.param = ListParameter(app, "param", item_param)
self.add_parameter(self.param)
@@ -965,6 +923,7 @@
super(CheckboxColumn, self).__init__(app, name, param)
self.header_class = CheckboxColumnHeader
+ self.width = "2em"
def do_render(self, session, data, disabled=False):
name = self.param.path
Modified: mgmt/trunk/cumin/python/cumin/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-15 21:39:08 UTC (rev 3636)
@@ -416,7 +416,7 @@
width: 100%;
border-collapse: collapse;
margin: 0;
- min-width: 100% !important;
+ table-layout: fixed;
}
table.TopTable tr {
@@ -426,6 +426,8 @@
table.TopTable td {
padding: 0.35em 0.5em;
+ white-space: nowrap;
+ overflow: hidden;
text-overflow: ellipsis;
}
@@ -436,28 +438,30 @@
font-style: italic;
color: #444;
font-size: 0.9em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
-table.TopTable th.ralign {
- text-align: right;
-}
-
-table.TopTable th.top_count {
- width: 1em;
-}
-
[TopTable.html]
-<table id="{id}" class="TopTable {extra_class}">
+<table id="{id}" class="{class}">
+ {columns}
<thead><tr>{headers}</tr></thead>
<tbody>{items}</tbody>
</table>
[TopTableColumnHeader.html]
-<th {class_attr}>{content}</th>
+<th {attrs}>{content}</th>
[CuminTable.css]
+div.CuminTable table,
+table.CuminTable {
+ table-layout: fixed;
+}
+
div.CuminTable th.setnav {
font-size: 0.9em;
+ padding: 0.35em 0.75em;
}
div.CuminTable ul.switches,
@@ -482,30 +486,29 @@
clear: both;
}
-div.CuminTable > table td {
+div.CuminTable table td,
+table.CuminTable td,
+div.CuminTable table th,
+table.CuminTable th {
+ white-space: nowrap;
+ overflow: hidden;
text-overflow: ellipsis;
}
-div.truncate > table,
-table.truncate {
- table-layout: fixed;
- min-width: 600px;
+div.CuminTable table th,
+table.CuminTable th {
+ font-size: 0.9em;
}
-div.truncate > table td.truncate,
-table.truncate td.truncate {
- white-space: nowrap;
- overflow: hidden;
-}
-
[CuminTable.javascript]
wooly.addPageUpdateListener(cumin.restoreTableCheckboxes);
[CuminTable.html]
-<div id="{id}" class="CuminTable {extra_class}">
+<div id="{id}" class="{class}">
{links}
<table class="mobjects">
+ {columns}
<thead>
<tr>
<th class="setnav" colspan="{column_count}">
@@ -520,7 +523,7 @@
</div>
[CuminTableWithControls.html]
-<div id="{id}" class="CuminTable {extra_class}">
+<div id="{id}" class="{class}">
{links}
{filters}
@@ -528,6 +531,7 @@
{switches}
<table class="mobjects">
+ {columns}
<thead>
<tr>
<th class="setnav" colspan="{column_count}">
@@ -545,7 +549,7 @@
</div>
[CuminSelectionTable.html]
-<div id="{id}" class="CuminTable {extra_class}">
+<div id="{id}" class="{class}">
{links}
{filters}
@@ -559,6 +563,7 @@
</div>
<table class="mobjects">
+ {columns}
<thead>
<tr>
<th class="setnav" colspan="{column_count}">
@@ -591,9 +596,6 @@
[TableHeader.item_html]
<th class="{item_class}"><a href="{item_href}">{item_content}</a></th>
-[CheckboxColumn.html]
-<td><input type="checkbox" name="{name}"
-
[CheckboxColumnHeader.css]
th.chk_box {
width: 2em;
@@ -792,6 +794,7 @@
<div class="sactions">Act on Selected {plural_title}: {actions}</div>
<table class="mobjects">
+ {columns}
<thead>
<tr>
<th class="setnav" colspan="{column_count}">
Modified: mgmt/trunk/wooly/python/wooly/__init__.py
===================================================================
--- mgmt/trunk/wooly/python/wooly/__init__.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/wooly/python/wooly/__init__.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -137,7 +137,7 @@
self.sealed = False
# Configuration
- self.html_class = "_"
+ self.html_class = None
self.update_enabled = False
self.defer_enabled = False
@@ -333,7 +333,7 @@
return self.path
def render_class(self, session, *args):
- return self.html_class
+ return self.html_class or "_"
def render_href(self, session, *args):
return session.marshal()
Modified: mgmt/trunk/wooly/python/wooly/tables.py
===================================================================
--- mgmt/trunk/wooly/python/wooly/tables.py 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/wooly/python/wooly/tables.py 2009-09-15 21:39:08 UTC (rev 3636)
@@ -8,6 +8,8 @@
def __init__(self, app, name):
super(ItemTable, self).__init__(app, name)
+ self.html_class = ItemTable.__name__
+
self.columns = list()
self.headers_by_column = dict()
@@ -30,8 +32,7 @@
def render_headers(self, session, *args):
writer = Writer()
- vlist = self.get_visible_columns(session)
- for column in vlist:
+ for column in self.get_visible_columns(session):
header = self.headers_by_column[column]
writer.write(header.render(session))
@@ -44,8 +45,7 @@
def render_cells(self, session, item):
writer = Writer()
- vlist = self.get_visible_columns(session)
- for col in vlist:
+ for col in self.get_visible_columns(session):
col.set_item(session, item)
writer.write(col.render(session))
@@ -62,6 +62,17 @@
if self.scolumn.default is None:
self.scolumn.default = column.name
+ def render_columns(self, session, *args):
+ writer = Writer()
+
+ for column in self.get_visible_columns(session):
+ if column.width:
+ writer.write("<col style=\"width: %s\"/>" % column.width)
+ else:
+ writer.write("<col/>")
+
+ return writer.to_string()
+
def set_header(self, column, header):
self.headers_by_column[column] = header
@@ -94,17 +105,17 @@
return None
- def render_class(self, session, *args):
- return None
-
class ItemTableColumn(Widget):
def __init__(self, app, name):
super(ItemTableColumn, self).__init__(app, name)
self.header_class = ItemTableColumnHeader
- self.alignment = None
+
self.visible = True
+ self.align = None
+ self.width = None
+
self.__item = Attribute(app, "item")
self.add_attribute(self.__item)
@@ -117,21 +128,31 @@
def get_column_key(self, session):
return self.name
- def get_class_list(self, session):
- """ allow derived classes to add their own classes """
- cls = list()
- if self.alignment == "right":
- cls.append("ralign");
- return cls
-
- def get_class_attr(self, session):
- cls = self.get_class_list(session)
- return cls and "class=\"%s\"" % " ".join(cls) or ""
-
def do_render(self, session, data):
+ attrs = self.render_attrs(session)
content = self.render_content(session, data)
- return "<td %s>%s</td>" % (self.get_class_attr(session) or "", content)
+ return "<td %s>%s</td>" % (attrs, content)
+
+ def render_attrs(self, session):
+ attrs = list()
+
+ classes = self.render_class(session)
+
+ if classes:
+ attrs.append("class=\"%s\"" % classes)
+
+ styles = self.render_style(session)
+
+ if styles:
+ attrs.append("style=\"%s\"" % styles)
+
+ return " ".join(attrs)
+
+ def render_style(self, session):
+ if self.align:
+ return "text-align: %s" % self.align
+
def render_content(self, session, data):
key = self.get_column_key(session)
return self.render_value(session, data[key])
@@ -149,6 +170,9 @@
self.column = column
+ def render_attrs(self, session, *args):
+ return self.column.render_attrs(session)
+
def render_href(self, session, *args):
branch = session.branch()
@@ -166,9 +190,6 @@
cargs = self.column.get_args(session)
return self.column.render_title(session, *cargs)
- def render_class_attr(self, session, *args):
- return self.column.get_class_attr(session)
-
def render_sorted_dir(self, session, *args):
sel = self.parent.get_selected_column(session)
Modified: mgmt/trunk/wooly/python/wooly/tables.strings
===================================================================
--- mgmt/trunk/wooly/python/wooly/tables.strings 2009-09-15 17:40:48 UTC (rev 3635)
+++ mgmt/trunk/wooly/python/wooly/tables.strings 2009-09-15 21:39:08 UTC (rev 3636)
@@ -1,5 +1,17 @@
+[ItemTable.css]
+table.ItemTable {
+ table-layout: fixed;
+}
+
+table.ItemTable td
+table.ItemTable th {
+ white-space: nowrap;
+ overflow: hidden;
+}
+
[ItemTable.html]
-<table {class}>
+<table class="{class}">
+ {columns}
<thead><tr>{headers}</tr></thead>
<tbody>{items}</tbody>
</table>
@@ -41,7 +53,7 @@
}
[ItemTableColumnHeader.html]
-<th {class_attr}><a class="ItemTableColumnHeader" href="{href}"><span><span class="{sorted_dir}">{content}</span></span></a></th>
+<th {attrs}><a class="ItemTableColumnHeader" href="{href}"><span><span class="{sorted_dir}">{content}</span></span></a></th>
[SqlTable.find_sql]
-select * from %s
\ No newline at end of file
+select * from %s
16 years, 7 months
rhmessaging commits: r3635 - in mgmt/trunk/cumin/python/cumin: inventory and 1 other directory.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-15 13:40:48 -0400 (Tue, 15 Sep 2009)
New Revision: 3635
Modified:
mgmt/trunk/cumin/python/cumin/grid/pool.py
mgmt/trunk/cumin/python/cumin/inventory/system.py
Log:
Remove some unnecessary setters
Modified: mgmt/trunk/cumin/python/cumin/grid/pool.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/pool.py 2009-09-15 15:57:38 UTC (rev 3634)
+++ mgmt/trunk/cumin/python/cumin/grid/pool.py 2009-09-15 17:40:48 UTC (rev 3635)
@@ -103,11 +103,6 @@
self.negotiator = NegotiatorFrame(app, "neg")
self.add_mode(self.negotiator)
- # XXX this shouldn't be necessary
- def show_job_frame(self, session):
- self.page.set_frame(session, self.job)
- return self.job.show(session)
-
class PoolView(CuminView):
def __init__(self, app, name, pool):
super(PoolView, self).__init__(app, name, pool)
@@ -129,32 +124,23 @@
self.slots = PoolSlotSet(app, "slots", self.pool)
self.tabs.add_tab(self.slots)
- self.scheds = PoolSchedulerSet(app, "scheds", self.pool)
- self.tabs.add_tab(self.scheds)
+ self.schedulers = PoolSchedulerSet(app, "schedulers", self.pool)
+ self.tabs.add_tab(self.schedulers)
- self.negs = PoolNegotiatorSet(app, "negs", self.pool)
- self.tabs.add_tab(self.negs)
+ self.negotiators = PoolNegotiatorSet(app, "negotiators", self.pool)
+ self.tabs.add_tab(self.negotiators)
- self.colls = PoolCollectorSet(app, "colls", self.pool)
- self.tabs.add_tab(self.colls)
+ self.collectors = PoolCollectorSet(app, "collectors", self.pool)
+ self.tabs.add_tab(self.collectors)
self.limits = LimitSet(app, "limits", negotiator)
self.tabs.add_tab(self.limits)
def do_process(self, session):
self.limits.limit_count.process(session)
+
super(PoolView, self).do_process(session)
- # XXX get rid of these
- def set_collector_tab(self, session):
- self.colls.show(session)
-
- def set_negotiator_tab(self, session):
- self.negs.show(session)
-
- def set_scheduler_tab(self, session):
- self.scheds.show(session)
-
class PoolSubmissionSet(SubmissionSet):
def __init__(self, app, name, pool):
super(PoolSubmissionSet, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/inventory/system.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/inventory/system.py 2009-09-15 15:57:38 UTC (rev 3634)
+++ mgmt/trunk/cumin/python/cumin/inventory/system.py 2009-09-15 17:40:48 UTC (rev 3635)
@@ -245,15 +245,15 @@
#self.page.main.show_grid_tab(session)
daemon = Identifiable(item.id)
if isinstance(item, Collector):
- self.page.main.grid.pool.view.set_collector_tab(session)
+ self.page.main.grid.pool.view.collectors.show(session)
href = self.page.main.grid.pool.collector.get_href \
(session, daemon)
elif isinstance(item, Scheduler):
- self.page.main.grid.pool.view.set_scheduler_tab(session)
+ self.page.main.grid.pool.view.schedulers.show(session)
href = self.page.main.grid.pool.scheduler.get_href \
(session, daemon)
elif isinstance(item, Negotiator):
- self.page.main.grid.pool.view.set_negotiator_tab(session)
+ self.page.main.grid.pool.view.negotiators.show(session)
href = self.page.main.grid.pool.negotiator.get_href \
(session, daemon)
return fmt_link(href, item.Name)
16 years, 7 months
rhmessaging commits: r3634 - mgmt/trunk/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2009-09-15 11:57:38 -0400 (Tue, 15 Sep 2009)
New Revision: 3634
Modified:
mgmt/trunk/cumin/python/cumin/widgets.py
mgmt/trunk/cumin/python/cumin/widgets.strings
Log:
Fix some truncation css, and some cleanup
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-15 15:34:12 UTC (rev 3633)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-09-15 15:57:38 UTC (rev 3634)
@@ -714,7 +714,7 @@
col.alignment = "right"
self.add_column(col)
- self.update_enabled = True;
+ self.update_enabled = True
self.count = Attribute(app, "count")
self.count.default = 1
Modified: mgmt/trunk/cumin/python/cumin/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-15 15:34:12 UTC (rev 3633)
+++ mgmt/trunk/cumin/python/cumin/widgets.strings 2009-09-15 15:57:38 UTC (rev 3634)
@@ -426,7 +426,7 @@
table.TopTable td {
padding: 0.35em 0.5em;
- text-overflow:ellipsis;
+ text-overflow: ellipsis;
}
table.TopTable th {
@@ -483,17 +483,19 @@
}
div.CuminTable > table td {
- text-overflow:ellipsis;
+ text-overflow: ellipsis;
}
-div.truncate > table {
- table-layout: fixed;
- min-width: 600px;
+div.truncate > table,
+table.truncate {
+ table-layout: fixed;
+ min-width: 600px;
}
-div.truncate > table td.truncate {
- white-space: nowrap;
- overflow: hidden;
+div.truncate > table td.truncate,
+table.truncate td.truncate {
+ white-space: nowrap;
+ overflow: hidden;
}
[CuminTable.javascript]
16 years, 7 months