Skip to content

Commit

Permalink
chore: SSC appversion refresh improvements
Browse files Browse the repository at this point in the history
feat: `fcli ssc appversion create`: Add `--refresh-timeout` option

feat: `fcli ssc appversion copy-state`: Add `--refresh-timeout` option

fix: `fcli ssc appversion refresh-metrics`: Allow for `fcli state wait-for-job ::var::` to be invoked without errors even if no refresh was required
  • Loading branch information
rsenden committed Sep 16, 2024
1 parent e3a273c commit 89cf435
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ private final void addNodeWithStatus(Map<ObjectNode, String> nodesWithStatus, Js
}

private final void updateProgress(Map<ObjectNode, WaitStatus> recordsWithWaitStatus) {
if ( progressMonitor!=null ) {
if ( progressMonitor!=null && !recordsWithWaitStatus.isEmpty() ) {
progressMonitor.updateProgress(recordsWithWaitStatus);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public JsonNode getJsonNode(UnirestInstance unirest) {

if(refreshOptions.isRefresh() && fromAppVersionDescriptor.isRefreshRequired()){
SSCJobDescriptor refreshJobDesc = SSCAppVersionHelper.refreshMetrics(unirest, fromAppVersionDescriptor);
SSCJobHelper.waitForJob(unirest,refreshJobDesc);
SSCJobHelper.waitForJob(unirest,refreshJobDesc, refreshOptions.getRefreshTimeout());
}

return mapper.valueToTree(copyState(unirest, fromAppVersionDescriptor, toAppVersionDescriptor));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
package com.fortify.cli.ssc.appversion.cli.cmd;

import com.fasterxml.jackson.databind.JsonNode;
import com.fortify.cli.common.json.JsonHelper;
import com.fortify.cli.common.output.cli.mixin.OutputHelperMixins;
import com.fortify.cli.common.output.transform.IActionCommandResultSupplier;
import com.fortify.cli.common.output.transform.IRecordTransformer;
Expand Down Expand Up @@ -41,7 +42,8 @@ public JsonNode getJsonNode(UnirestInstance unirest) {
SSCJobDescriptor refreshJobDescriptor = SSCAppVersionHelper.refreshMetrics(unirest, descriptor);
if(refreshJobDescriptor == null){
return descriptor.asObjectNode()
.put(IActionCommandResultSupplier.actionFieldName, "NO_REFRESH_REQUIRED");
.put(IActionCommandResultSupplier.actionFieldName, "NO_REFRESH_REQUIRED")
.set("job", JsonHelper.getObjectMapper().createObjectNode().put("jobName", ""));
} else {
return descriptor.asObjectNode().set("job", refreshJobDescriptor.asJsonNode());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public final SSCAppVersionCopyFromDescriptor getCopyFromDescriptor(UnirestInstan
private SSCAppVersionDescriptor refresh(UnirestInstance unirest, SSCAppVersionDescriptor copyFrom) {
if (copyFrom!=null && copyFrom.isRefreshRequired() && refreshOptions.isRefresh() ) {
var jobDescriptor = SSCAppVersionHelper.refreshMetrics(unirest, copyFrom);
SSCJobHelper.waitForJob(unirest, jobDescriptor);
SSCJobHelper.waitForJob(unirest, jobDescriptor, refreshOptions.getRefreshTimeout());
}
return copyFrom;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ public class SSCAppVersionRefreshOptions {
@Option(names = "--refresh", negatable = true, descriptionKey = "fcli.ssc.appversion.create.refresh",
defaultValue = "true", fallbackValue = "true")
private boolean refresh;
@Option(names = "--refresh-timeout", paramLabel = "<timeoutPeriod>", descriptionKey = "fcli.ssc.appversion.create.refresh-timeout",
defaultValue = "60s")
private String refreshTimeout;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
package com.fortify.cli.ssc.system_state.cli.mixin;

import java.util.Collection;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;

Expand Down Expand Up @@ -47,7 +48,8 @@ public SSCJobDescriptor[] getJobDescriptors(UnirestInstance unirest){
}

public Collection<JsonNode> getJobDescriptorJsonNodes(UnirestInstance unirest){
return Stream.of(getJobDescriptors(unirest)).map(SSCJobDescriptor::asJsonNode).collect(Collectors.toList());
return Stream.of(getJobDescriptors(unirest)).filter(Objects::nonNull)
.map(SSCJobDescriptor::asJsonNode).collect(Collectors.toList());
}

public String[] getJobNames(UnirestInstance unirest) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import java.util.Collections;
import java.util.HashSet;

import org.apache.commons.lang3.StringUtils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fortify.cli.common.json.JsonHelper;
import com.fortify.cli.common.rest.wait.WaitHelper;
Expand All @@ -29,6 +31,7 @@

public final class SSCJobHelper {
public static final SSCJobDescriptor getJobDescriptor(UnirestInstance unirest, String jobName, String... fields) {
if ( StringUtils.isBlank(jobName) ) { return null; }
GetRequest request = unirest.get(SSCUrls.JOB(jobName));
if ( fields!=null && fields.length>0 ) {
request = request.queryString("fields", String.join(",",fields));
Expand All @@ -47,13 +50,13 @@ private static final SSCJobDescriptor getDescriptor(JsonNode node) {
}

public static final SSCJobDescriptor getJobDescriptor(UnirestInstance unirest, String jobName) {
return getDescriptor(getJobJsonNode(unirest, jobName));
return StringUtils.isBlank(jobName) ? null : getDescriptor(getJobJsonNode(unirest, jobName));
}

public final static SSCJobDescriptor waitForJob(UnirestInstance unirest, SSCJobDescriptor descriptor){
public final static SSCJobDescriptor waitForJob(UnirestInstance unirest, SSCJobDescriptor descriptor, String timeout){
WaitHelperBuilder builder = WaitHelper.builder()
.waitType(new WaitType(WaitType.LoopType.Until, WaitType.AnyOrAll.all_match))
.timeoutPeriod("60s")
.timeoutPeriod(StringUtils.isBlank(timeout)?"60s":timeout)
.intervalPeriod("5s")
.onFailureState(null)
.onTimeout(null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ fcli.ssc.appversion.create.skip-if-exists = Skip application version creation if
the specified name already exists.
fcli.ssc.appversion.create.refresh = By default, this command will refresh the source application version's metrics when copying from it. \
Note that for large applications this can lead to an error if the timeout expires.
fcli.ssc.appversion.create.refresh-timeout = Time-out, for example 30s (30 seconds), 5m (5 minutes), 1h (1 hour). Default value: ${DEFAULT-VALUE}
fcli.ssc.appversion.create.copy-options = Comma separated list of elements to copy (Requires --copy-from). By default, all are copied. \
Allowed values: ${COMPLETION-CANDIDATES}. The BugTrackerConfiguration and AnalysisProcessingRules values are deprecated and will \
be removed in a future fcli version.
Expand Down

0 comments on commit 89cf435

Please sign in to comment.