This is an automated email from the ASF dual-hosted git repository.
sdanilov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 61c8cb26e6 IGNITE-17786 Add --verbose option to all commands (#1249)
61c8cb26e6 is described below
commit 61c8cb26e6d02c06dfb0ade9d4bf032503e3d2d1
Author: Vadim Pakhnushev <[email protected]>
AuthorDate: Wed Nov 2 08:42:32 2022 +0300
IGNITE-17786 Add --verbose option to all commands (#1249)
---
.../internal/cli/call/cluster/ClusterInitCall.java | 5 +-
.../cli/call/cluster/status/ClusterStatusCall.java | 4 +-
.../call/configuration/ClusterConfigShowCall.java | 5 +-
.../configuration/ClusterConfigUpdateCall.java | 5 +-
.../cli/call/configuration/NodeConfigShowCall.java | 5 +-
.../call/configuration/NodeConfigUpdateCall.java | 5 +-
.../cli/call/node/status/NodeStatusCall.java | 4 +-
.../cli/call/node/version/NodeVersionCall.java | 4 +-
.../ignite/internal/cli/commands/BaseCommand.java | 3 +
.../commands/cliconfig/CliConfigGetCommand.java | 1 +
.../cliconfig/CliConfigGetReplCommand.java | 1 +
.../commands/cliconfig/CliConfigSetCommand.java | 1 +
.../cliconfig/CliConfigSetReplCommand.java | 1 +
.../commands/cliconfig/CliConfigShowCommand.java | 1 +
.../cliconfig/CliConfigShowReplCommand.java | 1 +
.../profile/CliConfigProfileActivateCommand.java | 1 +
.../profile/CliConfigProfileCreateCommand.java | 1 +
.../profile/CliConfigProfileListCommand.java | 1 +
.../profile/CliConfigProfileShowCommand.java | 1 +
.../cluster/config/ClusterConfigShowCommand.java | 1 +
.../config/ClusterConfigShowReplCommand.java | 1 +
.../cluster/config/ClusterConfigUpdateCommand.java | 1 +
.../config/ClusterConfigUpdateReplCommand.java | 1 +
.../commands/cluster/init/ClusterInitCommand.java | 1 +
.../cluster/init/ClusterInitReplCommand.java | 1 +
.../cluster/status/ClusterStatusCommand.java | 1 +
.../cluster/status/ClusterStatusReplCommand.java | 1 +
.../cli/commands/connect/ConnectCommand.java | 1 +
.../cli/commands/connect/DisconnectCommand.java | 1 +
.../node/config/NodeConfigShowCommand.java | 1 +
.../node/config/NodeConfigShowReplCommand.java | 1 +
.../node/config/NodeConfigUpdateCommand.java | 1 +
.../node/config/NodeConfigUpdateReplCommand.java | 1 +
.../node/metric/NodeMetricDisableCommand.java | 1 +
.../node/metric/NodeMetricDisableReplCommand.java | 1 +
.../node/metric/NodeMetricEnableCommand.java | 1 +
.../node/metric/NodeMetricEnableReplCommand.java | 1 +
.../node/metric/NodeMetricListCommand.java | 1 +
.../commands/node/status/NodeStatusCommand.java | 1 +
.../node/status/NodeStatusReplCommand.java | 1 +
.../commands/node/version/NodeVersionCommand.java | 1 +
.../node/version/NodeVersionReplCommand.java | 1 +
.../internal/cli/commands/sql/SqlCommand.java | 1 +
.../internal/cli/commands/sql/SqlReplCommand.java | 2 +
.../commands/topology/LogicalTopologyCommand.java | 1 +
.../commands/topology/PhysicalTopologyCommand.java | 1 +
.../internal/cli/config/ini/IniConfigManager.java | 6 +-
.../cli/core/call/CallExecutionPipeline.java | 31 ++++-
.../ClusterNotInitializedExceptionHandler.java | 1 +
.../handler/IgniteCliApiExceptionHandler.java | 6 +-
.../exception/handler/SqlExceptionHandler.java | 6 +-
.../cli/core/flow/builder/FlowBuilder.java | 8 ++
.../cli/core/flow/builder/FlowBuilderImpl.java | 27 ++++-
.../cli/core/style/component/ErrorUiComponent.java | 39 ++++++-
.../ignite/internal/cli/logger/CliLoggers.java | 126 +++++++++++++++++++++
.../ignite/internal/cli/logger/HttpLogging.java | 64 +++++++++++
.../internal/cli/commands/flow/FlowTest.java | 36 +++++-
.../ignite/internal/cli/commands/flow/StrCall.java | 7 +-
.../internal/cli/commands/flow/StrCallInput.java | 28 -----
.../internal/cli/core/call/PipelineTest.java | 52 +++++++++
.../flow => core/call}/ThrowingStrCall.java | 11 +-
.../exception}/TestExceptionHandler.java | 13 ++-
.../internal/cli/logger/HttpLoggingTest.java | 63 +++++++++++
63 files changed, 510 insertions(+), 92 deletions(-)
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
index cc7efae316..456e7ee024 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/ClusterInitCall.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterManagementApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.InitCommand;
@@ -50,8 +49,6 @@ public class ClusterInitCall implements
Call<ClusterInitCallInput, String> {
}
private ClusterManagementApi createApiClient(ClusterInitCallInput input) {
- ApiClient client = Configuration.getDefaultApiClient();
- client.setBasePath(input.getClusterUrl());
- return new ClusterManagementApi(client);
+ return new
ClusterManagementApi(Configuration.getDefaultApiClient().setBasePath(input.getClusterUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
index b1e624765b..dbcdce5e6c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/status/ClusterStatusCall.java
@@ -26,8 +26,8 @@ import
org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterManagementApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
+import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.ClusterState;
/**
@@ -72,6 +72,6 @@ public class ClusterStatusCall implements Call<UrlCallInput,
ClusterStatus> {
}
private ClusterState fetchClusterState(String url) throws ApiException {
- return new ClusterManagementApi(new
ApiClient().setBasePath(url)).clusterState();
+ return new
ClusterManagementApi(Configuration.getDefaultApiClient().setBasePath(url)).clusterState();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
index a88dda16a3..80cadbb91c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigShowCall.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterConfigurationApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
import org.apache.ignite.rest.client.invoker.Configuration;
@@ -51,8 +50,6 @@ public class ClusterConfigShowCall implements
Call<ClusterConfigShowCallInput, J
}
private ClusterConfigurationApi createApiClient(ClusterConfigShowCallInput
input) {
- ApiClient client = Configuration.getDefaultApiClient();
- client.setBasePath(input.getClusterUrl());
- return new ClusterConfigurationApi(client);
+ return new
ClusterConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getClusterUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
index c48f06327d..5e6b9b7453 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/ClusterConfigUpdateCall.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.ClusterConfigurationApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
import org.apache.ignite.rest.client.invoker.Configuration;
@@ -50,8 +49,6 @@ public class ClusterConfigUpdateCall implements
Call<ClusterConfigUpdateCallInpu
}
private ClusterConfigurationApi
createApiClient(ClusterConfigUpdateCallInput input) {
- ApiClient client = Configuration.getDefaultApiClient();
- client.setBasePath(input.getClusterUrl());
- return new ClusterConfigurationApi(client);
+ return new
ClusterConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getClusterUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
index 505c065d6b..bc7f0e9d8d 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigShowCall.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeConfigurationApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
import org.apache.ignite.rest.client.invoker.Configuration;
@@ -51,8 +50,6 @@ public class NodeConfigShowCall implements
Call<NodeConfigShowCallInput, JsonStr
}
private NodeConfigurationApi createApiClient(NodeConfigShowCallInput
input) {
- ApiClient client = Configuration.getDefaultApiClient();
- client.setBasePath(input.getNodeUrl());
- return new NodeConfigurationApi(client);
+ return new
NodeConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getNodeUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
index 94d4b5ccc2..d4a20d1969 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/configuration/NodeConfigUpdateCall.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeConfigurationApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
import org.apache.ignite.rest.client.invoker.Configuration;
@@ -50,8 +49,6 @@ public class NodeConfigUpdateCall implements
Call<NodeConfigUpdateCallInput, Str
}
private NodeConfigurationApi createApiClient(NodeConfigUpdateCallInput
input) {
- ApiClient client = Configuration.getDefaultApiClient();
- client.setBasePath(input.getNodeUrl());
- return new NodeConfigurationApi(client);
+ return new
NodeConfigurationApi(Configuration.getDefaultApiClient().setBasePath(input.getNodeUrl()));
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
index 7e179d7f93..9da964f5d4 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/status/NodeStatusCall.java
@@ -24,8 +24,8 @@ import
org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeManagementApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
+import org.apache.ignite.rest.client.invoker.Configuration;
import org.apache.ignite.rest.client.model.NodeState;
/**
@@ -51,6 +51,6 @@ public class NodeStatusCall implements Call<UrlCallInput,
NodeStatus> {
}
private NodeState fetchNodeState(String url) throws ApiException {
- return new NodeManagementApi(new
ApiClient().setBasePath(url)).nodeState();
+ return new
NodeManagementApi(Configuration.getDefaultApiClient().setBasePath(url)).nodeState();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
index 619f86ba70..4ffb932121 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/node/version/NodeVersionCall.java
@@ -24,8 +24,8 @@ import
org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
import org.apache.ignite.internal.cli.core.call.UrlCallInput;
import org.apache.ignite.internal.cli.core.exception.IgniteCliApiException;
import org.apache.ignite.rest.client.api.NodeManagementApi;
-import org.apache.ignite.rest.client.invoker.ApiClient;
import org.apache.ignite.rest.client.invoker.ApiException;
+import org.apache.ignite.rest.client.invoker.Configuration;
/** Call to get node version. */
@Singleton
@@ -40,6 +40,6 @@ public class NodeVersionCall implements Call<UrlCallInput,
String> {
}
private String getNodeVersion(String url) throws ApiException {
- return new NodeManagementApi(new
ApiClient().setBasePath(url)).nodeVersion();
+ return new
NodeManagementApi(Configuration.getDefaultApiClient().setBasePath(url)).nodeVersion();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/BaseCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/BaseCommand.java
index f375068158..e3e919cef9 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/BaseCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/BaseCommand.java
@@ -29,6 +29,9 @@ public abstract class BaseCommand {
@Option(names = {"-h", "--help"}, usageHelp = true, description = "Show
this help message and exit.")
protected boolean usageHelpRequested;
+ @Option(names = {"-v", "--verbose"}, description = "Show additional
information.")
+ protected boolean verbose;
+
@Spec
protected CommandSpec spec;
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommand.java
index c5e213203f..1250fd62b6 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetCommand.java
@@ -50,6 +50,7 @@ public class CliConfigGetCommand extends BaseCommand
implements Callable<Integer
.profileName(profileName.getProfileName())::build)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetReplCommand.java
index e975668c5a..c164b2a600 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigGetReplCommand.java
@@ -44,6 +44,7 @@ public class CliConfigGetReplCommand extends BaseCommand
implements Callable<Int
.key(key)::build)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetCommand.java
index 6849fa4aef..0425cb528e 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetCommand.java
@@ -51,6 +51,7 @@ public class CliConfigSetCommand extends BaseCommand
implements Callable<Integer
.profileName(profileName.getProfileName())::build)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetReplCommand.java
index d0f3f7a03b..cc51a5da31 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigSetReplCommand.java
@@ -45,6 +45,7 @@ public class CliConfigSetReplCommand extends BaseCommand
implements Callable<Int
.parameters(parameters)::build)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowCommand.java
index 41a6314903..a6dd786cee 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowCommand.java
@@ -46,6 +46,7 @@ public class CliConfigShowCommand extends BaseCommand
implements Callable<Intege
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new ProfileDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowReplCommand.java
index 9a40f49fbd..a10b012d3e 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/CliConfigShowReplCommand.java
@@ -41,6 +41,7 @@ public class CliConfigShowReplCommand extends BaseCommand
implements Callable<In
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new ProfileDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileActivateCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileActivateCommand.java
index 9784d76391..a5b5feeb88 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileActivateCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileActivateCommand.java
@@ -43,6 +43,7 @@ public class CliConfigProfileActivateCommand extends
BaseCommand implements Call
.inputProvider(() -> new StringCallInput(profileName))
.errOutput(spec.commandLine().getErr())
.output(spec.commandLine().getOut())
+ .verbose(verbose)
.build().runPipeline();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileCreateCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileCreateCommand.java
index 057497a476..594120d149 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileCreateCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileCreateCommand.java
@@ -53,6 +53,7 @@ public class CliConfigProfileCreateCommand extends
BaseCommand implements Callab
.activate(activate)::build)
.errOutput(spec.commandLine().getErr())
.output(spec.commandLine().getOut())
+ .verbose(verbose)
.build().runPipeline();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileListCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileListCommand.java
index 93300b9494..f18dda2c1b 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileListCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileListCommand.java
@@ -42,6 +42,7 @@ public class CliConfigProfileListCommand extends BaseCommand
implements Callable
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new ProfileListDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileShowCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileShowCommand.java
index e5ef52f884..b1f21bb8a3 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileShowCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cliconfig/profile/CliConfigProfileShowCommand.java
@@ -40,6 +40,7 @@ public class CliConfigProfileShowCommand extends BaseCommand
implements Callable
.inputProvider(EmptyCallInput::new)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowCommand.java
index 6c80a5df16..6f02941981 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowCommand.java
@@ -59,6 +59,7 @@ public class ClusterConfigShowCommand extends BaseCommand
implements Callable<In
.exceptionHandler(new ClusterNotInitializedExceptionHandler(
"Cannot show cluster config", "ignite cluster init"
))
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowReplCommand.java
index e105bb0527..2fb643747c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigShowReplCommand.java
@@ -58,6 +58,7 @@ public class ClusterConfigShowReplCommand extends BaseCommand
implements Runnabl
.map(this::configShowCallInput)
.then(Flows.fromCall(call))
.exceptionHandler(new
ClusterNotInitializedExceptionHandler("Cannot show cluster config", "cluster
init"))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateCommand.java
index fc4e0892a3..1b41c0629c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateCommand.java
@@ -55,6 +55,7 @@ public class ClusterConfigUpdateCommand extends BaseCommand
implements Callable<
.exceptionHandler(new ClusterNotInitializedExceptionHandler(
"Cannot update cluster config", "ignite cluster init"
))
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateReplCommand.java
index 516078d64e..82218cf540 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/config/ClusterConfigUpdateReplCommand.java
@@ -55,6 +55,7 @@ public class ClusterConfigUpdateReplCommand extends
BaseCommand implements Runna
.map(this::configUpdateCallInput)
.then(Flows.fromCall(call))
.exceptionHandler(new
ClusterNotInitializedExceptionHandler("Cannot update cluster config", "cluster
init"))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitCommand.java
index 9dd25accb2..045a69ec46 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitCommand.java
@@ -49,6 +49,7 @@ public class ClusterInitCommand extends BaseCommand
implements Callable<Integer>
.inputProvider(this::buildCallInput)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitReplCommand.java
index 43e6b70bc3..26bcec55a9 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/init/ClusterInitReplCommand.java
@@ -52,6 +52,7 @@ public class ClusterInitReplCommand extends BaseCommand
implements Runnable {
question.askQuestionIfNotConnected(clusterUrl.getClusterUrl())
.map(this::buildCallInput)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusCommand.java
index 74f51fa33c..928638f754 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusCommand.java
@@ -50,6 +50,7 @@ public class ClusterStatusCommand extends BaseCommand
implements Callable<Intege
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new ClusterStatusDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusReplCommand.java
index 7aab07bf24..6d86df83ed 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/cluster/status/ClusterStatusReplCommand.java
@@ -48,6 +48,7 @@ public class ClusterStatusReplCommand extends BaseCommand
implements Runnable {
question.askQuestionIfNotConnected(clusterUrl.getClusterUrl())
.map(UrlCallInput::new)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/ConnectCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/ConnectCommand.java
index 38aa97c2c7..536b5e872a 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/ConnectCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/ConnectCommand.java
@@ -49,6 +49,7 @@ public class ConnectCommand extends BaseCommand implements
Runnable {
.inputProvider(() -> new ConnectCallInput(nodeUrl.toString()))
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/DisconnectCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/DisconnectCommand.java
index 4b78de3146..4b35ae269b 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/DisconnectCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/connect/DisconnectCommand.java
@@ -39,6 +39,7 @@ public class DisconnectCommand extends BaseCommand implements
Runnable {
.inputProvider(EmptyCallInput::new)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowCommand.java
index 039fb9a8a1..27c66b620f 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowCommand.java
@@ -53,6 +53,7 @@ public class NodeConfigShowCommand extends BaseCommand
implements Callable<Integ
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new JsonDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowReplCommand.java
index 5e24c35a3f..7d876f0c98 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigShowReplCommand.java
@@ -53,6 +53,7 @@ public class NodeConfigShowReplCommand extends BaseCommand
implements Runnable {
question.askQuestionIfNotConnected(nodeUrl.getNodeUrl())
.map(this::nodeConfigShowCallInput)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateCommand.java
index 6088c80764..bc2ba03f68 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateCommand.java
@@ -51,6 +51,7 @@ public class NodeConfigUpdateCommand extends BaseCommand
implements Callable<Int
.inputProvider(this::buildCallInput)
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateReplCommand.java
index 2fcc176d18..03dc2635d4 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/config/NodeConfigUpdateReplCommand.java
@@ -53,6 +53,7 @@ public class NodeConfigUpdateReplCommand extends BaseCommand
implements Runnable
question.askQuestionIfNotConnected(nodeUrl.getNodeUrl())
.map(this::nodeConfigUpdateCallInput)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableCommand.java
index 7b69bad6a6..fdefe92bef 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableCommand.java
@@ -47,6 +47,7 @@ public class NodeMetricDisableCommand extends BaseCommand
implements Callable<In
.inputProvider(() ->
metricSource.buildDisableCallInput(nodeUrl.getNodeUrl()))
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableReplCommand.java
index 3a4c97735f..c549fe4747 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricDisableReplCommand.java
@@ -48,6 +48,7 @@ public class NodeMetricDisableReplCommand extends BaseCommand
implements Runnabl
question.askQuestionIfNotConnected(nodeUrl.getNodeUrl())
.map(metricSource::buildDisableCallInput)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableCommand.java
index 5ab69a5bed..efd67828d8 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableCommand.java
@@ -47,6 +47,7 @@ public class NodeMetricEnableCommand extends BaseCommand
implements Callable<Int
.inputProvider(() ->
metricSource.buildEnableCallInput(nodeUrl.getNodeUrl()))
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableReplCommand.java
index 09fd277774..290d2f929f 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricEnableReplCommand.java
@@ -48,6 +48,7 @@ public class NodeMetricEnableReplCommand extends BaseCommand
implements Runnable
question.askQuestionIfNotConnected(nodeUrl.getNodeUrl())
.map(metricSource::buildEnableCallInput)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricListCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricListCommand.java
index 278c26a781..adfe1ce727 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricListCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/metric/NodeMetricListCommand.java
@@ -46,6 +46,7 @@ public class NodeMetricListCommand extends BaseCommand
implements Callable<Integ
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new MetricListDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusCommand.java
index 0030c804e6..ae27e8ea99 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusCommand.java
@@ -48,6 +48,7 @@ public class NodeStatusCommand extends BaseCommand implements
Callable<Integer>
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new NodeStatusDecorator())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusReplCommand.java
index 2beb29b0a4..fb1c202568 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/status/NodeStatusReplCommand.java
@@ -48,6 +48,7 @@ public class NodeStatusReplCommand extends BaseCommand
implements Runnable {
question.askQuestionIfNotConnected(nodeUrl.getNodeUrl())
.map(UrlCallInput::new)
.then(Flows.fromCall(call))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionCommand.java
index 14387ef28e..a2bd318e71 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionCommand.java
@@ -43,6 +43,7 @@ public class NodeVersionCommand extends BaseCommand
implements Callable<Integer>
.inputProvider(() -> new UrlCallInput(nodeUrl.getNodeUrl()))
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionReplCommand.java
index 326080bea6..69006b9175 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/node/version/NodeVersionReplCommand.java
@@ -45,6 +45,7 @@ public class NodeVersionReplCommand extends BaseCommand
implements Runnable {
question.askQuestionIfNotConnected(nodeUrl.getNodeUrl())
.map(UrlCallInput::new)
.then(Flows.fromCall(nodeVersionCall))
+ .verbose(verbose)
.print()
.start();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
index 1a7b351b6c..f853c2b714 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlCommand.java
@@ -83,6 +83,7 @@ public class SqlCommand extends BaseCommand implements
Callable<Integer> {
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new SqlQueryResultDecorator(tableDecorator))
+ .verbose(verbose)
.build().runPipeline();
} catch (SQLException e) {
return new
SqlExceptionHandler().handle(ExceptionWriter.fromPrintWriter(spec.commandLine().getErr()),
e);
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
index 36938b5b6b..9dfde2f49f 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/sql/SqlReplCommand.java
@@ -116,6 +116,7 @@ public class SqlReplCommand extends BaseCommand implements
Runnable {
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(new SqlQueryResultDecorator(tableDecorator))
+ .verbose(verbose)
.build();
}
@@ -127,6 +128,7 @@ public class SqlReplCommand extends BaseCommand implements
Runnable {
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.exceptionHandlers(exceptionHandlers)
+ .verbose(verbose)
.build();
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/LogicalTopologyCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/LogicalTopologyCommand.java
index 0f09ee89be..ac3342edfe 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/LogicalTopologyCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/LogicalTopologyCommand.java
@@ -58,6 +58,7 @@ public class LogicalTopologyCommand extends BaseCommand
implements Callable<Inte
.exceptionHandler(new ClusterNotInitializedExceptionHandler(
"Cannot show logical topology", "ignite cluster init"
))
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/PhysicalTopologyCommand.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/PhysicalTopologyCommand.java
index 0c6ed08a8d..4bf9fdf704 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/PhysicalTopologyCommand.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/commands/topology/PhysicalTopologyCommand.java
@@ -54,6 +54,7 @@ public class PhysicalTopologyCommand extends BaseCommand
implements Callable<Int
.output(spec.commandLine().getOut())
.errOutput(spec.commandLine().getErr())
.decorator(topologyDecorator)
+ .verbose(verbose)
.build()
.runPipeline();
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
index 9d747a6e82..89070121ed 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniConfigManager.java
@@ -29,14 +29,14 @@ import
org.apache.ignite.internal.cli.config.ConfigInitializationException;
import org.apache.ignite.internal.cli.config.ConfigManager;
import org.apache.ignite.internal.cli.config.Profile;
import org.apache.ignite.internal.cli.config.ProfileNotFoundException;
+import org.apache.ignite.internal.cli.logger.CliLoggers;
import org.apache.ignite.internal.logger.IgniteLogger;
-import org.apache.ignite.internal.logger.Loggers;
/**
* Implementation of {@link ConfigManager} based on {@link IniFile}.
*/
public class IniConfigManager implements ConfigManager {
- private static final IgniteLogger log =
Loggers.forClass(IniConfigManager.class);
+ private static final IgniteLogger LOG =
CliLoggers.forClass(IniConfigManager.class);
private static final String DEFAULT_PROFILE_NAME = "default";
@@ -55,7 +55,7 @@ public class IniConfigManager implements ConfigManager {
configFile = new IniFile(file);
findCurrentProfileName(configFile);
} catch (IOException | NoSuchElementException e) {
- log.warn("User config is corrupted or doesn't exist.", e);
+ LOG.warn("User config is corrupted or doesn't exist.", e);
configFile = createDefaultConfig(file);
}
this.configFile = configFile;
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/call/CallExecutionPipeline.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/call/CallExecutionPipeline.java
index 05fb1109d2..5d265b0d87 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/call/CallExecutionPipeline.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/call/CallExecutionPipeline.java
@@ -28,6 +28,7 @@ import
org.apache.ignite.internal.cli.core.exception.ExceptionHandlers;
import org.apache.ignite.internal.cli.core.exception.ExceptionWriter;
import
org.apache.ignite.internal.cli.core.exception.handler.DefaultExceptionHandlers;
import org.apache.ignite.internal.cli.decorators.DefaultDecorator;
+import org.apache.ignite.internal.cli.logger.CliLoggers;
/**
* Call execution pipeline.
@@ -54,18 +55,24 @@ public class CallExecutionPipeline<I extends CallInput, T> {
/** Provider for call's input. */
private final Supplier<I> inputProvider;
+ /** If {@code true}, debug output will be printed to console. */
+ private final boolean verbose;
+
private CallExecutionPipeline(Call<I, T> call,
PrintWriter output,
PrintWriter errOutput,
ExceptionHandlers exceptionHandlers,
Decorator<T, TerminalOutput> decorator,
- Supplier<I> inputProvider) {
+ Supplier<I> inputProvider,
+ boolean verbose
+ ) {
this.call = call;
this.output = output;
this.exceptionHandlers = exceptionHandlers;
this.errOutput = errOutput;
this.decorator = decorator;
this.inputProvider = inputProvider;
+ this.verbose = verbose;
}
/**
@@ -83,6 +90,19 @@ public class CallExecutionPipeline<I extends CallInput, T> {
* @return exit code.
*/
public int runPipeline() {
+ try {
+ if (verbose) {
+ CliLoggers.startOutputRedirect(errOutput);
+ }
+ return runPipelineInternal();
+ } finally {
+ if (verbose) {
+ CliLoggers.stopOutputRedirect();
+ }
+ }
+ }
+
+ private int runPipelineInternal() {
I callInput = inputProvider.get();
CallOutput<T> callOutput = call.execute(callInput);
@@ -113,6 +133,8 @@ public class CallExecutionPipeline<I extends CallInput, T> {
private Decorator<T, TerminalOutput> decorator = new
DefaultDecorator<>();
+ private boolean verbose;
+
public CallExecutionPipelineBuilder(Call<I, T> call) {
this.call = call;
}
@@ -155,8 +177,13 @@ public class CallExecutionPipeline<I extends CallInput, T>
{
return this;
}
+ public CallExecutionPipelineBuilder<I, T> verbose(boolean verbose) {
+ this.verbose = verbose;
+ return this;
+ }
+
public CallExecutionPipeline<I, T> build() {
- return new CallExecutionPipeline<>(call, output, errOutput,
exceptionHandlers, decorator, inputProvider);
+ return new CallExecutionPipeline<>(call, output, errOutput,
exceptionHandlers, decorator, inputProvider, verbose);
}
private static PrintWriter wrapOutputStream(OutputStream output) {
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ClusterNotInitializedExceptionHandler.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ClusterNotInitializedExceptionHandler.java
index 1e53c4f40a..459a9f15a8 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ClusterNotInitializedExceptionHandler.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/ClusterNotInitializedExceptionHandler.java
@@ -52,6 +52,7 @@ public class ClusterNotInitializedExceptionHandler extends
IgniteCliApiException
.header(header)
.details("Probably, you have not initialized
the cluster, try to run %s command",
UiElements.command(command))
+ .verbose(apiException.getMessage())
.build()
.render()
);
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/IgniteCliApiExceptionHandler.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/IgniteCliApiExceptionHandler.java
index 3a090cead9..79b15f6a0c 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/IgniteCliApiExceptionHandler.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/IgniteCliApiExceptionHandler.java
@@ -53,11 +53,13 @@ public class IgniteCliApiExceptionHandler implements
ExceptionHandler<IgniteCliA
Throwable apiCause = cause.getCause();
if (apiCause instanceof UnknownHostException) {
errorComponentBuilder
- .header("Unknown host: %s",
UiElements.url(e.getUrl()));
+ .header("Unknown host: %s", UiElements.url(e.getUrl()))
+ .verbose(apiCause.getMessage());
} else if (apiCause instanceof ConnectException) {
errorComponentBuilder
.header("Node unavailable")
- .details("Could not connect to node with URL %s",
UiElements.url(e.getUrl()));
+ .details("Could not connect to node with URL %s",
UiElements.url(e.getUrl()))
+ .verbose(apiCause.getMessage());
} else if (apiCause != null) {
errorComponentBuilder.header(apiCause.getMessage());
} else {
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
index 03716e334b..b5bb181661 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/exception/handler/SqlExceptionHandler.java
@@ -102,16 +102,16 @@ public class SqlExceptionHandler implements
ExceptionHandler<SQLException> {
case SqlStateCode.CONNECTION_FAILURE:
case SqlStateCode.CONNECTION_CLOSED:
case SqlStateCode.CONNECTION_REJECTED:
- errorComponentBuilder.header(CONNECTION_BROKE_MESSAGE);
+
errorComponentBuilder.header(CONNECTION_BROKE_MESSAGE).verbose(ErrorGroup.extractCauseMessage(e.getMessage()));
break;
case SqlStateCode.PARSING_EXCEPTION:
errorComponentBuilder.header(PARSING_ERROR_MESSAGE).details(ErrorGroup.extractCauseMessage(e.getMessage()));
break;
case SqlStateCode.INVALID_PARAMETER_VALUE:
- errorComponentBuilder.header(INVALID_PARAMETER_MESSAGE);
+
errorComponentBuilder.header(INVALID_PARAMETER_MESSAGE).verbose(ErrorGroup.extractCauseMessage(e.getMessage()));
break;
case SqlStateCode.CLIENT_CONNECTION_FAILED:
- errorComponentBuilder.header(CLIENT_CONNECTION_FAILED_MESSAGE);
+
errorComponentBuilder.header(CLIENT_CONNECTION_FAILED_MESSAGE).verbose(ErrorGroup.extractCauseMessage(e.getMessage()));
break;
default:
LOG.error("Unrecognized error", e);
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilder.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilder.java
index f55c9d7099..a51dfb0295 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilder.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilder.java
@@ -102,6 +102,14 @@ public interface FlowBuilder<I, O> {
*/
FlowBuilder<I, O> exceptionHandler(ExceptionHandler<?> exceptionHandler);
+ /**
+ * Adds verbose output from debug log to the output.
+ *
+ * @param verbose If @{code true}, flow execution will print debug logs.
+ * @return Builder instance.
+ */
+ FlowBuilder<I, O> verbose(boolean verbose);
+
/**
* Appends print operation which will print the result of the current flow
using provided {@code decorator} or call the exception
* handler.
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilderImpl.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilderImpl.java
index ab66313ef3..b4cdc8bc20 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilderImpl.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/flow/builder/FlowBuilderImpl.java
@@ -35,6 +35,7 @@ import
org.apache.ignite.internal.cli.core.flow.question.QuestionAnswer;
import org.apache.ignite.internal.cli.core.flow.question.QuestionAskerFactory;
import
org.apache.ignite.internal.cli.core.repl.context.CommandLineContextProvider;
import org.apache.ignite.internal.cli.decorators.DefaultDecoratorRegistry;
+import org.apache.ignite.internal.cli.logger.CliLoggers;
/**
* Implementation of {@link FlowBuilder}.
@@ -46,9 +47,10 @@ public class FlowBuilderImpl<I, O> implements FlowBuilder<I,
O> {
private final Flow<I, O> flow;
private final ExceptionHandlers exceptionHandlers;
private final DecoratorRegistry decoratorRegistry;
+ private boolean verbose;
FlowBuilderImpl(Flow<I, O> flow) {
- this(flow, new DefaultExceptionHandlers(), new
DefaultDecoratorRegistry());
+ this(flow, new DefaultExceptionHandlers(), new
DefaultDecoratorRegistry(), false);
}
/**
@@ -57,16 +59,18 @@ public class FlowBuilderImpl<I, O> implements
FlowBuilder<I, O> {
* @param flow flow instance.
* @param exceptionHandlers exception handlers.
* @param decoratorRegistry decorator registry.
+ * @param verbose if @{code true}, flow execution will print debug logs
*/
- private FlowBuilderImpl(Flow<I, O> flow, ExceptionHandlers
exceptionHandlers, DecoratorRegistry decoratorRegistry) {
+ private FlowBuilderImpl(Flow<I, O> flow, ExceptionHandlers
exceptionHandlers, DecoratorRegistry decoratorRegistry, boolean verbose) {
this.flow = flow;
this.exceptionHandlers = exceptionHandlers;
this.decoratorRegistry = decoratorRegistry;
+ this.verbose = verbose;
}
@Override
public <OT> FlowBuilder<I, OT> then(Flow<O, OT> flow) {
- return new FlowBuilderImpl<>(this.flow.composite(flow),
exceptionHandlers, decoratorRegistry);
+ return new FlowBuilderImpl<>(this.flow.composite(flow),
exceptionHandlers, decoratorRegistry, verbose);
}
@Override
@@ -102,6 +106,12 @@ public class FlowBuilderImpl<I, O> implements
FlowBuilder<I, O> {
return this;
}
+ @Override
+ public FlowBuilder<I, O> verbose(boolean verbose) {
+ this.verbose = verbose;
+ return this;
+ }
+
@Override
public FlowBuilder<I, O> print(Decorator<O, TerminalOutput> decorator) {
return then(input -> printResult(input, type -> decorator));
@@ -133,7 +143,16 @@ public class FlowBuilderImpl<I, O> implements
FlowBuilder<I, O> {
* @return output flowable
*/
private Flowable<O> run(Flowable<I> input) {
- return flow.start(input);
+ try {
+ if (verbose) {
+
CliLoggers.startOutputRedirect(CommandLineContextProvider.getContext().err());
+ }
+ return flow.start(input);
+ } finally {
+ if (verbose) {
+ CliLoggers.stopOutputRedirect();
+ }
+ }
}
/**
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
index 1aaffc5a67..c268118cb6 100644
---
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/style/component/ErrorUiComponent.java
@@ -25,6 +25,7 @@ import
org.apache.ignite.internal.cli.core.style.AnsiStringSupport.Color;
import org.apache.ignite.internal.cli.core.style.AnsiStringSupport.Style;
import org.apache.ignite.internal.cli.core.style.element.UiElement;
import org.apache.ignite.internal.cli.core.style.element.UiString;
+import org.apache.ignite.internal.cli.logger.CliLoggers;
/**
* UI component that represent any error message.
@@ -38,6 +39,10 @@ public class ErrorUiComponent implements UiComponent {
private final UiElement[] detailsUiElements;
+ private final String verbose;
+
+ private final UiElement[] verboseUiElements;
+
private final UUID traceId;
private final String errorCode;
@@ -45,12 +50,15 @@ public class ErrorUiComponent implements UiComponent {
private ErrorUiComponent(
String header, UiElement[] headerUiElements,
String details, UiElement[] detailsUiElements,
+ String verbose, UiElement[] verboseUiElements,
UUID traceId,
String errorCode) {
this.header = header;
this.headerUiElements = headerUiElements;
this.details = details;
this.detailsUiElements = detailsUiElements;
+ this.verbose = verbose;
+ this.verboseUiElements = verboseUiElements;
this.traceId = traceId;
this.errorCode = errorCode;
}
@@ -80,6 +88,7 @@ public class ErrorUiComponent implements UiComponent {
+ traceDetails()
+
fg(Color.RED).with(Style.BOLD).mark(ansi(UiString.format(header,
headerUiElements)))
+ (details == null ? "" : System.lineSeparator() +
UiString.format(details, detailsUiElements))
+ + verboseDetails()
);
}
@@ -87,6 +96,10 @@ public class ErrorUiComponent implements UiComponent {
return traceId == null ? "" : fg(Color.GRAY).mark(" Trace ID: " +
traceId + System.lineSeparator());
}
+ private String verboseDetails() {
+ return verbose == null || !CliLoggers.isVerbose() ? "" :
System.lineSeparator() + UiString.format(verbose, verboseUiElements);
+ }
+
/** Builder. */
public static class ErrorComponentBuilder {
private String header;
@@ -95,7 +108,11 @@ public class ErrorUiComponent implements UiComponent {
private String details;
- private UiElement[] detailsUiElement;
+ private UiElement[] detailsUiElements;
+
+ private String verbose;
+
+ private UiElement[] verboseUiElements;
private UUID traceId;
@@ -111,22 +128,38 @@ public class ErrorUiComponent implements UiComponent {
/** Sets details. */
public ErrorComponentBuilder details(String details, UiElement...
uiElements) {
this.details = details;
- this.detailsUiElement = uiElements;
+ this.detailsUiElements = uiElements;
+ return this;
+ }
+
+ /** Sets verbose. */
+ public ErrorComponentBuilder verbose(String verbose, UiElement...
uiElements) {
+ this.verbose = verbose;
+ this.verboseUiElements = uiElements;
return this;
}
+ /** Sets trace id. */
public ErrorComponentBuilder traceId(UUID traceId) {
this.traceId = traceId;
return this;
}
+ /** Sets error code. */
public ErrorComponentBuilder errorCode(String errorCode) {
this.errorCode = errorCode;
return this;
}
+ /** Builds the component. */
public ErrorUiComponent build() {
- return new ErrorUiComponent(header, headerUiElements, details,
detailsUiElement, traceId, errorCode);
+ return new ErrorUiComponent(
+ header, headerUiElements,
+ details, detailsUiElements,
+ verbose, verboseUiElements,
+ traceId,
+ errorCode
+ );
}
}
}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
new file mode 100644
index 0000000000..ce393abb15
--- /dev/null
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/CliLoggers.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.logger;
+
+import java.io.PrintWriter;
+import java.lang.System.Logger;
+import java.util.ResourceBundle;
+import org.apache.ignite.internal.logger.IgniteLogger;
+import org.apache.ignite.internal.logger.Loggers;
+import org.apache.ignite.lang.LoggerFactory;
+import org.apache.ignite.rest.client.invoker.Configuration;
+
+/**
+ * This class is used when verbose output for command is needed. Instances of
loggers created by the {@link CliLoggers#forClass(Class)} and
+ * {@link CliLoggers#forName(String)} methods will redirect their output to
the console when commands are started with the {@code -v} flag.
+ */
+public class CliLoggers {
+ private static PrintWriter output;
+
+ private static boolean isVerbose;
+
+ /** Http logger for the default REST API client. */
+ private static final HttpLogging httpLogger = new
HttpLogging(Configuration.getDefaultApiClient());
+
+ private static final LoggerFactory loggerFactory = name -> new
CliLogger(System.getLogger(name));
+
+ /**
+ * Creates logger for given class.
+ *
+ * @param cls The class for a logger.
+ * @return Ignite logger.
+ */
+ public static IgniteLogger forClass(Class<?> cls) {
+ return Loggers.forClass(cls, loggerFactory);
+ }
+
+ /**
+ * Creates logger for given name.
+ *
+ * @param name The name for a logger.
+ * @return Ignite logger.
+ */
+ public static IgniteLogger forName(String name) {
+ return Loggers.forName(name, loggerFactory);
+ }
+
+ /**
+ * Starts redirecting output from loggers and from REST API client to the
specified print writer.
+ *
+ * @param out Print writer to write logs to.
+ */
+ public static void startOutputRedirect(PrintWriter out) {
+ output = out;
+ isVerbose = true;
+ httpLogger.startHttpLogging(out);
+ }
+
+ /**
+ * Stops redirecting output previously started by {@link
CliLoggers#startOutputRedirect(PrintWriter)}.
+ */
+ public static void stopOutputRedirect() {
+ output = null;
+ isVerbose = false;
+ httpLogger.stopHttpLogging();
+ }
+
+ /**
+ * Determine whether the output is redirected or not.
+ *
+ * @return {@code true} if output is redirected.
+ */
+ public static boolean isVerbose() {
+ return isVerbose;
+ }
+
+ private static class CliLogger implements Logger {
+
+ private final Logger delegate;
+
+ private CliLogger(Logger delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public String getName() {
+ return delegate.getName();
+ }
+
+ @Override
+ public boolean isLoggable(Level level) {
+ return delegate.isLoggable(level) || isVerbose;
+ }
+
+ @Override
+ public void log(Level level, ResourceBundle bundle, String msg,
Throwable thrown) {
+ if (isVerbose) {
+ output.println(msg);
+ output.println(thrown.getMessage());
+ }
+ delegate.log(level, bundle, msg, thrown);
+ }
+
+ @Override
+ public void log(Level level, ResourceBundle bundle, String format,
Object... params) {
+ if (isVerbose) {
+ output.println(format);
+ }
+ delegate.log(level, bundle, format, params);
+ }
+ }
+}
diff --git
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/HttpLogging.java
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/HttpLogging.java
new file mode 100644
index 0000000000..dc8bf52db0
--- /dev/null
+++
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/logger/HttpLogging.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.logger;
+
+import java.io.PrintWriter;
+import okhttp3.OkHttpClient.Builder;
+import okhttp3.logging.HttpLoggingInterceptor;
+import okhttp3.logging.HttpLoggingInterceptor.Level;
+import org.apache.ignite.rest.client.invoker.ApiClient;
+
+/** Helper class for logging HTTP requests/responses from generated REST API
client. */
+class HttpLogging {
+ private final ApiClient client;
+ private HttpLoggingInterceptor interceptor;
+
+ HttpLogging(ApiClient client) {
+ this.client = client;
+ }
+
+ /**
+ * Starts logging HTTP requests/responses to specified {@code PrintWriter}.
+ *
+ * @param output Print writer to print logs to.
+ */
+ void startHttpLogging(PrintWriter output) {
+ if (interceptor == null) {
+ Builder builder = client.getHttpClient().newBuilder();
+
+ interceptor = new HttpLoggingInterceptor(output::println);
+ interceptor.setLevel(Level.BASIC);
+ builder.interceptors().add(interceptor);
+
+ client.setHttpClient(builder.build());
+ }
+ }
+
+ /**
+ * Stops logging previously started by {@link
HttpLogging#startHttpLogging(PrintWriter)}.
+ */
+ void stopHttpLogging() {
+ if (interceptor != null) {
+ Builder builder = client.getHttpClient().newBuilder();
+
+ builder.interceptors().remove(interceptor);
+
+ client.setHttpClient(builder.build());
+ }
+ }
+}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
index 2267d6ac20..5b6521b14b 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
@@ -18,8 +18,10 @@
package org.apache.ignite.internal.cli.commands.flow;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.emptyString;
import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.startsWith;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
@@ -29,6 +31,9 @@ import java.io.StringWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
+import org.apache.ignite.internal.cli.core.call.StringCallInput;
+import org.apache.ignite.internal.cli.core.call.ThrowingStrCall;
+import org.apache.ignite.internal.cli.core.exception.TestExceptionHandler;
import org.apache.ignite.internal.cli.core.flow.Flow;
import org.apache.ignite.internal.cli.core.flow.Flowable;
import org.apache.ignite.internal.cli.core.flow.builder.FlowBuilder;
@@ -53,13 +58,32 @@ class FlowTest {
private StringWriter out;
private StringWriter errOut;
+ @Test
+ void testVerbose() throws IOException {
+ // Given
+ bindAnswers("no");
+
+ // When start flow with print and verbose
+ askQuestion()
+ .then(Flows.fromCall(new ThrowingStrCall(),
StringCallInput::new))
+ .exceptionHandler(new TestExceptionHandler())
+ .verbose(true)
+ .print()
+ .start();
+
+ // Then error output starts with the message from exception and
contains verbose output
+ assertThat(out.toString(), emptyString());
+ assertThat(errOut.toString(), startsWith("Ooops!" +
System.lineSeparator()));
+ assertThat(errOut.toString(), containsString("verbose output"));
+ }
+
private static Flow<Object, Integer> createFlow() {
return askQuestion()
.question(s -> "Here is your number " + s + ":, would you like
to multiply it by 2?",
List.of(new QuestionAnswer<>("yes"::equals, (a, i) ->
Integer.parseInt(i) * 2),
new QuestionAnswer<>("no"::equals, (a, i) ->
Integer.parseInt(i))))
.ifThen(num -> num == 1, Flows.fromCall(new IntCall(),
IntCallInput::new))
- .ifThen(num -> num > 1, Flows.fromCall(new StrCall(), integer
-> new StrCallInput(String.valueOf(integer))))
+ .ifThen(num -> num > 1, Flows.fromCall(new StrCall(), integer
-> new StringCallInput(String.valueOf(integer))))
.build();
}
@@ -130,7 +154,7 @@ class FlowTest {
// When build flow and start
askQuestion()
.exceptionHandler(new TestExceptionHandler())
- .then(Flows.fromCall(new ThrowingStrCall(), StrCallInput::new))
+ .then(Flows.fromCall(new ThrowingStrCall(),
StringCallInput::new))
.print()
.start();
@@ -147,7 +171,7 @@ class FlowTest {
// When build flow and start
askQuestion()
.print()
- .then(Flows.fromCall(new ThrowingStrCall(), StrCallInput::new))
+ .then(Flows.fromCall(new ThrowingStrCall(),
StringCallInput::new))
.exceptionHandler(new TestExceptionHandler())
.start();
@@ -163,7 +187,7 @@ class FlowTest {
// When build flow and start
askQuestion()
- .then(Flows.fromCall(new ThrowingStrCall(), StrCallInput::new))
+ .then(Flows.fromCall(new ThrowingStrCall(),
StringCallInput::new))
.exceptionHandler(new TestExceptionHandler())
.print()
.start();
@@ -196,7 +220,7 @@ class FlowTest {
// When build flow and start
askQuestion()
- .then(Flows.fromCall(new ThrowingStrCall(), StrCallInput::new))
+ .then(Flows.fromCall(new ThrowingStrCall(),
StringCallInput::new))
.exceptionHandler(new TestExceptionHandler())
.print()
.print()
@@ -230,7 +254,7 @@ class FlowTest {
// When start flow with print
askQuestion()
- .then(Flows.fromCall(new ThrowingStrCall(), StrCallInput::new))
+ .then(Flows.fromCall(new ThrowingStrCall(),
StringCallInput::new))
.exceptionHandler(new TestExceptionHandler())
.print()
.start();
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCall.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCall.java
index 4acbe2fb21..b46bc5b90a 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCall.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCall.java
@@ -20,11 +20,12 @@ package org.apache.ignite.internal.cli.commands.flow;
import org.apache.ignite.internal.cli.core.call.Call;
import org.apache.ignite.internal.cli.core.call.CallOutput;
import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
+import org.apache.ignite.internal.cli.core.call.StringCallInput;
-class StrCall implements Call<StrCallInput, String> {
+class StrCall implements Call<StringCallInput, String> {
@Override
- public CallOutput<String> execute(StrCallInput input) {
- return DefaultCallOutput.success("You are unlucky, your number |" +
input.value + "|");
+ public CallOutput<String> execute(StringCallInput input) {
+ return DefaultCallOutput.success("You are unlucky, your number |" +
input.getString() + "|");
}
}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCallInput.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCallInput.java
deleted file mode 100644
index d0be1dab78..0000000000
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/StrCallInput.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.cli.commands.flow;
-
-import org.apache.ignite.internal.cli.core.call.CallInput;
-
-class StrCallInput implements CallInput {
- final String value;
-
- StrCallInput(String value) {
- this.value = value;
- }
-}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/call/PipelineTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/call/PipelineTest.java
new file mode 100644
index 0000000000..a1aac24059
--- /dev/null
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/call/PipelineTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.core.call;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.emptyString;
+import static org.hamcrest.Matchers.startsWith;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import org.apache.ignite.internal.cli.core.exception.TestExceptionHandler;
+import org.junit.jupiter.api.Test;
+
+class PipelineTest {
+
+ @Test
+ void verboseTest() {
+ // Given
+ StringWriter out = new StringWriter();
+ StringWriter errOut = new StringWriter();
+
+ // When start pipeline with verbose
+ CallExecutionPipeline.builder(new ThrowingStrCall())
+ .inputProvider(StringCallInput::new)
+ .exceptionHandler(new TestExceptionHandler())
+ .output(new PrintWriter(out))
+ .errOutput(new PrintWriter(errOut))
+ .verbose(true)
+ .build().runPipeline();
+
+ // Then error output starts with the message from exception and
contains verbose output
+ assertThat(out.toString(), emptyString());
+ assertThat(errOut.toString(), startsWith("Ooops!" +
System.lineSeparator()));
+ assertThat(errOut.toString(), containsString("verbose output"));
+ }
+}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/ThrowingStrCall.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/call/ThrowingStrCall.java
similarity index 71%
rename from
modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/ThrowingStrCall.java
rename to
modules/cli/src/test/java/org/apache/ignite/internal/cli/core/call/ThrowingStrCall.java
index 2336daff56..975082709f 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/ThrowingStrCall.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/call/ThrowingStrCall.java
@@ -15,15 +15,12 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.cli.commands.flow;
+package org.apache.ignite.internal.cli.core.call;
-import org.apache.ignite.internal.cli.core.call.Call;
-import org.apache.ignite.internal.cli.core.call.CallOutput;
-import org.apache.ignite.internal.cli.core.call.DefaultCallOutput;
-
-class ThrowingStrCall implements Call<StrCallInput, String> {
+/** Test call that throws a runtime exception. **/
+public class ThrowingStrCall implements Call<StringCallInput, String> {
@Override
- public CallOutput<String> execute(StrCallInput input) {
+ public CallOutput<String> execute(StringCallInput input) {
return DefaultCallOutput.failure(new RuntimeException("Ooops!"));
}
}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/TestExceptionHandler.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/exception/TestExceptionHandler.java
similarity index 69%
rename from
modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/TestExceptionHandler.java
rename to
modules/cli/src/test/java/org/apache/ignite/internal/cli/core/exception/TestExceptionHandler.java
index 58aedd58d7..e4c56b776c 100644
---
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/TestExceptionHandler.java
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/core/exception/TestExceptionHandler.java
@@ -15,16 +15,19 @@
* limitations under the License.
*/
-package org.apache.ignite.internal.cli.commands.flow;
+package org.apache.ignite.internal.cli.core.exception;
-import org.apache.ignite.internal.cli.core.exception.ExceptionHandler;
-import org.apache.ignite.internal.cli.core.exception.ExceptionWriter;
+import org.apache.ignite.internal.cli.logger.CliLoggers;
+import org.apache.ignite.internal.logger.IgniteLogger;
+
+/** Exception handler that writes exception messages and logs verbose output.
**/
+public class TestExceptionHandler implements
ExceptionHandler<RuntimeException> {
+ private static final IgniteLogger LOG =
CliLoggers.forClass(TestExceptionHandler.class);
-class TestExceptionHandler implements ExceptionHandler<RuntimeException> {
@Override
public int handle(ExceptionWriter err, RuntimeException e) {
err.write(e.getMessage());
-
+ LOG.debug("verbose output");
return 0;
}
diff --git
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/logger/HttpLoggingTest.java
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/logger/HttpLoggingTest.java
new file mode 100644
index 0000000000..5c0e4ed210
--- /dev/null
+++
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/logger/HttpLoggingTest.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.cli.logger;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.not;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import okhttp3.Interceptor;
+import okhttp3.OkHttpClient.Builder;
+import org.apache.ignite.rest.client.invoker.ApiClient;
+import org.junit.jupiter.api.Test;
+
+class HttpLoggingTest {
+
+ @Test
+ void startAndStopLogging() {
+ ApiClient client = new ApiClient();
+ assertThat(client.getHttpClient().interceptors(), empty());
+
+ HttpLogging logger = new HttpLogging(client);
+
+ logger.startHttpLogging(new PrintWriter(new StringWriter()));
+ assertThat(client.getHttpClient().interceptors(), not(empty()));
+
+ logger.stopHttpLogging();
+ assertThat(client.getHttpClient().interceptors(), empty());
+ }
+
+ @Test
+ void stopLoggingRemoveOnlyOneInterceptor() {
+ ApiClient client = new ApiClient();
+ Interceptor interceptor = chain -> chain.proceed(chain.request());
+ Builder builder = client.getHttpClient().newBuilder();
+ builder.interceptors().add(interceptor);
+ client.setHttpClient(builder.build());
+
+ HttpLogging logger = new HttpLogging(client);
+
+ logger.startHttpLogging(new PrintWriter(new StringWriter()));
+ logger.stopHttpLogging();
+
+ assertThat(client.getHttpClient().interceptors(),
contains(interceptor));
+ }
+}