Skip to content

Commit

Permalink
Added polling timeout. DependencyTrack/dependency-track#264
Browse files Browse the repository at this point in the history
  • Loading branch information
stevespringett committed Jan 15, 2019
1 parent 0873622 commit 4c57e11
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 2 deletions.
Expand Up @@ -207,11 +207,15 @@ public void perform(@Nonnull final Run<?, ?> build,
}

if (uploadResult.getToken() != null && synchronous) {
// todo: create configurable timeout - this has the potential for infinite loop
final long startTime = System.currentTimeMillis();
Thread.sleep(10000);
logger.log(Messages.Builder_Polling());
while (apiClient.isTokenBeingProcessed(uploadResult.getToken())) {
Thread.sleep(10000);
if (startTime + (60000 * getDescriptor().dependencyTrackPollingTimeout) > System.currentTimeMillis()) {
logger.log(Messages.Builder_Polling_Timeout_Exceeded());
return;
}
logger.log(Messages.Builder_Polling());
}
logger.log(Messages.Builder_Findings_Processing());
Expand Down Expand Up @@ -285,6 +289,10 @@ public static final class DescriptorImpl extends BuildStepDescriptor<Publisher>
*/
private boolean dependencyTrackAutoCreateProjects;

/**
* Specifies the maximum number of minutes to wait for synchronous jobs to complete.
*/
private int dependencyTrackPollingTimeout;

/**
* Default constructor. Obtains the Descriptor used in DependencyCheckBuilder as this contains
Expand Down Expand Up @@ -409,6 +417,7 @@ public boolean configure(StaplerRequest req, JSONObject formData) throws FormExc
dependencyTrackUrl = formData.getString("dependencyTrackUrl");
dependencyTrackApiKey = formData.getString("dependencyTrackApiKey");
dependencyTrackAutoCreateProjects = formData.getBoolean("dependencyTrackAutoCreateProjects");
dependencyTrackPollingTimeout = formData.getInt("dependencyTrackPollingTimeout");
save();
return super.configure(req, formData);
}
Expand Down Expand Up @@ -441,8 +450,17 @@ public String getDependencyTrackApiKey() {
*/
public boolean isDependencyTrackAutoCreateProjects() {
return dependencyTrackAutoCreateProjects;
}
}

/**
* This method returns the global configuration for dependencyTrackPollingTimeout.
*/
public int getDependencyTrackPollingTimeout() {
if (dependencyTrackPollingTimeout <= 0) {
return 5;
}
return dependencyTrackPollingTimeout;
}
}

@Override
Expand Down
Expand Up @@ -23,6 +23,9 @@ limitations under the License.
<f:entry title="${%dependencytrack.apikey}" field="dependencyTrackApiKey" help="/plugin/dependency-track/help-dt-apikey.html">
<f:textbox id="dependencytrack.apikey"/>
</f:entry>
<f:entry title="${%dependencytrack.polling.timeout}" field="dependencyTrackPollingTimeout" help="/plugin/dependency-track/help-dt-polling-timeout.html">
<f:number id="dependencytrack.polling.timeout"/>
</f:entry>
<f:entry title="${%dependencytrack.autocreate}" field="dependencyTrackAutoCreateProjects" help="/plugin/dependency-track/help-dt-autocreate.html">
<f:checkbox id="dependencytrack.autocreate" default="false"/>
</f:entry>
Expand Down
Expand Up @@ -15,5 +15,6 @@
dependencytrack.url=Dependency-Track URL
dependencytrack.apikey=API key
dependencytrack.autocreate=Auto Create Projects
dependencytrack.polling.timeout=Polling Timeout
dependencytrack.connection.test=Test Connection
dependencytrack.connection.testing=Testing...
Expand Up @@ -28,6 +28,7 @@ Builder.Payload.Invalid=Invalid payload submitted to server
Builder.Unauthorized=Unauthorized. Ensure a valid API key is specified.
Builder.Project.NotFound=The specified project could not be found
Builder.Polling=Polling Dependency-Track for BOM processing status
Builder.Polling.Timeout.Exceeded=Polling Dependency-Track for results is taking longer than expected - polling limit exceeded
Builder.Findings.Processing=Processing findings
Builder.Publisher.Response.Failure=An error occurred publishing results. Check Dependency-Track server logs for details.

Expand Down
4 changes: 4 additions & 0 deletions src/main/webapp/help-dt-polling-timeout.html
@@ -0,0 +1,4 @@
<div>
Defines the maximum number of minutes to wait for Dependency-Track to process a job (Synchronous Publishing Mode).
When the time is exceeded, the job will continue without further polling. The default value is 5 minutes.
</div>

0 comments on commit 4c57e11

Please sign in to comment.