Author: tmckay
Date: 2013-02-08 03:22:44 +0000 (Fri, 08 Feb 2013)
New Revision: 5679
Modified:
branches/tmckay/mint/python/mint/aviary/collector.py
branches/tmckay/mint/python/mint/aviary/endpoints.py
branches/tmckay/mint/python/mint/aviary/session.py
branches/tmckay/mint/python/mint/main.py
branches/tmckay/mint/python/mint/update.py
branches/tmckay/rosemary/python/rosemary/sqltype.py
branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl
branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd
Log:
Added slots, tweaks to others. Submitters needs a schedd reference.
Modified: branches/tmckay/mint/python/mint/aviary/collector.py
===================================================================
--- branches/tmckay/mint/python/mint/aviary/collector.py 2013-02-07 19:52:33 UTC (rev
5678)
+++ branches/tmckay/mint/python/mint/aviary/collector.py 2013-02-08 03:22:44 UTC (rev
5679)
@@ -21,6 +21,8 @@
def set_from_ad(self, attrs):
for attr in attrs:
+ if attr.value == "UNDEFINED":
+ continue
setattr(self, attr.name, attr.value)
def set_from_summary(self, id, summaries):
@@ -193,6 +195,8 @@
def set_from_ad(self, attrs):
for attr in attrs:
+ if attr.value == "UNDEFINED":
+ continue
# Strip the extra verbiage from the negotiator cycle attrs
if attr.name.startswith(self.pref) and attr.name.endswith(self.suff):
@@ -294,8 +298,6 @@
if hasattr(self, "Machine"):
setattr(self, "System", self.Machine)
- self.UpdateInterval = 0
-
# Special stuff that maybe we can remap
def remap(name, target):
if not hasattr(self, name) and hasattr(self, target):
@@ -357,14 +359,192 @@
def __init__(self, ep):
super(QueryScheduler, self).__init__(ep)
- # For now let's get them all
- self.names = []
+ # start with all the attributes based on condor-7.6
+ self.names = ["CondorPlatform",
+ "CondorVersion",
+ "MonitorSelfAge",
+ "MonitorSelfCPUUsage",
+ "MonitorSelfImageSize",
+ "MonitorSelfRegisteredSocketCount",
+ "MonitorSelfResidentSetSize",
+ "MonitorSelfTime",
+ "DaemonStartTime",
+ "JobQueueBirthdate",
+ "MaxJobsRunning",
+ "Machine",
+ "MyAddress",
+ "NumUsers",
+ "Name",
+ "TotalHeldJobs",
+ "TotalIdleJobs",
+ "TotalJobAds",
+ "TotalRemovedJobs",
+ "TotalRunningJobs",
+ "WindowedStatWidth",
+ "UpdateInterval",
+ "JobsSubmitted",
+ "JobSubmissionRate",
+ "JobsCompleted",
+ "JobCompletionRate",
+ "JobsExited",
+ "ShadowExceptions",
+ "JobsSubmittedCum",
+ "JobsCompletedCum",
+ "JobsExitedCum",
+ "ShadowExceptionsCum",
+ "JobsStartedCum",
+ "JobsStarted",
+ "JobStartRate",
+ "MeanTimeToStartCum",
+ "MeanRunningTimeCum",
+ "SumTimeToStartCum",
+ "SumRunningTimeCum",
+ "MeanTimeToStart",
+ "MeanRunningTime",
+
+ # Get the remap targets, too. These are new
+ # names in 7.8. If the 7.6 names aren't there,
+ # we will remap to these
+ "RecentStatsLifetime",
+ "RecentJobsExitException",
+ "JobsSubmitted",
+ "JobsCompleted",
+ "JobsExited",
+ "JobsExitException",
+ "JobsStarted",
+ "JobsAccumRunningTime",
+ "JobsAccumTimeToStart",
+ "RecentJobsSubmitted",
+ "RecentStatsLifetime",
+ "RecentJobsCompleted",
+ "RecentStatsLifetime",
+ "RecentJobsStarted",
+ "RecentStatsLifetime",
+ "JobsAccumTimeToStart",
+ "JobsStarted",
+ "JobsAccumRunningTime",
+ "JobsCompleted",
+ "RecentJobsAccumTimeToStart",
+ "RecentJobsStarted",
+ "RecentJobsAccumRunningTime",
+ "RecentJobsCompleted"]
+
def make_collector_obj(self, id):
return SchedulerObj(self.ep.id, id)
def get_objects(self, no_summary):
return self.ep.app.aviary_ops.get_scheduler(self.ep.url, no_summary=no_summary)
+class SlotObj(BaseCollectorObj):
+ def __init__(self, endpoint_id, res_id):
+ super(SlotObj, self).__init__(endpoint_id, res_id, "Slot")
+ def set_from_ad(self, attrs):
+ super(SlotObj, self).set_from_ad(attrs)
+ # Have to adapt because the cumin db
+ # refers to Machine as System
+ if hasattr(self, "Machine"):
+ setattr(self, "System", self.Machine)
+
+class QuerySlot(BaseCollectorQuery):
+ def __init__(self, ep):
+ super(QuerySlot, self).__init__(ep)
+
+ self.names = ["CondorPlatform",
+ "CondorVersion",
+ "DaemonStartTime",
+ "MonitorSelfAge",
+ "MonitorSelfCPUUsage",
+ "MonitorSelfImageSize",
+ "MonitorSelfRegisteredSocketCount",
+ "MonitorSelfResidentSetSize",
+ "MonitorSelfTime",
+ "AccountingGroup",
+ "Activity",
+ "Arch",
+ "CheckpointPlatform",
+ "ClientMachine",
+ "ClockDay",
+ "ClockMin",
+ "ConcurrencyLimits",
+ "CondorLoadAvg",
+ "ConsoleIdle",
+ "Cpus",
+ "CurrentRank",
+ "Disk",
+ "EnteredCurrentActivity",
+ "EnteredCurrentState",
+ "FileSystemDomain",
+ "GlobalJobId",
+ "ImageSize",
+ "IsValidCheckpointPlatform",
+ "JobId",
+ "JobStart",
+ "KeyboardIdle",
+ "KFlops",
+ "LastBenchmark",
+ "LastFetchWorkCompleted",
+ "LastFetchWorkSpawned",
+ "LastPeriodicCheckpoint",
+ "LoadAvg",
+ "Machine",
+ "MaxJobRetirementTime",
+ "Memory",
+ "Mips",
+ "MyAddress",
+ "MyCurrentTime",
+ "Name",
+ "NextFetchWorkDelay",
+ "OpSys",
+ "PreemptingConcurrencyLimits",
+ "PreemptingOwner",
+ "PreemptingUser",
+ "PreemptingRank",
+ "RemoteOwner",
+ "RemoteUser",
+ "Requirements",
+ "Rank",
+ "SlotID",
+ "Start",
+ "StarterAbilityList",
+ "State",
+ "TimeToLive",
+ "TotalClaimRunTime",
+ "TotalClaimSuspendTime",
+ "TotalCondorLoadAvg",
+ "TotalCpus",
+ "TotalDisk",
+ "TotalJobRunTime",
+ "TotalJobSuspendTime",
+ "TotalLoadAvg",
+ "TotalMemory",
+ "TotalSlots",
+ "TotalTimeBackfillBusy",
+ "TotalTimeBackfillIdle",
+ "TotalTimeBackfillKilling",
+ "TotalTimeClaimedBusy",
+ "TotalTimeClaimedIdle",
+ "TotalTimeClaimedRetiring",
+ "TotalTimeClaimedSuspended",
+ "TotalTimeMatchedIdle",
+ "TotalTimeOwnerIdle",
+ "TotalTimePreemptingKilling",
+ "TotalTimePreemptingVacating",
+ "TotalTimeUnclaimedBenchmarking",
+ "TotalTimeUnclaimedIdle",
+ "TotalVirtualMemory",
+ "UidDomain",
+ "UpdateInterval",
+ "VirtualMemory",
+ "WindowsBuildNumber",
+ "WindowsMajorVersion",
+ "WindowsMinorVersion"]
+
+ def make_collector_obj(self, id):
+ return SlotObj(self.ep.id, id)
+
+ def get_objects(self, no_summary):
+ return self.ep.app.aviary_ops.get_slot(self.ep.url, no_summary=no_summary)
+
Modified: branches/tmckay/mint/python/mint/aviary/endpoints.py
===================================================================
--- branches/tmckay/mint/python/mint/aviary/endpoints.py 2013-02-07 19:52:33 UTC (rev
5678)
+++ branches/tmckay/mint/python/mint/aviary/endpoints.py 2013-02-08 03:22:44 UTC (rev
5679)
@@ -2,7 +2,7 @@
from datetime import datetime
from submissions import QuerySubmissionsBefore, QuerySubmissionsAfter
from collector import QueryCollector, QueryNegotiator, QuerySubmitter, \
-QueryScheduler
+QueryScheduler, QuerySlot
class Endpoint(object):
def __init__(self, url, id):
@@ -70,7 +70,7 @@
self.app = factory.app
- my_classes = ("Collector", "Negotiator",
"Submitter", "Scheduler")
+ my_classes = ("Collector", "Negotiator",
"Submitter", "Scheduler", "Slot")
self.classes = [c for c in factory.abbrev_classes \
if c in my_classes]
@@ -88,6 +88,9 @@
if "Scheduler" in self.classes:
work.append(QueryScheduler(self))
+ if "Slot" in self.classes:
+ work.append(QuerySlot(self))
+
return work
class EndpointFactory(object):
@@ -124,6 +127,7 @@
"Negotiator": ("COLLECTOR", ""),
"Scheduler": ("COLLECTOR", ""),
"Submitter": ("COLLECTOR", ""),
+ "Slot": ("COLLECTOR", ""),
"Submission": ("CUSTOM", "QUERY_SERVER")}
endpoints = set()
Modified: branches/tmckay/mint/python/mint/aviary/session.py
===================================================================
--- branches/tmckay/mint/python/mint/aviary/session.py 2013-02-07 19:52:33 UTC (rev 5678)
+++ branches/tmckay/mint/python/mint/aviary/session.py 2013-02-08 03:22:44 UTC (rev 5679)
@@ -42,7 +42,7 @@
log.info("Querying for Aviary class %s.%s" % (pname, cname))
- self.foreman = Foreman()
+ self.foreman = Foreman(num_workers=8)
endpoint_factory = EndpointFactory(self.app,
classes,
Modified: branches/tmckay/mint/python/mint/main.py
===================================================================
--- branches/tmckay/mint/python/mint/main.py 2013-02-07 19:52:33 UTC (rev 5678)
+++ branches/tmckay/mint/python/mint/main.py 2013-02-08 03:22:44 UTC (rev 5679)
@@ -91,7 +91,8 @@
self.model.com_redhat_grid.Collector,
self.model.com_redhat_grid.Negotiator,
self.model.com_redhat_grid.Submitter,
- self.model.com_redhat_grid.Scheduler]
+ self.model.com_redhat_grid.Scheduler,
+ self.model.com_redhat_grid.Slot]
for c in supported_classes:
if c in self._qmf_classes:
Modified: branches/tmckay/mint/python/mint/update.py
===================================================================
--- branches/tmckay/mint/python/mint/update.py 2013-02-07 19:52:33 UTC (rev 5678)
+++ branches/tmckay/mint/python/mint/update.py 2013-02-08 03:22:44 UTC (rev 5679)
@@ -5,7 +5,7 @@
from psycopg2 import IntegrityError, TimestampFromTicks
from psycopg2.extensions import cursor as Cursor
from rosemary.model import *
-from rosemary.sqltype import qmf_type_code_by_string
+from rosemary.sqltype import qmf_type_code_by_string, qmf_default_by_string
from model import *
from util import *
@@ -736,9 +736,8 @@
self.update_object(cursor, stats, obj)
def get_agent_id(self):
- return self.aviary_obj.endpoint_id.resource + ":" + \
- self.aviary_obj.endpoint_id.sub_type + ":" + \
- self.aviary_obj.endpoint_id.name
+ return self.aviary_obj.id.resource + ":" + \
+ self.aviary_obj.id.name
def get_object_id(self):
return self.aviary_obj.id.name
@@ -788,6 +787,8 @@
sql = "; ".join(statements)
self.execute_sql(cursor, sql, obj.__dict__)
+ self.process_deferred_links(cursor, obj)
+
obj._save_time = datetime.now()
self.model.print_event(3, "Created %s", obj)
@@ -852,11 +853,34 @@
t = qmf_type_code_by_string[prop.type]
return transformers[t](value)
+ def get_default(self, prop):
+ if prop.type in qmf_default_by_string:
+ return qmf_default_by_string[prop.type]
+ return None
+
+ def process_deferred_links(self, cursor, obj):
+ agent = self.model.agents_by_id[obj._qmf_agent_id]
+
+ if obj._qmf_object_id not in agent.deferred_links_by_id:
+ return
+
+ links = agent.deferred_links_by_id[obj._qmf_object_id]
+
+ for link in links:
+ link.realize(cursor, obj)
+
+ del agent.deferred_links_by_id[obj._qmf_object_id]
+
+
def process_properties(self, obj, columns, cursor):
cls = obj._class
for name, prop in cls._properties_by_name.iteritems():
- value = getattr(self.aviary_obj, name)
+ try:
+ value = getattr(self.aviary_obj, name)
+ except AttributeError:
+ value = self.get_default(prop)
+
if value is not None:
value = self.transform_value(prop, value)
if value == getattr(obj, prop.sql_column.name):
@@ -902,7 +926,11 @@
# loop through the list of properties, look for
# the value in the object
for name, stat in self.cls._statistics_by_name.iteritems():
- value = getattr(self.aviary_obj, name)
+ try:
+ value = getattr(self.aviary_obj, name)
+ except AttributeError:
+ value = self.get_default(stat)
+
if value is not None:
value = self.transform_value(stat, value)
@@ -933,16 +961,10 @@
log.error("Sql row count: %i", cursor.rowcount)
- log.error("Qmf properties:")
+ log.error("attributes:")
- for item in sorted(self.qmf_object.getProperties()):
- log.error(" %-34s %r", *item)
-
- log.error("Qmf statistics:")
-
- for item in sorted(self.qmf_object.getStatistics()):
- log.error(" %-34s %r", *item)
-
+ for item in sorted(self.aviary_obj.__dict__.items()):
+ log.error(" %-34s %r" % item)
raise
def __repr__(self):
@@ -958,6 +980,17 @@
submission,
model.com_redhat_grid.Submission)
+ def get_object_id(self):
+ return self.aviary_obj.id.owner + ":" + \
+ self.aviary_obj.id.name
+
+ def get_agent_id(self):
+ return "SCHEDULER" + ":" + \
+ self.aviary_obj.id._scheduler
+
+ def get_object_id(self):
+ return self.aviary_obj.id.name
+
def process_properties(self, obj, columns, cursor):
cls = obj._class
@@ -974,7 +1007,7 @@
self.agentName = agent
self.objectName = objname
- val = FakeOID("com.redhat.grid:scheduler:" + \
+ val = FakeOID("SCHEDULER:" + \
self.aviary_obj.id._scheduler,
self.aviary_obj.id._scheduler)
prop = FakeProp("schedulerRef")
Modified: branches/tmckay/rosemary/python/rosemary/sqltype.py
===================================================================
--- branches/tmckay/rosemary/python/rosemary/sqltype.py 2013-02-07 19:52:33 UTC (rev
5678)
+++ branches/tmckay/rosemary/python/rosemary/sqltype.py 2013-02-08 03:22:44 UTC (rev
5679)
@@ -43,37 +43,39 @@
sql_string_id = StringIdType("text", str)
__mappings = (
- (sql_bool, 11, "bool"),
- (sql_float4, 12, "float"),
- (sql_float8, 13, "double"),
- (sql_int2, 1, "count8"),
- (sql_int2, 1, "hilo8"),
- (sql_int2, 1, "uint8"),
- (sql_int2, 16,"int8"),
- (sql_int2, 17, "int16"),
- (sql_int4, 18, "int32"),
- (sql_int4, 2, "count16"),
- (sql_int4, 2, "hilo16"),
- (sql_int4, 2, "uint16"),
- (sql_int8, 19, "int64"),
- (sql_int8, 3, "count32"),
- (sql_int8, 3, "hilo32"),
- (sql_int8, 3, "mma32"),
- (sql_int8, 3, "uint32"),
+ (sql_bool, 11, "bool", True),
+ (sql_float4, 12, "float", 0),
+ (sql_float8, 13, "double", 0),
+ (sql_int2, 1, "count8", 0),
+ (sql_int2, 1, "hilo8", 0),
+ (sql_int2, 1, "uint8", 0),
+ (sql_int2, 16,"int8", 0),
+ (sql_int2, 17, "int16", 0),
+ (sql_int4, 18, "int32", 0),
+ (sql_int4, 2, "count16", 0),
+ (sql_int4, 2, "hilo16", 0),
+ (sql_int4, 2, "uint16", 0),
+ (sql_int8, 19, "int64", 0),
+ (sql_int8, 3, "count32", 0),
+ (sql_int8, 3, "hilo32", 0),
+ (sql_int8, 3, "mma32", 0),
+ (sql_int8, 3, "uint32", 0),
(sql_pickled_map, 15, "map"),
(sql_string_id, 10, "objId"),
(sql_string_id, 14, "uuid"),
- (sql_text, 6, "sstr"),
- (sql_text, 7, "lstr"),
- (sql_timestamp, 8, "absTime"),
- (sql_uint8, 4, "count64"),
- (sql_uint8, 4, "hilo64"),
- (sql_uint8, 4, "mma64"),
- (sql_uint8, 4, "mmaTime"),
- (sql_uint8, 4, "uint64"),
- (sql_uint8, 9, "deltaTime"),
+ (sql_text, 6, "sstr", ""),
+ (sql_text, 7, "lstr", ""),
+ (sql_timestamp, 8, "absTime", 0),
+ (sql_uint8, 4, "count64", 0),
+ (sql_uint8, 4, "hilo64", 0),
+ (sql_uint8, 4, "mma64", 0),
+ (sql_uint8, 4, "mmaTime", 0),
+ (sql_uint8, 4, "uint64", 0),
+ (sql_uint8, 9, "deltaTime", 0),
)
sql_types_by_qmf_type_code = dict([(x[1], x[0]) for x in __mappings])
sql_types_by_qmf_type_string = dict([(x[2], x[0]) for x in __mappings])
qmf_type_code_by_string = dict([(x[2], x[1]) for x in __mappings])
+
+qmf_default_by_string = dict([(x[2], x[3]) for x in __mappings if len(x) > 3])
Modified: branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl
===================================================================
--- branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl 2013-02-07 19:52:33 UTC
(rev 5678)
+++ branches/tmckay/sage/rpc-defs/aviary/aviary-collector.wsdl 2013-02-08 03:22:44 UTC
(rev 5679)
@@ -34,12 +34,12 @@
<wsdl:message name="GetMasterResponse">
<wsdl:part name="parameters"
element="coll:GetMasterResponse"/>
</wsdl:message>
- <wsdl:message name="GetMasterIDRequest">
- <wsdl:part name="parameters"
element="coll:GetMasterID"/>
- </wsdl:message>
- <wsdl:message name="GetMasterIDResponse">
- <wsdl:part name="parameters"
element="coll:GetMasterIDResponse"/>
- </wsdl:message>
+ <wsdl:message name="GetMasterIDRequest">
+ <wsdl:part name="parameters" element="coll:GetMasterID"/>
+ </wsdl:message>
+ <wsdl:message name="GetMasterIDResponse">
+ <wsdl:part name="parameters"
element="coll:GetMasterIDResponse"/>
+ </wsdl:message>
<wsdl:message name="GetNegotiatorRequest">
<wsdl:part name="parameters" element="coll:GetNegotiator"/>
</wsdl:message>
@@ -58,12 +58,12 @@
<wsdl:message name="GetSlotResponse">
<wsdl:part name="parameters"
element="coll:GetSlotResponse"/>
</wsdl:message>
- <wsdl:message name="GetSlotIDRequest">
- <wsdl:part name="parameters"
element="coll:GetSlotID"/>
- </wsdl:message>
- <wsdl:message name="GetSlotIDResponse">
- <wsdl:part name="parameters"
element="coll:GetSlotIDResponse"/>
- </wsdl:message>
+ <wsdl:message name="GetSlotIDRequest">
+ <wsdl:part name="parameters" element="coll:GetSlotID"/>
+ </wsdl:message>
+ <wsdl:message name="GetSlotIDResponse">
+ <wsdl:part name="parameters"
element="coll:GetSlotIDResponse"/>
+ </wsdl:message>
<wsdl:message name="GetSubmitterRequest">
<wsdl:part name="parameters" element="coll:GetSubmitter"/>
</wsdl:message>
@@ -85,10 +85,10 @@
<wsdl:input message="tns:GetMasterRequest"/>
<wsdl:output message="tns:GetMasterResponse"/>
</wsdl:operation>
- <wsdl:operation name="getMasterID">
- <wsdl:input message="tns:GetMasterIDRequest"/>
- <wsdl:output message="tns:GetMasterIDResponse"/>
- </wsdl:operation>
+ <wsdl:operation name="getMasterID">
+ <wsdl:input message="tns:GetMasterIDRequest"/>
+ <wsdl:output message="tns:GetMasterIDResponse"/>
+ </wsdl:operation>
<wsdl:operation name="getNegotiator">
<wsdl:input message="tns:GetNegotiatorRequest"/>
<wsdl:output message="tns:GetNegotiatorResponse"/>
@@ -101,10 +101,10 @@
<wsdl:input message="tns:GetSlotRequest"/>
<wsdl:output message="tns:GetSlotResponse"/>
</wsdl:operation>
- <wsdl:operation name="getSlotID">
- <wsdl:input message="tns:GetSlotIDRequest"/>
- <wsdl:output message="tns:GetSlotIDResponse"/>
- </wsdl:operation>
+ <wsdl:operation name="getSlotID">
+ <wsdl:input message="tns:GetSlotIDRequest"/>
+ <wsdl:output message="tns:GetSlotIDResponse"/>
+ </wsdl:operation>
<wsdl:operation name="getSubmitter">
<wsdl:input message="tns:GetSubmitterRequest"/>
<wsdl:output message="tns:GetSubmitterResponse"/>
@@ -134,15 +134,15 @@
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="getMasterID">
- <soap:operation
soapAction="http://grid.redhat.com/aviary-collector/master/id"/...
- <wsdl:input>
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output>
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
+ <wsdl:operation name="getMasterID">
+ <soap:operation
soapAction="http://grid.redhat.com/aviary-collector/master/id"/...
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
<wsdl:operation name="getNegotiator">
<soap:operation
soapAction="http://grid.redhat.com/aviary-collector/negotiator"...
<wsdl:input>
@@ -170,15 +170,15 @@
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="getSlotID">
- <soap:operation
soapAction="http://grid.redhat.com/aviary-collector/slot/id"/>
- <wsdl:input>
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output>
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
+ <wsdl:operation name="getSlotID">
+ <soap:operation
soapAction="http://grid.redhat.com/aviary-collector/slot/id"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
<wsdl:operation name="getSubmitter">
<soap:operation
soapAction="http://grid.redhat.com/aviary-collector/submitter"/...
<wsdl:input>
Modified: branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd
===================================================================
--- branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd 2013-02-07 19:52:33 UTC (rev
5678)
+++ branches/tmckay/sage/rpc-defs/aviary/aviary-common.xsd 2013-02-08 03:22:44 UTC (rev
5679)
@@ -111,10 +111,10 @@
<xs:element name="owner" type="xs:string"
minOccurs="0"/>
<xs:element name="qdate" type="xs:int"
minOccurs="0"/>
</xs:sequence>
- <!-- where this submission was created in the condor space -->
- <!-- TODO: tactical hiding for backward compat, revisit -->
- <xs:attribute name="pool" type="xs:string"/>
- <xs:attribute name="scheduler" type="xs:string"/>
+ <!-- where this submission was created in the condor space -->
+ <!-- TODO: tactical hiding for backward compat, revisit -->
+ <xs:attribute name="pool" type="xs:string"/>
+ <xs:attribute name="scheduler" type="xs:string"/>
</xs:complexType>
<xs:complexType name="JobID">
<xs:sequence>
@@ -260,6 +260,7 @@
</xs:complexType>
<xs:complexType name="NegotiatorSummary">
<xs:sequence>
+ <xs:element name="latest_cycle" type="xs:dateTime"/>
<xs:element name="match_rate" type="xs:double"/>
<xs:element name="matches" type="xs:int"/>
<xs:element name="duration" type="xs:int"/>
@@ -343,6 +344,8 @@
<xs:element name="running" type="xs:int"/>
<xs:element name="held" type="xs:int"/>
<xs:element name="idle" type="xs:int"/>
+ <xs:element name="created" type="xs:dateTime"/>
+ <xs:element name="owner" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Submitter">