This is an automated email from the ASF dual-hosted git repository.
jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 22236560b [#5276] improment(cli): display audit information on
Metalakes in the Gravitino CLI (#5475)
22236560b is described below
commit 22236560b1e4fbaaebe0de3da84796fe94033889
Author: JUN <[email protected]>
AuthorDate: Wed Nov 6 14:50:45 2024 +0800
[#5276] improment(cli): display audit information on Metalakes in the
Gravitino CLI (#5475)
### What changes were proposed in this pull request?
Add the `--audit` option to display audit information on Metalakes.
### Why are the changes needed?
This change allows users to retrieve additional audit information on
Metalakes, providing more insights.
Fix: #5276
### Does this PR introduce _any_ user-facing change?
Yes, it adds the `--audit` option to `CommandEntities.METALAKE`.
### How was this patch tested?
1. Follow the instructions in the [cli
README](https://github.com/apache/gravitino/tree/main/clients/cli) to
build the CLI sub-project.
2. Start the Gravitino server.
To test, use a command like the following:
```
gcli metalake details --metalake <your meatalake name> --audit
```
Check that the output matches the expected audit information.


---------
Signed-off-by: jun <[email protected]>
---
.../apache/gravitino/cli/GravitinoCommandLine.java | 7 ++-
.../org/apache/gravitino/cli/GravitinoOptions.java | 2 +
.../gravitino/cli/commands/MetalakeAuditInfo.java | 69 ++++++++++++++++++++++
3 files changed, 77 insertions(+), 1 deletion(-)
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
index e60c7662d..f942a4afd 100644
---
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
+++
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
@@ -29,6 +29,7 @@ import org.apache.gravitino.cli.commands.ListColumns;
import org.apache.gravitino.cli.commands.ListMetalakes;
import org.apache.gravitino.cli.commands.ListSchema;
import org.apache.gravitino.cli.commands.ListTables;
+import org.apache.gravitino.cli.commands.MetalakeAuditInfo;
import org.apache.gravitino.cli.commands.MetalakeDetails;
import org.apache.gravitino.cli.commands.SchemaDetails;
import org.apache.gravitino.cli.commands.ServerVersion;
@@ -123,7 +124,11 @@ public class GravitinoCommandLine {
String metalake = name.getMetalakeName();
if (CommandActions.DETAILS.equals(command)) {
- new MetalakeDetails(url, ignore, metalake).handle();
+ if (line.hasOption(GravitinoOptions.AUDIT)) {
+ new MetalakeAuditInfo(url, ignore, metalake).handle();
+ } else {
+ new MetalakeDetails(url, ignore, metalake).handle();
+ }
} else if (CommandActions.LIST.equals(command)) {
new ListMetalakes(url, ignore).handle();
}
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
index 9f8d1579a..7accc3d2a 100644
--- a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
+++ b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
@@ -31,6 +31,7 @@ public class GravitinoOptions {
public static final String NAME = "name";
public static final String METALAKE = "metalake";
public static final String IGNORE = "ignore";
+ public static final String AUDIT = "audit";
/**
* Builds and returns the CLI options for Gravitino.
@@ -48,6 +49,7 @@ public class GravitinoOptions {
options.addOption(createArgOption("f", NAME, "full entity name (dot
separated)"));
options.addOption(createArgOption("m", METALAKE, "Metalake name"));
options.addOption(createSimpleOption("i", IGNORE, "Ignore client/sever
version check"));
+ options.addOption(createSimpleOption("a", AUDIT, "Display audit
information"));
return options;
}
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/MetalakeAuditInfo.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/MetalakeAuditInfo.java
new file mode 100644
index 000000000..6c1d49a20
--- /dev/null
+++
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/MetalakeAuditInfo.java
@@ -0,0 +1,69 @@
+/*
+ * 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.gravitino.cli.commands;
+
+import org.apache.gravitino.Audit;
+import org.apache.gravitino.cli.ErrorMessages;
+import org.apache.gravitino.client.GravitinoClient;
+import org.apache.gravitino.exceptions.NoSuchMetalakeException;
+
+/** Displays the audit information of a metalake. */
+public class MetalakeAuditInfo extends Command {
+ protected final String metalake;
+
+ /**
+ * Displays metalake audit information.
+ *
+ * @param url The URL of the Gravitino server.
+ * @param ignoreVersions If true don't check the client/server versions
match.
+ * @param metalake The name of the metalake.
+ */
+ public MetalakeAuditInfo(String url, boolean ignoreVersions, String
metalake) {
+ super(url, ignoreVersions);
+ this.metalake = metalake;
+ }
+
+ /** Displays the audit information of a metalake. */
+ public void handle() {
+ Audit audit;
+ try (GravitinoClient client = buildClient(metalake)) {
+ audit = client.loadMetalake(metalake).auditInfo();
+ } catch (NoSuchMetalakeException err) {
+ System.err.println(ErrorMessages.UNKNOWN_METALAKE);
+ return;
+ } catch (Exception exp) {
+ System.err.println(exp.getMessage());
+ return;
+ }
+
+ String auditInfo =
+ "creator,createTime,lastModifier,lastModifiedTime"
+ + System.lineSeparator()
+ + audit.creator()
+ + ","
+ + audit.createTime()
+ + ","
+ + audit.lastModifier()
+ + ","
+ + audit.lastModifiedTime();
+
+ System.out.println(auditInfo);
+ }
+}