@Override
    public Integer call() throws Exception {
        if (!CommandUtil.isInputValid(this)) {
            return ToolConstants.INVALID_INPUT_ERROR_CODE;
        }

        WorkflowContextBuilder builder = new WorkflowContextBuilder(appName);
        builder.withNamespace(namespace);
        builder.withAuthConfig(authConfigBuilder.getAuthConfig());
        WorkflowContext context = builder.get();
        if (!clusterValidator.validate(context)) {
            WorkflowLogger.logPersistedActivities();
            return ToolConstants.INVALID_INPUT_ERROR_CODE;
        }
        WorkflowLogger.info(ControllerActivity.WAITING_FOR_SERVICE_STATUS);

        WorkflowLogger.header(ControllerActivity.APP_NAME, appName);
        try {
            statusComponentInvoker.execute(context);

            Object statusAttr = context.getAttribute(
                    WorkflowConstants.DEPLOYMENT_STATUS_LIST);

            if (statusAttr == null) {
                WorkflowLogger.info(ControllerActivity.NO_SERVICE_DEPLOYED);
                return ToolConstants.HYSCALE_SUCCESS_CODE;
            }
            List<DeploymentStatus> deploymentStatusList = (List<DeploymentStatus>) statusAttr;

            if (deploymentStatusList.isEmpty()) {
                WorkflowLogger.info(ControllerActivity.NO_SERVICE_DEPLOYED);
                return ToolConstants.HYSCALE_SUCCESS_CODE;
            }

            List<String[]> rowList = new ArrayList<String[]>();
            boolean isLarge = false;
            for (DeploymentStatus deploymentStatus : deploymentStatusList) {
                if (deploymentStatus == null) {
                    continue;
                }
                if (StringUtils.isNotBlank(deploymentStatus.getServiceAddress())) {
                    isLarge = isLarge ? isLarge : deploymentStatus.getServiceAddress().length() > TableFields.SERVICE_ADDRESS.getLength();
                }
                String[] tableRow = StatusUtil.getRowData(deploymentStatus);
                rowList.add(tableRow);
            }
            TableFormatter table = StatusUtil.getStatusTable(isLarge);
            rowList.forEach(each -> table.addRow(each));
            WorkflowLogger.logTable(table);
        } catch (HyscaleException e) {
            WorkflowLogger.error(ControllerActivity.ERROR_WHILE_FETCHING_STATUS, e.toString());
            logger.error("Error while getting app {} status in namespace {}", appName, namespace, e);
            throw e;
        } finally {
            WorkflowLogger.footer();
        }
        return ToolConstants.HYSCALE_SUCCESS_CODE;
    }
This class executes the 'hyscale get app status' command
It is a sub-command of the 'hyscale get app' command
Options:
 namespace - namespace in which the app is deployed
 appName - name of the app
<p>
Fetches the deployment status {@link DeploymentStatus} of each service in the app
Displays app data in a table format to the user.
@see HyscaleGetAppsCommand
Every command/sub-command has to implement the {@link Callable} so that
whenever the command is executed the {@link #call()}
method will be invoked
workflow-controller/controller-service/src/main/java/io/hyscale/controller/commands/get/app/HyscaleAppStatusCommand.java