blob: 3157ca3954b32c83b6d98a7107379db7c043bd65 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
<control-data>
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
to the known property "available-queues" -->
<start-up-command name="test00ParseQstat">
<arg/>
<stdout-parser delim="\n">
<target ref="available_queues">
<match>
<expression>[^\s]+</expression>
<!-- <append field="value" separator=","> -->
<!-- <entry valueGroup="0"/> -->
<!-- </append> -->
<add field="value">
<entry valueGroup="0"/>
</add>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 2: output is to be searched for its final line which should
contain a job id of the form "[digits].[chars]" -->
<start-up-command name="test01JobId">
<arg/>
<stdout-parser delim="\n" all="true" save="1">
<target ref="@jobId">
<match>
<expression>([\d]*)[.].*</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
of attribute definitions, but each line bearing a distinct
id (e.g., openMPI attribute discovery) -->
<start-up-command name="test02OpenMPI">
<arg/>
<stdout-parser delim="\n">
<target type="attribute">
<match>
<expression>mca:.*:param:([^:]*):value:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="visible">
<entry value="true"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
<match>
<expression>mca:.*:param:([^:]*):status:(.*)</expression>
<set field="status">
<entry valueGroup="2"/>
</set>
</match>
<match>
<expression>mca:.*:param:([^:]*):help:(.*)</expression>
<set field="tooltip">
<entry valueGroup="2"/>
</set>
</match>
<test op="EQ">
<value>#status</value>
<value>read-only</value>
<set field="readOnly">
<entry value="true"/>
</set>
<else>
<set field="readOnly">
<entry value="false"/>
</set>
</else>
</test>
</target>
<target type="attribute">
<match>
<expression>(.*):([^:]*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
<set field="visible">
<entry value="false"/>
</set>
<set field="readOnly">
<entry value="true"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
by caption; use of moveToTop to promote the target to the top of the list
when the caption appears -->
<start-up-command name="test03ImplicitWithTags">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match moveToTop="true">
<expression>PROPERTY</expression>
</match>
<match>
<expression>name:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
</match>
<match>
<expression>value:(.*)</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
<target type="attribute">
<match moveToTop="true">
<expression>ATTRIBUTE</expression>
</match>
<match>
<expression>name:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
</match>
<match>
<expression>value:(.*)</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
<start-up-command name="test04ImplicitOrdering">
<arg/>
<stdout-parser delim="\n">
<target type="attribute" matchAll="true">
<match>
<expression>.+</expression>
<set field="name">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="type">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="description">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="tooltip">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="value">
<entry valueGroup="0"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 6: like 4, but with indeterminate type order and using buffer + DOTALL -->
<start-up-command name="test05ImplicitWithTagsDotall">
<arg/>
<stdout-parser maxMatchLen="32" applyToAll="true">
<target type="property">
<match>
<expression flags="DOTALL">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
</target>
<target type="property">
<match>
<expression flags="DOTALL">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
<set field="name">
<entry valueGroup="2"/>
</set>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
<target type="attribute">
<match>
<expression flags="DOTALL">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
</target>
<target type="attribute">
<match>
<expression flags="DOTALL">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
<set field="name">
<entry valueGroup="2"/>
</set>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
<start-up-command name="test06PropertyDefsSingleLine">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match>
<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
not exceed 32 chars -->
<start-up-command name="test07JobStates">
<arg/>
<stdout-parser maxMatchLen="32">
<target ref="jobStates">
<match>
<expression flags="DOTALL">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<put field="value">
<entry keyGroup="1" valueGroup="2"/>
</put>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 9: Successive names/values, in order, but staggered -->
<start-up-command name="test08Staggered">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match>
<expression>name:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
</match>
<match>
<expression>value:(.*)</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 10: forced merge -->
<start-up-command name="test09Merged">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match>
<expression>name:(.+);value:(.+)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
<match>
<expression>name:(.+);default:(.+)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="default">
<entry valueGroup="2"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 11: exit-on -->
<start-up-command name="test10ExitOn">
<arg/>
<stdout-parser maxMatchLen="32">
<target ref="jobStates">
<match>
<expression flags="DOTALL">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<put field="value">
<entry keyGroup="1" valueGroup="2"/>
</put>
</match>
</target>
<exit-on flags="DOTALL">.*EXIT.*</exit-on>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 12: exit-after -->
<start-up-command name="test11ExitAfter">
<arg/>
<stdout-parser maxMatchLen="32">
<target ref="jobStates">
<match>
<expression flags="DOTALL">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<put field="value">
<entry keyGroup="1" valueGroup="2"/>
</put>
</match>
</target>
<exit-after flags="DOTALL">.*EXIT.*</exit-after>
</stdout-parser>
</start-up-command>
<submit-interactive name="empty">
<arg/>
</submit-interactive>
<get-job-status name="test12GetStatus">
<arg/>
<stdout-parser delim="\n">
<target ref="@jobId">
<match>
<expression>.+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
<test op="EQ">
<value>#value</value>
<value>Q</value>
<set field="value">
<entry value="QUEUED_ACTIVE"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>R</value>
<set field="value">
<entry value="RUNNING"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>S</value>
<set field="value">
<entry value="SUSPENDED"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>C</value>
<set field="value">
<entry value="COMPLETED"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>E</value>
<set field="value">
<entry value="COMPLETED"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>H</value>
<set field="value">
<entry value="SYSTEM_ON_HOLD"/>
</set>
</test>
</target>
</stdout-parser>
</get-job-status>
</control-data>
<monitor-data/>
</resource-manager-builder>