Skip to content

Commit

Permalink
feat: Add fcli ssc appversion refresh-metrics command (fixes #335)
Browse files Browse the repository at this point in the history
  • Loading branch information
rsenden committed Jul 17, 2023
1 parent 70dceab commit 04ac595
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
* @author rsenden
*/
public class SSCOutputHelperMixins {
public static class AppVersionRefreshMettrics extends OutputHelperMixins.TableNoQuery {
public static final String CMD_NAME = "refresh-metrics";
}

public static class ArtifactApprove extends OutputHelperMixins.TableNoQuery {
public static final String CMD_NAME = "approve";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
SSCAppVersionDeleteCommand.class,
SSCAppVersionGetCommand.class,
SSCAppVersionListCommand.class,
SSCAppVersionRefreshMetricsCommand.class,
SSCAppVersionUpdateCommand.class
}
)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*******************************************************************************
* Copyright 2021, 2023 Open Text.
*
* The only warranties for products and services of Open Text
* and its affiliates and licensors ("Open Text") are as may
* be set forth in the express warranty statements accompanying
* such products and services. Nothing herein should be construed
* as constituting an additional warranty. Open Text shall not be
* liable for technical or editorial errors or omissions contained
* herein. The information contained herein is subject to change
* without notice.
*******************************************************************************/
package com.fortify.cli.ssc.appversion.cli.cmd;

import com.fasterxml.jackson.databind.JsonNode;
import com.fortify.cli.common.output.transform.IActionCommandResultSupplier;
import com.fortify.cli.common.output.transform.IRecordTransformer;
import com.fortify.cli.ssc._common.output.cli.cmd.AbstractSSCJsonNodeOutputCommand;
import com.fortify.cli.ssc._common.output.cli.mixin.SSCOutputHelperMixins;
import com.fortify.cli.ssc.appversion.cli.mixin.SSCAppVersionBulkEmbedMixin;
import com.fortify.cli.ssc.appversion.cli.mixin.SSCAppVersionResolverMixin;
import com.fortify.cli.ssc.appversion.helper.SSCAppVersionHelper;

import kong.unirest.UnirestInstance;
import lombok.Getter;
import picocli.CommandLine.Command;
import picocli.CommandLine.Mixin;

@Command(name = SSCOutputHelperMixins.AppVersionRefreshMettrics.CMD_NAME)
public class SSCAppVersionRefreshMetricsCommand extends AbstractSSCJsonNodeOutputCommand implements IRecordTransformer, IActionCommandResultSupplier {
@Getter @Mixin private SSCOutputHelperMixins.AppVersionRefreshMettrics outputHelper;
@Mixin private SSCAppVersionResolverMixin.PositionalParameter appVersionResolver;
@Mixin private SSCAppVersionBulkEmbedMixin bulkEmbedMixin;

@Override
public JsonNode getJsonNode(UnirestInstance unirest) {
var descriptor = appVersionResolver.getAppVersionDescriptor(unirest);
return descriptor.asObjectNode()
.put(IActionCommandResultSupplier.actionFieldName, SSCAppVersionHelper.refreshMetrics(unirest, descriptor));
}

@Override
public JsonNode transformRecord(JsonNode record) {
return SSCAppVersionHelper.renameFields(record);
}

@Override
public String getActionCommandResult() {
return "REFRESH_REQUESTED";
}

@Override
public boolean isSingular() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class SSCAppVersionDescriptor extends JsonNodeHolder {
private String applicationName;
@JsonProperty("id") private String versionId;
@JsonProperty("name") private String versionName;
private boolean refreshRequired;

@JsonProperty("project")
public void unpackProject(Map<String, String> project) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,15 @@

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.formkiq.graalvm.annotations.Reflectable;
import com.fortify.cli.common.json.JsonHelper;
import com.fortify.cli.common.output.transform.fields.RenameFieldsTransformer;
import com.fortify.cli.ssc._common.rest.SSCUrls;

import kong.unirest.GetRequest;
import kong.unirest.UnirestInstance;
import lombok.AllArgsConstructor;
import lombok.Data;

public class SSCAppVersionHelper {
public static final JsonNode renameFields(JsonNode record) {
Expand Down Expand Up @@ -70,4 +74,26 @@ private static final SSCAppVersionDescriptor getOptionalDescriptor(GetRequest re
}
return versions.size()==0 ? null : JsonHelper.treeToValue(versions.get(0), SSCAppVersionDescriptor.class);
}

public static final String refreshMetrics(UnirestInstance unirest, SSCAppVersionDescriptor descriptor) {
if ( !descriptor.isRefreshRequired() ) {
return "NO_REFRESH_REQUIRED";
} else {
unirest.post(SSCUrls.PROJECT_VERSIONS_ACTION_REFRESH)
.body(new SSCAppVersionRefreshRequest(descriptor.getVersionId()))
.asObject(ObjectNode.class)
.getBody();
return "REFRESH_REQUESTED";
}
}

@Data
@Reflectable @AllArgsConstructor
private static final class SSCAppVersionRefreshRequest {
private final String[] projectVersionIds;

public SSCAppVersionRefreshRequest(String appVersionId) {
this.projectVersionIds = new String[] {appVersionId};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ fcli.ssc.appversion.list.embed = Embed extra application version data. Allowed v
Apart from potentially including the extra data in the output, this allows for advanced queries like the \
following to query application versions by application version attribute values: \
'attrValuesByName["Interfaces"].contains("Interactive Console")'.
fcli.ssc.appversion.refresh-metrics.usage.header = Refresh application version metrics.
fcli.ssc.appversion.refresh-metrics.usage.description = This command allows for refreshing SSC application \
version metrics, similar to the little 'refresh' button shown on the SSC application version page \
in case a refresh is required/pending.
fcli.ssc.appversion.update.usage.header = Update an application version.
fcli.ssc.appversion.update.name = Update application version name.
fcli.ssc.appversion.update.description = Update application version description.
Expand Down

0 comments on commit 04ac595

Please sign in to comment.