mirror of
https://github.com/Fishwaldo/rundeck-api-java-client.git
synced 2025-07-06 21:18:18 +00:00
Support successfulNodes/failedNodes in execution data for api v10
This commit is contained in:
parent
eb392dd32e
commit
e3291e3dab
6 changed files with 139 additions and 2 deletions
|
@ -17,6 +17,7 @@ package org.rundeck.api.domain;
|
|||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import org.apache.commons.lang.time.DurationFormatUtils;
|
||||
|
||||
|
@ -52,6 +53,8 @@ public class RundeckExecution implements Serializable {
|
|||
private String description;
|
||||
private String argstring;
|
||||
private String project;
|
||||
private Set<RundeckNodeIdentity> successfulNodes;
|
||||
private Set<RundeckNodeIdentity> failedNodes;
|
||||
|
||||
/**
|
||||
* @return the duration of the execution in milliseconds (or null if the duration is still running, or has been
|
||||
|
@ -174,7 +177,10 @@ public class RundeckExecution implements Serializable {
|
|||
return "RundeckExecution [id=" + id + ", description=" + description + ", url=" + url + ", status=" + status
|
||||
+ ", argstring=" + argstring
|
||||
+ ", startedBy=" + startedBy + ", startedAt=" + startedAt + ", endedAt=" + endedAt
|
||||
+ ", durationInSeconds=" + getDurationInSeconds() + ", abortedBy=" + abortedBy + ", job=" + job + "]";
|
||||
+ ", durationInSeconds=" + getDurationInSeconds() + ", abortedBy=" + abortedBy + ", job=" + job
|
||||
+ ", successfulNodes=" + getSuccessfulNodes()
|
||||
+ ", failedNodes=" + getFailedNodes()
|
||||
+ "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -281,6 +287,22 @@ public class RundeckExecution implements Serializable {
|
|||
this.project = project;
|
||||
}
|
||||
|
||||
public Set<RundeckNodeIdentity> getSuccessfulNodes() {
|
||||
return successfulNodes;
|
||||
}
|
||||
|
||||
public void setSuccessfulNodes(Set<RundeckNodeIdentity> successfulNodes) {
|
||||
this.successfulNodes = successfulNodes;
|
||||
}
|
||||
|
||||
public Set<RundeckNodeIdentity> getFailedNodes() {
|
||||
return failedNodes;
|
||||
}
|
||||
|
||||
public void setFailedNodes(Set<RundeckNodeIdentity> failedNodes) {
|
||||
this.failedNodes = failedNodes;
|
||||
}
|
||||
|
||||
/**
|
||||
* The status of an execution
|
||||
*/
|
||||
|
|
|
@ -23,7 +23,7 @@ import java.util.List;
|
|||
*
|
||||
* @author Vincent Behar
|
||||
*/
|
||||
public class RundeckNode implements Serializable {
|
||||
public class RundeckNode implements Serializable, RundeckNodeIdentity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
@ -63,6 +63,7 @@ public class RundeckNode implements Serializable {
|
|||
/** URL to an external resource model service. (optional) */
|
||||
private String remoteUrl;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package org.rundeck.api.domain;
|
||||
|
||||
|
||||
/**
|
||||
* Identifies a node by name
|
||||
*/
|
||||
public interface RundeckNodeIdentity {
|
||||
/**
|
||||
* Return the rundeck Node name
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
String getName();
|
||||
}
|
|
@ -15,12 +15,18 @@
|
|||
*/
|
||||
package org.rundeck.api.parser;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.dom4j.Node;
|
||||
import org.rundeck.api.domain.RundeckExecution;
|
||||
import org.rundeck.api.domain.RundeckJob;
|
||||
import org.rundeck.api.domain.RundeckExecution.ExecutionStatus;
|
||||
import org.rundeck.api.domain.RundeckNode;
|
||||
import org.rundeck.api.domain.RundeckNodeIdentity;
|
||||
|
||||
/**
|
||||
* Parser for a single {@link RundeckExecution}
|
||||
|
@ -76,6 +82,26 @@ public class ExecutionParser implements XmlNodeParser<RundeckExecution> {
|
|||
execution.setJob(job);
|
||||
}
|
||||
|
||||
final Node successfulNodes = execNode.selectSingleNode("successfulNodes");
|
||||
if (successfulNodes != null) {
|
||||
final List<RundeckNode> rundeckNodes =
|
||||
new ListParser<RundeckNode>(new NodeParser(), "successfulNodes/node")
|
||||
.parseXmlNode(execNode);
|
||||
execution.setSuccessfulNodes(new HashSet<RundeckNodeIdentity>(rundeckNodes));
|
||||
}else{
|
||||
execution.setSuccessfulNodes(Collections.<RundeckNodeIdentity>emptySet());
|
||||
}
|
||||
|
||||
final Node failedNodes = execNode.selectSingleNode("failedNodes");
|
||||
if (failedNodes != null) {
|
||||
final List<RundeckNode> rundeckNodes =
|
||||
new ListParser<RundeckNode>(new NodeParser(), "failedNodes/node")
|
||||
.parseXmlNode(execNode);
|
||||
execution.setFailedNodes(new HashSet<RundeckNodeIdentity>(rundeckNodes));
|
||||
} else {
|
||||
execution.setFailedNodes(Collections.<RundeckNodeIdentity>emptySet());
|
||||
}
|
||||
|
||||
return execution;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,13 +16,17 @@
|
|||
package org.rundeck.api.parser;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
|
||||
import org.dom4j.Document;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.rundeck.api.domain.RundeckExecution;
|
||||
import org.rundeck.api.domain.RundeckJob;
|
||||
import org.rundeck.api.domain.RundeckExecution.ExecutionStatus;
|
||||
import org.rundeck.api.domain.RundeckNodeIdentity;
|
||||
|
||||
/**
|
||||
* Test the {@link ExecutionParser}
|
||||
|
@ -156,4 +160,47 @@ public class ExecutionParserTest {
|
|||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseV10Execution() throws Exception {
|
||||
InputStream input = getClass().getResourceAsStream("execution-result-v10.xml");
|
||||
Document document = ParserHelper.loadDocument(input);
|
||||
|
||||
RundeckExecution execution = new ExecutionParser("result/executions/execution").parseXmlNode(document);
|
||||
RundeckJob job = execution.getJob();
|
||||
|
||||
Assert.assertNotNull(job);
|
||||
Assert.assertEquals(new Long(146), execution.getId());
|
||||
Assert.assertEquals("http://dignan.local:4440/execution/follow/146", execution.getUrl());
|
||||
Assert.assertEquals(ExecutionStatus.SUCCEEDED, execution.getStatus());
|
||||
Assert.assertEquals("admin", execution.getStartedBy());
|
||||
Assert.assertEquals(new Date(1389894502959L), execution.getStartedAt());
|
||||
Assert.assertEquals(new Date(1389894504561L), execution.getEndedAt());
|
||||
Assert.assertEquals((Long)(1389894504561L- 1389894502959L), execution.getDurationInMillis());
|
||||
Assert.assertEquals(null, execution.getAbortedBy());
|
||||
Assert.assertEquals("fdfd", execution.getProject());
|
||||
|
||||
Assert.assertNotNull(execution.getSuccessfulNodes());
|
||||
Assert.assertEquals(3, execution.getSuccessfulNodes().size());
|
||||
|
||||
HashSet<String> expectedSuccess = new HashSet<String>();
|
||||
expectedSuccess.addAll(Arrays.asList(
|
||||
"node-111.qa.subgroup.mycompany.com",
|
||||
"node-6.qa.subgroup.mycompany.com",
|
||||
"node-14.qa.subgroup.mycompany.com"));
|
||||
for (RundeckNodeIdentity rundeckNodeIdentity : execution.getSuccessfulNodes()) {
|
||||
Assert.assertTrue(expectedSuccess.contains(rundeckNodeIdentity.getName()));
|
||||
}
|
||||
|
||||
Assert.assertNotNull(execution.getFailedNodes());
|
||||
Assert.assertEquals(3, execution.getFailedNodes().size());
|
||||
HashSet<String> expectedFailure = new HashSet<String>();
|
||||
expectedFailure.addAll(Arrays.asList(
|
||||
"node-112.qa.subgroup.mycompany.com",
|
||||
"node-62.qa.subgroup.mycompany.com",
|
||||
"node-12.qa.subgroup.mycompany.com"));
|
||||
for (RundeckNodeIdentity rundeckNodeIdentity : execution.getFailedNodes()) {
|
||||
Assert.assertTrue(expectedFailure.contains(rundeckNodeIdentity.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<result success="true" apiversion="10">
|
||||
<executions count="1">
|
||||
<execution id="146" href="http://dignan.local:4440/execution/follow/146" status="succeeded" project="fdfd">
|
||||
<user>admin</user>
|
||||
<date-started unixtime="1389894502959">2014-01-16T17:48:22Z</date-started>
|
||||
<date-ended unixtime="1389894504561">2014-01-16T17:48:24Z</date-ended>
|
||||
<job id="4ae33efb-5d37-4237-a33b-ac08eaaadf79" averageDuration="1528">
|
||||
<name>test 1</name>
|
||||
<group/>
|
||||
<project>fdfd</project>
|
||||
<description/>
|
||||
</job>
|
||||
<description>echo hi there</description>
|
||||
<argstring/>
|
||||
<successfulNodes>
|
||||
<node name="node-111.qa.subgroup.mycompany.com"/>
|
||||
<node name="node-6.qa.subgroup.mycompany.com"/>
|
||||
<node name="node-14.qa.subgroup.mycompany.com"/>
|
||||
</successfulNodes>
|
||||
<failedNodes>
|
||||
<node name="node-112.qa.subgroup.mycompany.com"/>
|
||||
<node name="node-62.qa.subgroup.mycompany.com"/>
|
||||
<node name="node-12.qa.subgroup.mycompany.com"/>
|
||||
</failedNodes>
|
||||
</execution>
|
||||
</executions>
|
||||
</result>
|
Loading…
Add table
Add a link
Reference in a new issue