diff --git a/aip-console-jenkins/README.md b/aip-console-jenkins/README.md
index 8c4a40ae..815be9e5 100644
--- a/aip-console-jenkins/README.md
+++ b/aip-console-jenkins/README.md
@@ -334,9 +334,12 @@ Under `Advanced Settings` you will find the following parameters :
The Snapshot step provides the following parameters :
* *Application Name* (**required**): The name of tshe application for which the analysis will be run.
-* *Snapshot Name* : The name of the Snapshot to create. If left blank, the snapshot will be named with the following pattern: `Snapshot-YYYY-MM-DDThh-mm-ss` depending on current date and time.
+* *Snapshot Name* : The name of the Snapshot to create. If left blank, the snapshot will be named with the following
+ pattern: `Snapshot-YYYY-MM-DDThh-mm-ss` depending on current date and time.
* *Publish to Imaging*: Publish to Imaging if Imaging is configured with AIP Console
-* *Publish to the Health Dashboard* : When checked, consolidates snapshots and publishes data to the Health Dashboards. Checked by default.
+* *Publish to the Health Dashboard* : When checked, consolidates snapshots and publishes data to the Health Dashboards.
+ Checked by default.
+* *Sleep Duration*: Number of seconds used to refresh the ongoing job status
Under `Advanced Settings` you will find the following parameters :
diff --git a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotAction.java b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotAction.java
index cebc6e37..66a72bb1 100644
--- a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotAction.java
+++ b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotAction.java
@@ -23,6 +23,7 @@ public class SnapshotAction extends BaseAction implements RunAction2 {
private boolean failureIgnored = false;
private long timeout = Constants.DEFAULT_HTTP_TIMEOUT;
private boolean consolidation = true;
+ private long sleepDuration = Constants.DEFAULT_SLEEP_DURATION;
@CheckForNull
public String getApplicationName() {
@@ -120,4 +121,12 @@ public String getDisplayName() {
public String getUrlName() {
return null;
}
+
+ public long getSleepDuration() {
+ return sleepDuration;
+ }
+
+ public void setSleepDuration(long sleepDuration) {
+ this.sleepDuration = sleepDuration;
+ }
}
diff --git a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotBuilder.java b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotBuilder.java
index b1c01894..f35a8e4b 100644
--- a/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotBuilder.java
+++ b/aip-console-jenkins/src/main/java/io/jenkins/plugins/aipconsole/SnapshotBuilder.java
@@ -9,6 +9,7 @@
import com.castsoftware.aip.console.tools.core.dto.jobs.JobState;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobType;
import com.castsoftware.aip.console.tools.core.dto.jobs.LogContentDto;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.ApiCallException;
import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException;
import com.castsoftware.aip.console.tools.core.exceptions.JobServiceException;
@@ -55,6 +56,7 @@
import static io.jenkins.plugins.aipconsole.Messages.SnapshotBuilder_Snapshot_error_jobFailure;
import static io.jenkins.plugins.aipconsole.Messages.SnapshotBuilder_Snapshot_error_noAnalyzedVersion;
import static io.jenkins.plugins.aipconsole.Messages.SnapshotBuilder_Snapshot_error_version;
+import static io.jenkins.plugins.aipconsole.Messages.SnapshotBuilder_Snapshot_info_fastScanWorkflow;
import static io.jenkins.plugins.aipconsole.Messages.SnapshotBuilder_Snapshot_info_pollJobMessage;
import static io.jenkins.plugins.aipconsole.Messages.SnapshotBuilder_Snapshot_success_complete;
@@ -78,6 +80,7 @@ public class SnapshotBuilder extends BaseActionBuilder implements SimpleBuildSte
private boolean failureIgnored = false;
private long timeout = Constants.DEFAULT_HTTP_TIMEOUT;
private boolean consolidation = true;
+ private long sleepDuration;
@DataBoundConstructor
public SnapshotBuilder(String applicationName) {
@@ -235,6 +238,38 @@ public void perform(@Nonnull Run, ?> run, @Nonnull FilePath workspace, @Nonnul
}
boolean forcedConsolidation = processImaging || consolidation;
+ //TODO: refactor after release to get separated workflows
+ if (app.isOnboarded()) {
+ log.println(SnapshotBuilder_Snapshot_info_fastScanWorkflow(expandedAppName));
+ ScanAndReScanApplicationJobRequest.ScanAndReScanApplicationJobRequestBuilder requestBuilder = ScanAndReScanApplicationJobRequest.builder()
+ .appGuid(applicationGuid);
+ String targetNode = app.getTargetNode();
+ if (StringUtils.isNotEmpty(targetNode)) {
+ requestBuilder.targetNode(targetNode);
+ }
+ caipVersion = app.getCaipVersion();
+ if (StringUtils.isNotEmpty(caipVersion)) {
+ requestBuilder.caipVersion(caipVersion);
+ }
+ if (StringUtils.isNotEmpty(resolveSnapshotName)) {
+ requestBuilder.snapshotName(resolveSnapshotName);
+ }
+
+ requestBuilder.processImaging(processImaging);
+ requestBuilder.publishToEngineering(forcedConsolidation);
+ //Should remains true to prevent deep-analyze to trigger analyze step when publis and imaging options are set false
+ requestBuilder.uploadApplication(true);
+
+ log.println("Job request : " + requestBuilder.build().toString());
+
+ JenkinsLogPollingProviderServiceImpl jnksLogPollingProvider = new JenkinsLogPollingProviderServiceImpl(jobsService, run, listener, getDescriptor().configuration.isVerbose(), getSleepDuration());
+ String appGuid = applicationService.runDeepAnalysis(requestBuilder.build(), jnksLogPollingProvider);
+ if (StringUtils.isEmpty(appGuid)) {
+ run.setResult(Result.FAILURE);
+ }
+ return;
+ }
+
JobRequestBuilder requestBuilder = JobRequestBuilder.newInstance(applicationGuid, null, JobType.ANALYZE, caipVersion)
.nodeName(app.getTargetNode())
.startStep(Constants.SNAPSHOT_STEP_NAME)
@@ -289,6 +324,15 @@ public void perform(@Nonnull Run, ?> run, @Nonnull FilePath workspace, @Nonnul
}
}
+ public long getSleepDuration() {
+ return sleepDuration;
+ }
+
+ @DataBoundSetter
+ public void setSleepDuration(long sleepDuration) {
+ this.sleepDuration = sleepDuration;
+ }
+
private JobState pollJob(String jobGuid, PrintStream log) throws JobServiceException {
return jobsService.pollAndWaitForJobFinished(jobGuid,
jobStatusWithSteps -> log.println(
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/Messages.properties b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/Messages.properties
index d3993bef..7cbbbdb6 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/Messages.properties
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/Messages.properties
@@ -89,6 +89,7 @@ SnapshotBuilder.Snapshot.error.jobException=An error occurred while starting or
SnapshotBuilder.Snapshot.info.startJob=Snapshot Job is started.
SnapshotBuilder.Snapshot.info.pollJobMessage=Checking status of Snapshot job.
SnapshotBuilder.Snapshot.success.complete=Snapshot for application ''{0}'' completed successfully.
+SnapshotBuilder.Snapshot.info.fastScanWorkflow=Triggering Snapshot for an application using the Fast-Scan workflow: ''{0}''
# Analyze Builder and Action
AnalyzeBuilder.DescriptorImpl.displayName=Console Analyze Application
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.jelly b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.jelly
index bcaf22e1..c994fde0 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.jelly
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.jelly
@@ -10,14 +10,17 @@
-
+
+
+
+
-
+
diff --git a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.properties b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.properties
index d31db0e3..2e39ee2a 100644
--- a/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.properties
+++ b/aip-console-jenkins/src/main/resources/io/jenkins/plugins/aipconsole/SnapshotBuilder/config.properties
@@ -15,3 +15,5 @@ apiKey=API Key
apiKey.descr=The API Key to access AIP Console
consolidation=Publish application to the Health dashboard
consolidation.descr=Consolidate snapshot or publish application to the Health dashboard
+sleepDuration=sleep duration
+sleepDuration.descr=Number of seconds between two refreshes of the status of the ongoing job
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationDeepAnalysisCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationDeepAnalysisCommand.java
index c98b41fc..4aa9344c 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationDeepAnalysisCommand.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationDeepAnalysisCommand.java
@@ -39,11 +39,6 @@ public class OnboardApplicationDeepAnalysisCommand extends BasicCollable {
description = "The name of the snapshot to create")
private String snapshotName;
- @CommandLine.Option(names = {"--sleep-duration"},
- description = "Number of seconds used to refresh the ongoing job status. The default value is: ${DEFAULT-VALUE}",
- defaultValue = "15")
- private long sleepDuration;
-
@CommandLine.Option(names = "--module-option"
, description = "Generates a user defined module option for either technology module or analysis unit module. Possible value is one of: full_content, one_per_au, one_per_techno (default: ${DEFAULT-VALUE})")
private ModuleGenerationType moduleGenerationType = ModuleGenerationType.FULL_CONTENT;
@@ -66,7 +61,7 @@ public Integer processCallCommand() throws Exception {
}
log.info("Deep-Analysis args:");
- log.info(String.format("\tApplication: %s%n\tsnapshot name: %s%n\tmodule generation type: %s%n\tsleep: %d%n", applicationName, StringUtils.isEmpty(snapshotName) ? "Auto assigned" : snapshotName, moduleGenerationType.toString(), sleepDuration));
+ log.info(String.format("\tApplication: %s%n\tsnapshot name: %s%n\tmodule generation type: %s%n\tsleep: %d%n", applicationName, StringUtils.isEmpty(snapshotName) ? "Auto assigned" : snapshotName, moduleGenerationType.toString(), getSharedOptions().getSleepDuration()));
Thread shutdownHook = null;
try {
@@ -103,7 +98,7 @@ public Integer processCallCommand() throws Exception {
String caipVersion = app.getCaipVersion();
String targetNode = app.getTargetNode();
- CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), sleepDuration);
+ CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), getSharedOptions().getSleepDuration());
//Run Analysis
if (!applicationService.isImagingAvailable()) {
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationFastScanCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationFastScanCommand.java
index 25044a66..b8ff9fc5 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationFastScanCommand.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/OnboardApplicationFastScanCommand.java
@@ -61,11 +61,6 @@ public class OnboardApplicationFastScanCommand extends BasicCollable {
, description = "Project's exclusion rules, separated with comma. Valid values: ${COMPLETION-CANDIDATES}")
private ExclusionRuleType[] exclusionRules;
- @CommandLine.Option(names = {"--sleep-duration"},
- description = "Number of seconds used to refresh the ongoing job status. The default value is: ${DEFAULT-VALUE}",
- defaultValue = "1")
- private long sleepDuration;
-
@CommandLine.Mixin
private SharedOptions sharedOptions;
@@ -89,7 +84,7 @@ public Integer processCallCommand() throws Exception {
}
log.info("Fast-Scan args:");
- log.info(String.format("\tApplication: %s%n\tFile: %s%n\tsleep: %d%n", applicationName, filePath.getAbsolutePath(), sleepDuration));
+ log.info(String.format("\tApplication: %s%n\tFile: %s%n\tsleep: %d%n", applicationName, filePath.getAbsolutePath(), sharedOptions.getSleepDuration()));
String applicationGuid;
Thread shutdownHook = null;
@@ -106,7 +101,7 @@ public Integer processCallCommand() throws Exception {
log.info("About to trigger New workflow for: 'Fast-Scan'");
String sourcePath = uploadFile(app != null ? app.getGuid() : null);
- CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), sleepDuration);
+ CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), getSharedOptions().getSleepDuration());
if (app == null) {
applicationGuid = applicationService.onboardApplication(applicationName, domainName, getSharedOptions().isVerbose(), sourcePath);
log.info("Onboard Application job has started: application GUID= " + applicationGuid);
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/PublishToImagingCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/PublishToImagingCommand.java
index 7b91842e..b5f50700 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/PublishToImagingCommand.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/PublishToImagingCommand.java
@@ -3,6 +3,7 @@
import com.castsoftware.aip.console.tools.core.dto.ApplicationDto;
import com.castsoftware.aip.console.tools.core.dto.VersionDto;
import com.castsoftware.aip.console.tools.core.dto.VersionStatus;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException;
import com.castsoftware.aip.console.tools.core.services.ApplicationService;
import com.castsoftware.aip.console.tools.core.services.JobsService;
@@ -14,8 +15,8 @@
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
-import org.springframework.util.StringUtils;
import picocli.CommandLine;
import java.util.EnumSet;
@@ -80,7 +81,30 @@ protected Integer processCallCommand() throws Exception {
return Constants.RETURN_ONBOARD_VERSION_STATUS_INVALID;
}
- CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), 15);
+ CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), getSharedOptions().getSleepDuration());
+ //TODO: refactor after release to get separated workflows
+ if (applicationDto.isOnboarded()) {
+ log.info("Triggering Publish to Imaging for an application using Fast-Scan workflow.");
+ ScanAndReScanApplicationJobRequest.ScanAndReScanApplicationJobRequestBuilder requestBuilder = ScanAndReScanApplicationJobRequest.builder()
+ .appGuid(applicationDto.getGuid());
+ String targetNode = applicationDto.getTargetNode();
+ if (StringUtils.isNotEmpty(targetNode)) {
+ requestBuilder.targetNode(targetNode);
+ }
+ String caipVersion = applicationDto.getCaipVersion();
+ if (StringUtils.isNotEmpty(caipVersion)) {
+ requestBuilder.caipVersion(caipVersion);
+ }
+ requestBuilder.processImaging(true);
+
+ String appGuid = applicationService.runDeepAnalysis(requestBuilder.build(), cliLogPolling);
+ if (StringUtils.isEmpty(appGuid)) {
+ log.error("Something went wrong while Publishing to Imaging.");
+ return Constants.RETURN_JOB_FAILED;
+ }
+ return Constants.RETURN_OK;
+ }
+
String appGuid = applicationService.publishToImaging(applicationDto.getGuid(), cliLogPolling);
if (StringUtils.isEmpty(appGuid)) {
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SharedOptions.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SharedOptions.java
index 5c96488a..14bde5ea 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SharedOptions.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SharedOptions.java
@@ -30,6 +30,11 @@ public class SharedOptions {
+ " if specified without parameter: ${FALLBACK-VALUE}", fallbackValue = "true")
private boolean verbose = true;
+ @CommandLine.Option(names = {"--sleep-duration"},
+ description = "Number of seconds used to refresh the ongoing job status. The default value is: ${DEFAULT-VALUE}",
+ defaultValue = "10")
+ private long sleepDuration;
+
@CommandLine.Unmatched
private List unmatchedOptions;
@@ -103,6 +108,14 @@ public String getFullServerRootUrl() {
return serverRootUrl;
}
+ public long getSleepDuration() {
+ return sleepDuration;
+ }
+
+ public void setSleepDuration(long sleepDuration) {
+ this.sleepDuration = sleepDuration;
+ }
+
@Override
public String toString() {
return "SharedOptions{" +
@@ -112,7 +125,8 @@ public String toString() {
", username='" + username + '\'' +
", timeout='" + timeout + '\'' +
", unmatchedOptions=" + unmatchedOptions +
- ", log output= " + verbose +
+ ", log verbose= " + verbose +
+ ", sleep duration= " + sleepDuration +
'}';
}
}
diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java
index 1ae7470e..2ed4e9a4 100644
--- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java
+++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java
@@ -8,6 +8,7 @@
import com.castsoftware.aip.console.tools.core.dto.jobs.JobRequestBuilder;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobState;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobType;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.ApiCallException;
import com.castsoftware.aip.console.tools.core.exceptions.ApiKeyMissingException;
import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException;
@@ -17,6 +18,7 @@
import com.castsoftware.aip.console.tools.core.services.RestApiService;
import com.castsoftware.aip.console.tools.core.utils.Constants;
import com.castsoftware.aip.console.tools.core.utils.SemVerUtils;
+import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
@@ -154,8 +156,39 @@ public Integer call() throws Exception {
snapshotName = String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(new Date()));
}
- // Run snapshot
boolean forcedConsolidation = processImaging || consolidation;
+ //TODO: refactor after release to get separated workflows
+ if (app.isOnboarded()) {
+ log.info("Triggering snapshot for an application using Fast-Scan workflow.");
+ ScanAndReScanApplicationJobRequest.ScanAndReScanApplicationJobRequestBuilder requestBuilder = ScanAndReScanApplicationJobRequest.builder()
+ .appGuid(applicationGuid);
+ String targetNode = app.getTargetNode();
+ if (StringUtils.isNotEmpty(targetNode)) {
+ requestBuilder.targetNode(targetNode);
+ }
+ String caipVersion = app.getCaipVersion();
+ if (StringUtils.isNotEmpty(caipVersion)) {
+ requestBuilder.caipVersion(caipVersion);
+ }
+ if (StringUtils.isNotEmpty(snapshotName)) {
+ requestBuilder.snapshotName(snapshotName);
+ }
+
+ requestBuilder.processImaging(processImaging);
+ requestBuilder.publishToEngineering(forcedConsolidation);
+ //Should remains true to prevent deep-analyze to trigger analyze step when publis and imaging options are set false
+ requestBuilder.uploadApplication(true);
+
+ CliLogPollingProviderImpl cliLogPolling = new CliLogPollingProviderImpl(jobsService, getSharedOptions().isVerbose(), getSharedOptions().getSleepDuration());
+ String appGuid = applicationService.runDeepAnalysis(requestBuilder.build(), cliLogPolling);
+ if (StringUtils.isEmpty(appGuid)) {
+ log.error("Snapshot operating wasn't performed successfully. Toggle verbose ON or check CAST Console logs for more details.");
+ return Constants.RETURN_JOB_FAILED;
+ }
+ return Constants.RETURN_OK;
+ }
+
+ // Run snapshot in legacy workflow
JobRequestBuilder builder = JobRequestBuilder.newInstance(applicationGuid, null, JobType.ANALYZE, app.getCaipVersion())
.nodeName(app.getTargetNode())
.startStep(Constants.SNAPSHOT_STEP_NAME)
@@ -165,7 +198,7 @@ public Integer call() throws Exception {
.uploadApplication(true)
.snapshotDate(applicationService.getVersionDate(snapshotDateString))
.processImaging(processImaging)
- .uploadApplication(forcedConsolidation)
+ .uploadApplication(true)
.endStep(SemVerUtils.isNewerThan115(apiInfoDto.getApiVersionSemVer()) ?
Constants.UPLOAD_APP_SNAPSHOT : Constants.SNAPSHOT_INDICATOR);
diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/AipConsoleToolsCliBaseTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/AipConsoleToolsCliBaseTest.java
index 8dfdc342..f9e799eb 100644
--- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/AipConsoleToolsCliBaseTest.java
+++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/AipConsoleToolsCliBaseTest.java
@@ -10,6 +10,7 @@
import com.castsoftware.aip.console.tools.core.services.UploadService;
import com.castsoftware.aip.console.tools.core.utils.Constants;
import com.castsoftware.aip.console.tools.factories.SpringAwareCommandFactory;
+import lombok.extern.slf4j.Slf4j;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -31,6 +32,7 @@
import static org.mockito.Mockito.when;
+@Slf4j
public abstract class AipConsoleToolsCliBaseTest {
@Autowired
protected SpringAwareCommandFactory springAwareCommandFactory;
@@ -168,6 +170,7 @@ protected void runStringArgs(Callable command, String[] args) {
}
}
} catch (Throwable t) {
+ log.error(t.getMessage());
exitCode = Constants.UNKNOWN_ERROR;
}
}
diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/OnboardApplicationFastScanCommandIntegrationTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/OnboardApplicationFastScanCommandIntegrationTest.java
index 12b706a8..e6096e96 100644
--- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/OnboardApplicationFastScanCommandIntegrationTest.java
+++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/OnboardApplicationFastScanCommandIntegrationTest.java
@@ -149,7 +149,7 @@ public void testOnboardApplicationFastScan_OnboardingDisabled() throws Exception
runStringArgs(fastScanCommand, args);
CommandLine.Model.CommandSpec spec = cliToTest.getCommandSpec();
assertThat(spec, is(notNullValue()));
- assertThat(fastScanCommand.getSleepDuration(), is(1L)); //default value taken
+ assertThat(fastScanCommand.getSharedOptions().getSleepDuration(), is(10L)); //default value taken
assertThat(exitCode, is(Constants.RETURN_ONBOARD_APPLICATION_DISABLED));
}
@@ -185,7 +185,7 @@ public void testOnboardApplicationFastScan_WithoutExistingVersion() throws Excep
runStringArgs(fastScanCommand, args);
CommandLine.Model.CommandSpec spec = cliToTest.getCommandSpec();
assertThat(spec, is(notNullValue()));
- assertThat(fastScanCommand.getSleepDuration(), is(6L));
+ assertThat(fastScanCommand.getSharedOptions().getSleepDuration(), is(6L));
assertThat(exitCode, is(Constants.RETURN_OK));
}
diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/PublishToImagingCommandIntegrationTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/PublishToImagingCommandIntegrationTest.java
index 5f14aa7a..cf9fa1f2 100644
--- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/PublishToImagingCommandIntegrationTest.java
+++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/PublishToImagingCommandIntegrationTest.java
@@ -52,7 +52,7 @@ public void testPublishToImagingCommand_invalidParameter() throws Exception {
}
@Test
- public void testPublishToImagingCommand_OnboarApplicationSettingsOFF() throws Exception {
+ public void testPublishToImagingCommand_OnboardApplicationSettingsOFF() throws Exception {
String[] args = new String[]{"--apikey", TestConstants.TEST_API_KEY,
"--app-name", TestConstants.TEST_CREATRE_APP
};
diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java
index 47985f28..61874937 100644
--- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java
+++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java
@@ -1,17 +1,17 @@
package com.castsoftware.aip.console.tools;
import com.castsoftware.aip.console.tools.commands.SnapshotCommand;
+import com.castsoftware.aip.console.tools.core.dto.ApplicationDto;
import com.castsoftware.aip.console.tools.core.dto.VersionDto;
import com.castsoftware.aip.console.tools.core.dto.VersionStatus;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobExecutionDto;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobRequestBuilder;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobState;
-import com.castsoftware.aip.console.tools.core.dto.jobs.JobStatusWithSteps;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException;
import com.castsoftware.aip.console.tools.core.exceptions.JobServiceException;
-import com.castsoftware.aip.console.tools.core.exceptions.PackagePathInvalidException;
-import com.castsoftware.aip.console.tools.core.exceptions.UploadException;
import com.castsoftware.aip.console.tools.core.utils.Constants;
+import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -60,7 +60,7 @@ protected void cleanupTestCommand() {
}
@Test
- public void testSnapshotCommand_WhenAnalysisNotDone() throws ApplicationServiceException, UploadException, JobServiceException, PackagePathInvalidException {
+ public void testSnapshotCommand_WhenAnalysisNotDone() throws ApplicationServiceException {
boolean verbose = true;
String[] args = new String[]{"--apikey", TestConstants.TEST_API_KEY,
"--app-name=" + TestConstants.TEST_CREATRE_APP,
@@ -79,6 +79,63 @@ public void testSnapshotCommand_WhenAnalysisNotDone() throws ApplicationServiceE
assertThat(exitCode, is(Constants.RETURN_VERSION_WITH_ANALYSIS_DONE_NOT_FOUND));
}
+ @Test
+ public void testSnapshotCommand_WhenFastScanWorkFlow_JobFailed() throws ApplicationServiceException {
+ boolean verbose = true;
+ String[] args = new String[]{"--apikey", TestConstants.TEST_API_KEY,
+ "--app-name=" + TestConstants.TEST_CREATRE_APP,
+ "--version-name", TestConstants.TEST_VERSION_NAME,
+ "--snapshot-name", "SNAP-Name-here",
+ "--process-imaging"};
+
+ ApplicationDto applicationDto = ApplicationDto.builder()
+ .guid(TestConstants.TEST_APP_GUID)
+ .name(TestConstants.TEST_CREATRE_APP)
+ .onboarded(true)
+ .schemaPrefix("ShouldHave_One").build();
+
+ when(applicationService.getApplicationFromName(TestConstants.TEST_CREATRE_APP)).thenReturn(applicationDto);
+ VersionDto versionDto = new VersionDto();
+ versionDto.setName(TestConstants.TEST_VERSION_NAME);
+ versionDto.setStatus(VersionStatus.ANALYSIS_DONE);
+ when(applicationService.getApplicationVersion(TestConstants.TEST_APP_GUID)).thenReturn(Sets.newSet(versionDto));
+
+ runStringArgs(snapshotCommand, args);
+
+ CommandLine.Model.CommandSpec spec = cliToTest.getCommandSpec();
+ assertThat(spec, is(notNullValue()));
+ assertThat(exitCode, is(Constants.RETURN_JOB_FAILED));
+ }
+
+ @Test
+ public void testSnapshotCommand_WhenFastScanWorkFlow_JobSucceeded() throws ApplicationServiceException {
+ boolean verbose = true;
+ String[] args = new String[]{"--apikey", TestConstants.TEST_API_KEY,
+ "--app-name=" + TestConstants.TEST_CREATRE_APP,
+ "--version-name", TestConstants.TEST_VERSION_NAME,
+ "--snapshot-name", "SNAP-Name-here",
+ "--process-imaging"};
+
+ ApplicationDto applicationDto = ApplicationDto.builder()
+ .guid(TestConstants.TEST_APP_GUID)
+ .name(TestConstants.TEST_CREATRE_APP)
+ .onboarded(true)
+ .schemaPrefix("ShouldHave_One").build();
+
+ when(applicationService.getApplicationFromName(TestConstants.TEST_CREATRE_APP)).thenReturn(applicationDto);
+ VersionDto versionDto = new VersionDto();
+ versionDto.setName(TestConstants.TEST_VERSION_NAME);
+ versionDto.setStatus(VersionStatus.ANALYSIS_DONE);
+ when(applicationService.getApplicationVersion(TestConstants.TEST_APP_GUID)).thenReturn(Sets.newSet(versionDto));
+ when(applicationService.runDeepAnalysis(any(ScanAndReScanApplicationJobRequest.class), any(CliLogPollingProviderImpl.class))).thenReturn(TestConstants.TEST_APP_GUID);
+
+ runStringArgs(snapshotCommand, args);
+
+ CommandLine.Model.CommandSpec spec = cliToTest.getCommandSpec();
+ assertThat(spec, is(notNullValue()));
+ assertThat(exitCode, is(Constants.RETURN_OK));
+ }
+
@Test
public void testSnapshotCommand_JobCompleted() throws ApplicationServiceException, JobServiceException {
boolean verbose = true;
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/ScanAndReScanApplicationJobRequest.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/ScanAndReScanApplicationJobRequest.java
index 1151995f..8b3bc93b 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/ScanAndReScanApplicationJobRequest.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/ScanAndReScanApplicationJobRequest.java
@@ -1,5 +1,6 @@
package com.castsoftware.aip.console.tools.core.dto.jobs;
+import com.castsoftware.aip.console.tools.core.dto.ModuleGenerationType;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -24,6 +25,13 @@ public class ScanAndReScanApplicationJobRequest {
private String moduleGenerationType;
+ public ScanAndReScanApplicationJobRequest moduleGenerationType(ModuleGenerationType generationType) {
+ if (generationType != null && (generationType != ModuleGenerationType.FULL_CONTENT)) {
+ moduleGenerationType = generationType.toString();
+ }
+ return this;
+ }
+
@Override
public String toString() {
return "Request{" +
@@ -31,7 +39,11 @@ public String toString() {
", targetNode='" + targetNode + '\'' +
", caipVersion='" + caipVersion + '\'' +
", snapshotName='" + snapshotName + '\'' +
- ", moduleGenerationType='" + moduleGenerationType + '\'' +
+ ", runAnalysis='" + runAnalysis + '\'' +
+ ", uploadApplication='" + uploadApplication + '\'' +
+ ", publishToEngineering='" + publishToEngineering + '\'' +
+ ", publishToEngineering='" + publishToEngineering + '\'' +
+ ", processImaging='" + processImaging + '\'' +
'}';
}
}
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java
index 1c4aea6a..4479d686 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java
@@ -12,6 +12,7 @@
import com.castsoftware.aip.console.tools.core.dto.VersionStatus;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobRequestBuilder;
import com.castsoftware.aip.console.tools.core.dto.jobs.LogPollingProvider;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException;
import com.castsoftware.aip.console.tools.core.exceptions.JobServiceException;
import com.castsoftware.aip.console.tools.core.exceptions.PackagePathInvalidException;
@@ -74,9 +75,11 @@ String fastScan(String applicationGuid, String sourcePath, String versionName, D
void setEnableOnboarding(boolean enabled) throws ApplicationServiceException;
boolean isImagingAvailable() throws ApplicationServiceException;
-
+
String runDeepAnalysis(String applicationGuid, String targetNode, String caipVersion, String snapshotName, ModuleGenerationType moduleGenerationType, boolean verbose, LogPollingProvider logPollingProvider) throws ApplicationServiceException;
+ String runDeepAnalysis(ScanAndReScanApplicationJobRequest fastScanRequest, LogPollingProvider logPollingProvider) throws ApplicationServiceException;
+
/**
* Retrieve an application's GUID from the given application name.
*
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java
index 9191e9ea..36959b0a 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java
@@ -21,6 +21,7 @@
import com.castsoftware.aip.console.tools.core.dto.jobs.JobRequestBuilder;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobState;
import com.castsoftware.aip.console.tools.core.dto.jobs.LogPollingProvider;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.ApiCallException;
import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException;
import com.castsoftware.aip.console.tools.core.exceptions.JobServiceException;
@@ -52,7 +53,7 @@ public class ApplicationServiceImpl implements ApplicationService {
public ApplicationServiceImpl(RestApiService restApiService, JobsService jobsService) {
this.restApiService = restApiService;
- this.jobService = jobsService;
+ jobService = jobsService;
}
@Override
@@ -234,9 +235,29 @@ public String discoverApplication(String applicationGuid, String sourcePath, Str
@Override
public String runDeepAnalysis(String applicationGuid, String targetNode, String caipVersion, String snapshotName, ModuleGenerationType moduleGenerationType, boolean verbose, LogPollingProvider logPollingProvider) throws ApplicationServiceException {
+ ScanAndReScanApplicationJobRequest.ScanAndReScanApplicationJobRequestBuilder requestBuilder = ScanAndReScanApplicationJobRequest.builder()
+ .appGuid(applicationGuid);
+ if (StringUtils.isNotEmpty(targetNode)) {
+ requestBuilder.targetNode(targetNode);
+ }
+ if (StringUtils.isNotEmpty(caipVersion)) {
+ requestBuilder.caipVersion(caipVersion);
+ }
+ if (StringUtils.isNotEmpty(snapshotName)) {
+ requestBuilder.snapshotName(snapshotName);
+ }
+ //The module parameter should be left empty or null when dealing with full content
+ if (moduleGenerationType != null && (moduleGenerationType != ModuleGenerationType.FULL_CONTENT)) {
+ requestBuilder.moduleGenerationType(moduleGenerationType.toString());
+ }
+ return runDeepAnalysis(requestBuilder.build(), logPollingProvider);
+ }
+
+ @Override
+ public String runDeepAnalysis(ScanAndReScanApplicationJobRequest fastScanRequest, LogPollingProvider logPollingProvider) throws ApplicationServiceException {
log.log(Level.INFO, "Starting job to perform Deep Analysis action (Run Analysis) ");
try {
- String jobGuid = jobService.startDeepAnalysis(applicationGuid, targetNode, caipVersion, snapshotName, moduleGenerationType);
+ String jobGuid = jobService.startDeepAnalysis(fastScanRequest);
log.log(Level.INFO, "Deep Analysis running job GUID= " + jobGuid);
return logPollingProvider != null ? logPollingProvider.pollJobLog(jobGuid) : null;
} catch (JobServiceException e) {
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsService.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsService.java
index 084cd611..907d4773 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsService.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsService.java
@@ -6,6 +6,7 @@
import com.castsoftware.aip.console.tools.core.dto.jobs.JobRequestBuilder;
import com.castsoftware.aip.console.tools.core.dto.jobs.JobState;
import com.castsoftware.aip.console.tools.core.dto.jobs.LogContentDto;
+import com.castsoftware.aip.console.tools.core.dto.jobs.ScanAndReScanApplicationJobRequest;
import com.castsoftware.aip.console.tools.core.exceptions.JobServiceException;
import java.util.Date;
@@ -67,6 +68,8 @@ public interface JobsService {
String startDeepAnalysis(String applicationGuid, String nodeName, String caipVersion, String snapshotName, ModuleGenerationType moduleGenerationType) throws JobServiceException;
+ String startDeepAnalysis(ScanAndReScanApplicationJobRequest fastScanRequest) throws JobServiceException;
+
String startPublishToImaging(String applicationGuid, String nodeName, String caipVersion) throws JobServiceException;
/**
diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsServiceImpl.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsServiceImpl.java
index b980147f..49f53e07 100644
--- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsServiceImpl.java
+++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/JobsServiceImpl.java
@@ -56,7 +56,7 @@ public class JobsServiceImpl implements JobsService {
public JobsServiceImpl(RestApiService restApiService) {
this.restApiService = restApiService;
- this.pollingSleepDuration = POLL_SLEEP_DURATION;
+ pollingSleepDuration = POLL_SLEEP_DURATION;
}
public JobsServiceImpl(RestApiService restApiService, long pollingSleepDuration) {
@@ -208,10 +208,14 @@ public String startDeepAnalysis(String applicationGuid, String nodeName, String
if (moduleGenerationType != null && (moduleGenerationType != ModuleGenerationType.FULL_CONTENT)) {
requestBuilder.moduleGenerationType(moduleGenerationType.toString());
}
+ return startDeepAnalysis(requestBuilder.build());
+ }
- log.info("Job Parameters: " + requestBuilder.build().toString());
+ @Override
+ public String startDeepAnalysis(ScanAndReScanApplicationJobRequest fastScanRequest) throws JobServiceException {
+ log.fine("Job Parameters: " + fastScanRequest.toString());
try {
- SuccessfulJobStartDto jobStartDto = restApiService.postForEntity(ApiEndpointHelper.getDeepAnalysisEndPoint(), requestBuilder.build(), SuccessfulJobStartDto.class);
+ SuccessfulJobStartDto jobStartDto = restApiService.postForEntity(ApiEndpointHelper.getDeepAnalysisEndPoint(), fastScanRequest, SuccessfulJobStartDto.class);
return jobStartDto.getJobGuid();
} catch (ApiCallException e) {
log.log(Level.SEVERE, "Unable to perform ReScan application action (Run Analysis)", e);