Skip to content

Commit 9bef413

Browse files
[yugabyte#8354] [Platform][API] Audit controller error handling. (yugabyte#8355)
Description: Use the new global exception handling in the audit controller. Test Plan: It's mostly refactor. Unit tests are updated. Run server and test basic operations. Created a new alert in profile section Reviewers: Shashank. Reviewed by : Shashank.
1 parent 7d60edf commit 9bef413

File tree

4 files changed

+44
-54
lines changed

4 files changed

+44
-54
lines changed

managed/src/main/java/com/yugabyte/yw/common/audit/AuditService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ public List<Audit> getAllUserEntries(UUID userUUID) {
128128
return Audit.getAllUserEntries(userUUID);
129129
}
130130

131+
public Audit getOrBadRequest(UUID customerUUID, UUID taskUUID) {
132+
return Audit.getOrBadRequest(customerUUID, taskUUID);
133+
}
134+
131135
public static JsonNode filterSecretFields(JsonNode input) {
132136
if (input == null) {
133137
return null;

managed/src/main/java/com/yugabyte/yw/controllers/AuditController.java

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,10 @@ public class AuditController extends AuthenticatedController {
2525
* @return JSON response with audit entries belonging to the user.
2626
*/
2727
public Result list(UUID customerUUID, UUID userUUID) {
28-
Customer customer = Customer.get(customerUUID);
29-
if (customer == null) {
30-
return ApiResponse.error(BAD_REQUEST, "Invalid Customer UUID: " + customerUUID);
31-
}
32-
Users user = Users.get(userUUID);
33-
if (user == null) {
34-
return ApiResponse.error(BAD_REQUEST, "Invalid User UUID: " + customerUUID);
35-
}
36-
37-
try {
38-
List<Audit> auditList = auditService().getAllUserEntries(user.uuid);
39-
return ApiResponse.success(auditList);
40-
} catch (Exception e) {
41-
return ApiResponse.error(INTERNAL_SERVER_ERROR, "Unable to fetch audit history.");
42-
}
28+
Customer.getOrBadRequest(customerUUID);
29+
Users user = Users.getOrBadRequest(userUUID);
30+
List<Audit> auditList = auditService().getAllUserEntries(user.uuid);
31+
return ApiResponse.success(auditList);
4332
}
4433

4534
/**
@@ -48,41 +37,15 @@ public Result list(UUID customerUUID, UUID userUUID) {
4837
* @return JSON response with the corresponding audit entry.
4938
*/
5039
public Result getTaskAudit(UUID customerUUID, UUID taskUUID) {
51-
Customer customer = Customer.get(customerUUID);
52-
if (customer == null) {
53-
return ApiResponse.error(BAD_REQUEST, "Invalid Customer UUID: " + customerUUID);
54-
}
55-
try {
56-
Audit entry = auditService().getFromTaskUUID(taskUUID);
57-
if (entry.getCustomerUUID().equals(customerUUID)) {
58-
return ApiResponse.success(entry);
59-
} else {
60-
return ApiResponse.error(
61-
BAD_REQUEST,
62-
String.format("Task %s does not belong to customer %s", taskUUID, customerUUID));
63-
}
64-
} catch (Exception e) {
65-
return ApiResponse.error(INTERNAL_SERVER_ERROR, "Unable to fetch audit entry.");
66-
}
40+
Customer.getOrBadRequest(customerUUID);
41+
Audit entry = auditService().getOrBadRequest(customerUUID, taskUUID);
42+
return ApiResponse.success(entry);
6743
}
6844

6945
public Result getUserFromTask(UUID customerUUID, UUID taskUUID) {
70-
Customer customer = Customer.get(customerUUID);
71-
if (customer == null) {
72-
return ApiResponse.error(BAD_REQUEST, "Invalid Customer UUID: " + customerUUID);
73-
}
74-
try {
75-
Audit entry = auditService().getFromTaskUUID(taskUUID);
76-
Users user = Users.get(entry.getUserUUID());
77-
if (entry.getCustomerUUID().equals(customerUUID)) {
78-
return ApiResponse.success(user);
79-
} else {
80-
return ApiResponse.error(
81-
BAD_REQUEST,
82-
String.format("Task %s does not belong to customer %s", taskUUID, customerUUID));
83-
}
84-
} catch (Exception e) {
85-
return ApiResponse.error(INTERNAL_SERVER_ERROR, "Unable to fetch user.");
86-
}
46+
Customer.getOrBadRequest(customerUUID);
47+
Audit entry = auditService().getOrBadRequest(customerUUID, taskUUID);
48+
Users user = Users.get(entry.getUserUUID());
49+
return ApiResponse.success(user);
8750
}
8851
}

managed/src/main/java/com/yugabyte/yw/models/Audit.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package com.yugabyte.yw.models;
44

55
import com.fasterxml.jackson.databind.JsonNode;
6+
import com.yugabyte.yw.common.YWServiceException;
67
import io.ebean.Finder;
78
import io.ebean.Model;
89
import io.ebean.annotation.CreatedTimestamp;
@@ -18,6 +19,8 @@
1819
import java.util.UUID;
1920
import java.util.function.Consumer;
2021

22+
import static play.mvc.Http.Status.BAD_REQUEST;
23+
2124
@Entity
2225
public class Audit extends Model {
2326

@@ -134,6 +137,17 @@ public static Audit getFromTaskUUID(UUID taskUUID) {
134137
return find.query().where().eq("task_uuid", taskUUID).findOne();
135138
}
136139

140+
public static Audit getOrBadRequest(UUID customerUUID, UUID taskUUID) {
141+
Customer.getOrBadRequest(customerUUID);
142+
Audit entry =
143+
find.query().where().eq("task_uuid", taskUUID).eq("customer_uuid", customerUUID).findOne();
144+
if (entry == null) {
145+
throw new YWServiceException(
146+
BAD_REQUEST, "Task " + taskUUID + " does not belong to customer " + customerUUID);
147+
}
148+
return entry;
149+
}
150+
137151
public static List<Audit> getAllUserEntries(UUID userUUID) {
138152
return find.query().where().eq("user_uuid", userUUID).findList();
139153
}

managed/src/test/java/com/yugabyte/yw/controllers/AuditControllerTest.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.yugabyte.yw.common.FakeApiHelper;
1717
import com.yugabyte.yw.common.CallHomeManager.CollectionLevel;
1818
import com.yugabyte.yw.common.ModelFactory;
19+
import com.yugabyte.yw.common.YWServiceException;
1920
import com.yugabyte.yw.metrics.MetricQueryHelper;
2021
import com.yugabyte.yw.models.Audit;
2122
import com.yugabyte.yw.models.Customer;
@@ -132,9 +133,13 @@ public void testGetTaskInfoInvalidCustomer() throws IOException {
132133
Http.Cookie validCookie = Http.Cookie.builder("authToken", authToken2).build();
133134
String route = "/api/customers/%s/tasks/%s/audit_info";
134135
Result result =
135-
route(
136-
fakeRequest("GET", String.format(route, customer2.uuid, taskUUID1))
137-
.cookie(validCookie));
136+
assertThrows(
137+
YWServiceException.class,
138+
() ->
139+
route(
140+
fakeRequest("GET", String.format(route, customer2.uuid, taskUUID1))
141+
.cookie(validCookie)))
142+
.getResult();
138143
JsonNode json = Json.parse(contentAsString(result));
139144
assertEquals(BAD_REQUEST, result.status());
140145
}
@@ -157,9 +162,13 @@ public void testGetUserFromTaskInvalidCustomer() throws IOException {
157162
Http.Cookie validCookie = Http.Cookie.builder("authToken", authToken2).build();
158163
String route = "/api/customers/%s/tasks/%s/audit_user";
159164
Result result =
160-
route(
161-
fakeRequest("GET", String.format(route, customer2.uuid, taskUUID1))
162-
.cookie(validCookie));
165+
assertThrows(
166+
YWServiceException.class,
167+
() ->
168+
route(
169+
fakeRequest("GET", String.format(route, customer2.uuid, taskUUID1))
170+
.cookie(validCookie)))
171+
.getResult();
163172
JsonNode json = Json.parse(contentAsString(result));
164173
assertEquals(BAD_REQUEST, result.status());
165174
}

0 commit comments

Comments
 (0)