From 7583980bde6ed2234f4454e1128eff065b173ff3 Mon Sep 17 00:00:00 2001 From: fuweng11 <76141879+fuweng11@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:11:57 +0800 Subject: [PATCH] [INLONG-9337][Manager] Support querying operation records (#9340) --- .../api/inner/client/OperationLogClient.java | 51 ++++++++ .../client/api/service/OperationLogApi.java | 34 +++++ .../manager/common/enums/OperationTarget.java | 49 ++++++++ .../dao/entity/OperationLogEntity.java | 3 + .../dao/mapper/OperationLogEntityMapper.java | 4 + .../mappers/OperationLogEntityMapper.xml | 82 ++++++++++-- .../operationLog/OperationLogRequest.java | 56 +++++++++ .../operationLog/OperationLogResponse.java | 64 ++++++++++ .../service/operationlog/OperationLog.java | 6 + .../operationlog/OperationLogRecorder.java | 27 ++++ .../operationlog/OperationLogService.java | 30 +++++ .../operationlog/OperationLogServiceImpl.java | 63 ++++++++++ .../resource/queue/tubemq/TubeMQOperator.java | 2 +- .../manager-web/sql/apache_inlong_manager.sql | 6 +- .../manager-web/sql/changes-1.10.0.sql | 13 ++ .../web/controller/DataNodeController.java | 11 +- .../controller/InlongClusterController.java | 31 ++--- .../controller/InlongConsumeController.java | 9 +- .../web/controller/InlongGroupController.java | 9 +- .../web/controller/InlongRoleController.java | 5 +- .../controller/InlongStreamController.java | 7 +- .../controller/InlongTenantController.java | 5 +- .../InlongTenantRoleController.java | 5 +- .../controller/OperationLogController.java | 51 ++++++++ .../web/controller/StreamSinkController.java | 12 +- .../controller/StreamSourceController.java | 9 +- .../controller/StreamTransformController.java | 7 +- .../WorkflowApproverController.java | 7 +- .../web/controller/WorkflowController.java | 15 +-- .../controller/WorkflowEventController.java | 11 +- .../openapi/OpenDataNodeController.java | 7 +- .../openapi/OpenInLongClusterController.java | 27 ++-- .../openapi/OpenInLongGroupController.java | 7 +- .../openapi/OpenInLongStreamController.java | 7 +- .../openapi/OpenInlongConsumeController.java | 118 ++++++++++++++++++ .../openapi/OpenInlongTenantController.java | 5 +- .../OpenInlongTenantRoleController.java | 5 +- .../openapi/OpenStreamSinkController.java | 8 +- .../openapi/OpenStreamSourceController.java | 7 +- .../OpenStreamTransformController.java | 7 +- 40 files changed, 773 insertions(+), 109 deletions(-) create mode 100644 inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java create mode 100644 inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java create mode 100644 inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java create mode 100644 inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java create mode 100644 inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.java create mode 100644 inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java create mode 100644 inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.java create mode 100644 inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java create mode 100644 inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java diff --git a/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java new file mode 100644 index 00000000000..755ef02bfa0 --- /dev/null +++ b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/inner/client/OperationLogClient.java @@ -0,0 +1,51 @@ +/* + * 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.inlong.manager.client.api.inner.client; + +import org.apache.inlong.manager.client.api.ClientConfiguration; +import org.apache.inlong.manager.client.api.service.OperationLogApi; +import org.apache.inlong.manager.client.api.util.ClientUtils; +import org.apache.inlong.manager.pojo.common.PageResult; +import org.apache.inlong.manager.pojo.common.Response; +import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest; +import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse; + +public class OperationLogClient { + + private final OperationLogApi operationLogApi; + + public OperationLogClient(ClientConfiguration configuration) { + operationLogApi = ClientUtils.createRetrofit(configuration).create(OperationLogApi.class); + } + + /** + * create us task by sink id + * + * @return task id + */ + public PageResult list(OperationLogRequest request) { + Response> response = + ClientUtils.executeHttpCall(operationLogApi.list(request)); + ClientUtils.assertRespSuccess(response); + if (response.isSuccess()) { + return response.getData(); + } + throw new RuntimeException(response.getErrMsg()); + } + +} diff --git a/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java new file mode 100644 index 00000000000..397fc6aa644 --- /dev/null +++ b/inlong-manager/manager-client/src/main/java/org/apache/inlong/manager/client/api/service/OperationLogApi.java @@ -0,0 +1,34 @@ +/* + * 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.inlong.manager.client.api.service; + +import org.apache.inlong.manager.pojo.common.PageResult; +import org.apache.inlong.manager.pojo.common.Response; +import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest; +import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse; + +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.POST; + +public interface OperationLogApi { + + @POST("operationLog/list") + Call>> list(@Body OperationLogRequest request); + +} diff --git a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java new file mode 100644 index 00000000000..e6c866a0e13 --- /dev/null +++ b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/enums/OperationTarget.java @@ -0,0 +1,49 @@ +/* + * 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.inlong.manager.common.enums; + +/** + * Operation target + */ +public enum OperationTarget { + + TENANT, + + GROUP, + + STREAM, + + SOURCE, + + SINK, + + CONSUME, + + WORKFLOW, + + NODE, + + CLUSTER, + + TRANSFORM, + + INLONG_ROLE, + + TENANT_ROLE + +} diff --git a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java index 777ceeddbae..56fe40d21a7 100644 --- a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java +++ b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/entity/OperationLogEntity.java @@ -30,8 +30,11 @@ public class OperationLogEntity implements Serializable { private static final long serialVersionUID = 1L; private Integer id; + private String inlongGroupId; + private String inlongStreamId; private String authenticationType; private String operationType; + private String operationTarget; private String httpMethod; private String invokeMethod; private String operator; diff --git a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java index 24d5febca65..548bbe44eee 100644 --- a/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java +++ b/inlong-manager/manager-dao/src/main/java/org/apache/inlong/manager/dao/mapper/OperationLogEntityMapper.java @@ -18,7 +18,9 @@ package org.apache.inlong.manager.dao.mapper; import org.apache.inlong.manager.dao.entity.OperationLogEntity; +import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -36,6 +38,8 @@ public interface OperationLogEntityMapper { OperationLogEntity selectByPrimaryKey(Integer id); + List selectByCondition(@Param("request") OperationLogRequest operationLogRequest); + int updateByPrimaryKeySelective(OperationLogEntity record); int updateByPrimaryKey(OperationLogEntity record); diff --git a/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml b/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml index 835359b3313..b601fb91a3a 100644 --- a/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml +++ b/inlong-manager/manager-dao/src/main/resources/mappers/OperationLogEntityMapper.xml @@ -22,8 +22,11 @@ + + + @@ -38,7 +41,7 @@ - id, authentication_type, operation_type, http_method, invoke_method, operator, + id, inlong_group_id, inlong_stream_id, authentication_type, operation_type, operation_target, http_method, invoke_method, operator, proxy, request_url, remote_address, cost_time, status, request_time, body, param, err_msg @@ -48,25 +51,59 @@ from operation_log where id = #{id,jdbcType=INTEGER} + delete from operation_log where id = #{id,jdbcType=INTEGER} - insert into operation_log (id, authentication_type, operation_type, + insert into operation_log (id, inlong_group_id, inlong_stream_id, + authentication_type, operation_type, operation_target, http_method, invoke_method, operator, proxy, request_url, remote_address, cost_time, status, request_time, body, param, err_msg) - values (#{id,jdbcType=INTEGER}, #{authenticationType,jdbcType=VARCHAR}, #{operationType,jdbcType=VARCHAR}, + values (#{id,jdbcType=INTEGER}, #{inlongGroupId,jdbcType=VARCHAR}, #{inlongStreamId,jdbcType=VARCHAR}, + #{authenticationType,jdbcType=VARCHAR}, #{operationType,jdbcType=VARCHAR}, #{operationTarget,jdbcType=VARCHAR}, #{httpMethod,jdbcType=VARCHAR}, #{invokeMethod,jdbcType=VARCHAR}, #{operator,jdbcType=VARCHAR}, #{proxy,jdbcType=VARCHAR}, #{requestUrl,jdbcType=VARCHAR}, #{remoteAddress,jdbcType=VARCHAR}, #{costTime,jdbcType=BIGINT}, #{status,jdbcType=TINYINT}, #{requestTime,jdbcType=TIMESTAMP}, #{body,jdbcType=LONGVARCHAR}, #{param,jdbcType=LONGVARCHAR}, #{errMsg,jdbcType=LONGVARCHAR}) - insert into operation_log (id, authentication_type, operation_type, + insert into operation_log (id, inlong_group_id, inlong_stream_id, + authentication_type, operation_type, operation_target, http_method, invoke_method, operator, proxy, request_url, remote_address, cost_time, status, request_time, @@ -75,8 +112,9 @@ VALUES ( - #{log.id,jdbcType=INTEGER}, #{log.authenticationType,jdbcType=VARCHAR}, - #{log.operationType,jdbcType=VARCHAR}, + #{log.id,jdbcType=INTEGER}, #{log.inlongGroupId,jdbcType=VARCHAR}, + #{log.inlongStreamId,jdbcType=VARCHAR}, #{log.authenticationType,jdbcType=VARCHAR}, + #{log.operationType,jdbcType=VARCHAR}, #{log.operationTarget,jdbcType=VARCHAR}, #{log.httpMethod,jdbcType=VARCHAR}, #{log.invokeMethod,jdbcType=VARCHAR}, #{log.operator,jdbcType=VARCHAR}, #{log.proxy,jdbcType=VARCHAR}, #{log.requestUrl,jdbcType=VARCHAR}, @@ -95,12 +133,21 @@ id, + + inlong_group_id, + + + inlong_stream_id, + authentication_type, operation_type, + + operation_target, + http_method, @@ -142,12 +189,21 @@ #{id,jdbcType=INTEGER}, + + #{inlongGroupId,jdbcType=VARCHAR}, + + + #{inlongStreamId,jdbcType=VARCHAR}, + #{authenticationType,jdbcType=VARCHAR}, #{operationType,jdbcType=VARCHAR}, + + #{operationTarget,jdbcType=VARCHAR}, + #{httpMethod,jdbcType=VARCHAR}, @@ -190,12 +246,21 @@ parameterType="org.apache.inlong.manager.dao.entity.OperationLogEntity"> update operation_log + + inlong_group_id = #{inlongGroupId,jdbcType=VARCHAR}, + + + inlong_stream_id = #{inlongStreamId,jdbcType=VARCHAR}, + authentication_type = #{authenticationType,jdbcType=VARCHAR}, operation_type = #{operationType,jdbcType=VARCHAR}, + + operation_target = #{operationTarget,jdbcType=VARCHAR}, + http_method = #{httpMethod,jdbcType=VARCHAR}, @@ -238,8 +303,11 @@ update operation_log - set authentication_type = #{authenticationType,jdbcType=VARCHAR}, + set inlong_group_id = #{inlongGroupId,jdbcType=VARCHAR}, + inlong_stream_id = #{inlongStreamId,jdbcType=VARCHAR}, + authentication_type = #{authenticationType,jdbcType=VARCHAR}, operation_type = #{operationType,jdbcType=VARCHAR}, + operation_target = #{operationTarget,jdbcType=VARCHAR}, http_method = #{httpMethod,jdbcType=VARCHAR}, invoke_method = #{invokeMethod,jdbcType=VARCHAR}, operator = #{operator,jdbcType=VARCHAR}, diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java new file mode 100644 index 00000000000..13d672c5200 --- /dev/null +++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogRequest.java @@ -0,0 +1,56 @@ +/* + * 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.inlong.manager.pojo.operationLog; + +import org.apache.inlong.manager.pojo.common.PageRequest; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Request of get operation records + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OperationLogRequest extends PageRequest { + + @ApiModelProperty("Inlong group id") + private String inlongGroupId; + + @ApiModelProperty("Inlong stream id") + private String inlongStreamId; + + @ApiModelProperty("Operation type") + private String operationType; + + @ApiModelProperty("Operation target") + private String operationTarget; + + @ApiModelProperty(value = "keyword") + private String keyword; + + @ApiModelProperty(value = "query start date, format by 'yyyy-MM-dd'", required = false, example = "2022-01-01") + private String startDate; + + @ApiModelProperty(value = "query end date, format by 'yyyy-MM-dd'", required = false, example = "2022-01-01") + private String endDate; + +} diff --git a/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.java b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.java new file mode 100644 index 00000000000..1e5050eb197 --- /dev/null +++ b/inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/operationLog/OperationLogResponse.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.inlong.manager.pojo.operationLog; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("Operation records") +public class OperationLogResponse { + + @ApiModelProperty("Inlong group id") + private String inlongGroupId; + + @ApiModelProperty("Inlong stream id") + private String inlongStreamId; + + @ApiModelProperty("Http method") + private String httpMethod; + + @ApiModelProperty("Operation type") + private String operationType; + + @ApiModelProperty("Operation target") + private String operationTarget; + + @ApiModelProperty("request body") + private String body; + + @ApiModelProperty("is success") + private Boolean status; + + @ApiModelProperty(value = "Name of operator") + private String operator; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date requestTime; + +} diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java index ebc47898737..8e9f2032043 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLog.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.service.operationlog; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import java.lang.annotation.ElementType; @@ -36,6 +37,11 @@ */ OperationType operation(); + /** + * Operation target + */ + OperationTarget operationTarget(); + /** * Whether to store in the database */ diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java index df4096f59af..b7dc2a04438 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogRecorder.java @@ -17,12 +17,15 @@ package org.apache.inlong.manager.service.operationlog; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.NetworkUtils; import org.apache.inlong.manager.dao.entity.OperationLogEntity; import org.apache.inlong.manager.pojo.user.LoginUserUtils; import org.apache.inlong.manager.pojo.user.UserInfo; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import lombok.extern.slf4j.Slf4j; @@ -35,6 +38,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.Date; +import java.util.Objects; import java.util.Optional; /** @@ -44,6 +48,9 @@ public class OperationLogRecorder { private static final String ANONYMOUS_USER = "AnonymousUser"; + private static final String INLONG_GROUP_ID = "inlongGroupId"; + private static final String INLONG_STREAM_ID = "inlongStreamId"; + private static final Gson GSON = new GsonBuilder().create(); // thread safe /** @@ -63,6 +70,22 @@ public static Object doAround(ProceedingJoinPoint joinPoint, OperationLog operat String requestUrl = request.getRequestURI(); String httpMethod = request.getMethod(); String remoteAddress = NetworkUtils.getClientIpAddress(request); + Object[] args = joinPoint.getArgs(); + String groupId = ""; + String streamId = ""; + for (Object arg : args) { + try { + JSONObject obj = (JSONObject) JSON.toJSON(arg); + for (String key : obj.keySet()) { + if (Objects.equals(key, INLONG_GROUP_ID) || Objects.equals(key, INLONG_STREAM_ID)) { + groupId = obj.getString(key); + } + } + } catch (Exception ignored) { + log.debug("do nothing when exception"); + } + + } String param = GSON.toJson(request.getParameterMap()); String body = GSON.toJson(joinPoint.getArgs()); @@ -78,7 +101,11 @@ public static Object doAround(ProceedingJoinPoint joinPoint, OperationLog operat } finally { long costTime = System.currentTimeMillis() - start; OperationType operationType = operationLog.operation(); + OperationTarget operationTarget = operationLog.operationTarget(); OperationLogEntity operationLogEntity = new OperationLogEntity(); + operationLogEntity.setInlongGroupId(groupId); + operationLogEntity.setInlongStreamId(streamId); + operationLogEntity.setOperationTarget(operationTarget.name()); operationLogEntity.setOperationType(operationType.name()); operationLogEntity.setHttpMethod(httpMethod); operationLogEntity.setOperator(operator); diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java new file mode 100644 index 00000000000..42d3af200a3 --- /dev/null +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogService.java @@ -0,0 +1,30 @@ +/* + * 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.inlong.manager.service.operationlog; + +import org.apache.inlong.manager.pojo.common.PageResult; +import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest; +import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse; + +/** + * Operation log service + */ +public interface OperationLogService { + + PageResult listByCondition(OperationLogRequest request); +} diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.java new file mode 100644 index 00000000000..1be95e9f264 --- /dev/null +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/operationlog/OperationLogServiceImpl.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.inlong.manager.service.operationlog; + +import org.apache.inlong.manager.common.util.CommonBeanUtils; +import org.apache.inlong.manager.dao.entity.OperationLogEntity; +import org.apache.inlong.manager.dao.mapper.OperationLogEntityMapper; +import org.apache.inlong.manager.pojo.common.OrderFieldEnum; +import org.apache.inlong.manager.pojo.common.OrderTypeEnum; +import org.apache.inlong.manager.pojo.common.PageResult; +import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest; +import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse; + +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import static org.apache.inlong.manager.pojo.common.PageRequest.MAX_PAGE_SIZE; + +/** + * Operation log operation + */ +@Service +public class OperationLogServiceImpl implements OperationLogService { + + private static final Logger LOGGER = LoggerFactory.getLogger(OperationLogServiceImpl.class); + + @Autowired + private OperationLogEntityMapper operationLogMapper; + + @Override + public PageResult listByCondition(OperationLogRequest request) { + if (request.getPageSize() > MAX_PAGE_SIZE) { + LOGGER.warn("list operation logs, change page size from {} to {}", request.getPageSize(), MAX_PAGE_SIZE); + request.setPageSize(MAX_PAGE_SIZE); + } + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + OrderFieldEnum.checkOrderField(request); + OrderTypeEnum.checkOrderType(request); + Page entityPage = (Page) operationLogMapper.selectByCondition(request); + PageResult pageResult = PageResult.fromPage(entityPage) + .map(entity -> CommonBeanUtils.copyProperties(entity, OperationLogResponse::new)); + return pageResult; + } +} diff --git a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java index 52ab267dc12..d4f852f8936 100644 --- a/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java +++ b/inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/resource/queue/tubemq/TubeMQOperator.java @@ -288,7 +288,7 @@ public List queryLastMessage(TubeClusterInfo tubeCluster, String String url = "http://" + brokerUrl + QUERY_MESSAGE_PATH + TOPIC_NAME + topicName + MSG_COUNT + msgCount; TubeMessageResponse response = HttpUtils.request(restTemplate, url, HttpMethod.GET, null, new HttpHeaders(), TubeMessageResponse.class); - if (response.getErrCode() != SUCCESS_CODE) { + if (response.getErrCode() != SUCCESS_CODE && response.getErrCode() != 200) { String msg = String.format("failed to query message for topic %s, error: %s", topicName, response.getErrMsg()); LOGGER.error(msg + " in {} for broker {}", masterUrl, brokerUrl); diff --git a/inlong-manager/manager-web/sql/apache_inlong_manager.sql b/inlong-manager/manager-web/sql/apache_inlong_manager.sql index eb57c5898ce..f1b5379e0a0 100644 --- a/inlong-manager/manager-web/sql/apache_inlong_manager.sql +++ b/inlong-manager/manager-web/sql/apache_inlong_manager.sql @@ -332,8 +332,10 @@ CREATE TABLE IF NOT EXISTS `operation_log` `status` int(4) DEFAULT NULL COMMENT 'Operate status', `request_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Request time', `err_msg` mediumtext COMMENT 'Error message', - PRIMARY KEY (`id`) -) ENGINE = InnoDB + PRIMARY KEY (`id`), + INDEX `operation_log_group_stream_index` (`inlong_group_id`, `inlong_stream_id`), + INDEX `operation_log_request_time_index` (`request_time`) + ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; -- ---------------------------- diff --git a/inlong-manager/manager-web/sql/changes-1.10.0.sql b/inlong-manager/manager-web/sql/changes-1.10.0.sql index d67e24ee1cf..3a1abeb04b3 100644 --- a/inlong-manager/manager-web/sql/changes-1.10.0.sql +++ b/inlong-manager/manager-web/sql/changes-1.10.0.sql @@ -36,4 +36,17 @@ VALUES ('audit_sort_mysql_binlog_input', 'MYSQL_BINLOG', 0, '29'), ('audit_sort_tube_input', 'TUBEMQ', 0, '33'), ('audit_sort_tube_output', 'TUBEMQ', 1, '34'); +ALTER TABLE `operation_log` + ADD COLUMN `inlong_group_id` varchar(256) DEFAULT NULL COMMENT 'Inlong group id'; + +ALTER TABLE `operation_log` + ADD COLUMN `inlong_stream_id` varchar(256) DEFAULT NULL COMMENT 'Inlong stream id', + +ALTER TABLE `operation_log` + ADD COLUMN `operation_target` varchar(256) DEFAULT NULL COMMENT 'Operation target', + +CREATE INDEX operation_log_group_stream_index ON operation_log (`inlong_group_id`, `inlong_stream_id`); + +CREATE INDEX `operation_log_request_time_index` ON operation_log (`request_time`); + diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java index 83b17000ec8..9cc505a9e2d 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/DataNodeController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.enums.TenantUserTypeEnum; import org.apache.inlong.manager.common.validation.SaveValidation; @@ -60,7 +61,7 @@ public class DataNodeController { @PostMapping(value = "/node/save") @ApiOperation(value = "Save node") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.NODE) public Response save(@Validated(SaveValidation.class) @RequestBody DataNodeRequest request) { String currentUser = LoginUserUtils.getLoginUser().getName(); return Response.success(dataNodeService.save(request, currentUser)); @@ -84,7 +85,7 @@ public Response> list(@RequestBody DataNodePageRequest } @PostMapping(value = "/node/update") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.NODE) @ApiOperation(value = "Update data node") public Response update(@Validated(UpdateByIdValidation.class) @RequestBody DataNodeRequest request) { String username = LoginUserUtils.getLoginUser().getName(); @@ -92,7 +93,7 @@ public Response update(@Validated(UpdateByIdValidation.class) @RequestB } @PostMapping(value = "/node/updateByKey") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.NODE) @ApiOperation(value = "Update data node by key") public Response updateByKey( @Validated(UpdateByKeyValidation.class) @RequestBody DataNodeRequest request) { @@ -102,7 +103,7 @@ public Response updateByKey( @DeleteMapping(value = "/node/delete/{id}") @ApiOperation(value = "Delete data node by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.NODE) @ApiImplicitParam(name = "id", value = "Data node ID", dataTypeClass = Integer.class, required = true) public Response delete(@PathVariable Integer id) { return Response.success(dataNodeService.delete(id, LoginUserUtils.getLoginUser().getName())); @@ -110,7 +111,7 @@ public Response delete(@PathVariable Integer id) { @DeleteMapping(value = "/node/deleteByKey") @ApiOperation(value = "Delete data node by key") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.NODE) @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "Data node name", dataTypeClass = String.class, required = true), @ApiImplicitParam(name = "type", value = "Data node type", dataTypeClass = String.class, required = true) diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java index eb6fd58d521..9293ff5ed7c 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongClusterController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.validation.SaveValidation; import org.apache.inlong.manager.common.validation.UpdateByIdValidation; @@ -74,7 +75,7 @@ public class InlongClusterController { @PostMapping(value = "/cluster/tag/save") @ApiOperation(value = "Save cluster tag") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response saveTag(@Validated(SaveValidation.class) @RequestBody ClusterTagRequest request) { String currentUser = LoginUserUtils.getLoginUser().getName(); @@ -98,7 +99,7 @@ public Response> listTag(@RequestBody ClusterTagP } @PostMapping(value = "/cluster/tag/update") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Update cluster tag") @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response updateTag(@Validated(UpdateValidation.class) @RequestBody ClusterTagRequest request) { @@ -108,7 +109,7 @@ public Response updateTag(@Validated(UpdateValidation.class) @RequestBo @DeleteMapping(value = "/cluster/tag/delete/{id}") @ApiOperation(value = "Delete cluster tag by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = Integer.class, required = true) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response deleteTag(@PathVariable Integer id) { @@ -117,7 +118,7 @@ public Response deleteTag(@PathVariable Integer id) { @PostMapping(value = "/cluster/tenant/tag/save") @ApiOperation(value = "Save tenant cluster tag") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response saveTenantTag( @Validated(SaveValidation.class) @RequestBody TenantClusterTagRequest request) { @@ -147,7 +148,7 @@ public Response> listByTenantRole( @DeleteMapping(value = "/cluster/tenant/tag/delete/{id}") @ApiOperation(value = "Delete tenant cluster tag by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = Integer.class, required = true) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response deleteTenantTag(@PathVariable Integer id) { @@ -156,7 +157,7 @@ public Response deleteTenantTag(@PathVariable Integer id) { @PostMapping(value = "/cluster/save") @ApiOperation(value = "Save cluster") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response save(@Validated(SaveValidation.class) @RequestBody ClusterRequest request) { String currentUser = LoginUserUtils.getLoginUser().getName(); @@ -181,7 +182,7 @@ public Response> list(@RequestBody ClusterPageRequest re } @PostMapping(value = "/cluster/update") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Update cluster") @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response update(@Validated(UpdateByIdValidation.class) @RequestBody ClusterRequest request) { @@ -190,7 +191,7 @@ public Response update(@Validated(UpdateByIdValidation.class) @RequestB } @PostMapping(value = "/cluster/updateByKey") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Update cluster by key") @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response updateByKey( @@ -200,7 +201,7 @@ public Response updateByKey( } @PostMapping(value = "/cluster/bindTag") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Bind or unbind cluster tag") @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response bindTag(@Validated @RequestBody BindTagRequest request) { @@ -210,7 +211,7 @@ public Response bindTag(@Validated @RequestBody BindTagRequest request) @DeleteMapping(value = "/cluster/delete/{id}") @ApiOperation(value = "Delete cluster by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster ID", dataTypeClass = Integer.class, required = true) @RequiresRoles(UserRoleCode.INLONG_ADMIN) public Response delete(@PathVariable Integer id) { @@ -219,7 +220,7 @@ public Response delete(@PathVariable Integer id) { @DeleteMapping(value = "/cluster/deleteByKey") @ApiOperation(value = "Delete cluster by cluster name and type") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "Cluster name", dataTypeClass = String.class, required = true), @ApiImplicitParam(name = "type", value = "Cluster type", dataTypeClass = String.class, required = true), @@ -232,7 +233,7 @@ public Response deleteByKey(@RequestParam String name, @RequestParam St @PostMapping(value = "/cluster/node/save") @ApiOperation(value = "Save cluster node") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) public Response saveNode(@Validated @RequestBody ClusterNodeRequest request) { String currentUser = LoginUserUtils.getLoginUser().getName(); return Response.success(clusterService.saveNode(request, currentUser)); @@ -260,14 +261,14 @@ public Response> listNode(@RequestBody ClusterPa @ApiImplicitParam(name = "clusterType", dataTypeClass = String.class, required = true), @ApiImplicitParam(name = "protocolType", dataTypeClass = String.class, required = false) }) - @OperationLog(operation = OperationType.GET) + @OperationLog(operation = OperationType.GET, operationTarget = OperationTarget.CLUSTER) public Response> listByGroupId(@RequestParam String inlongGroupId, @RequestParam String clusterType, @RequestParam(required = false) String protocolType) { return Response.success(clusterService.listNodeByGroupId(inlongGroupId, clusterType, protocolType)); } @RequestMapping(value = "/cluster/node/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Update cluster node") public Response updateNode(@Validated(UpdateValidation.class) @RequestBody ClusterNodeRequest request) { String username = LoginUserUtils.getLoginUser().getName(); @@ -276,7 +277,7 @@ public Response updateNode(@Validated(UpdateValidation.class) @RequestB @RequestMapping(value = "/cluster/node/delete/{id}", method = RequestMethod.DELETE) @ApiOperation(value = "Delete cluster node") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster node ID", dataTypeClass = Integer.class, required = true) public Response deleteNode(@PathVariable Integer id) { return Response.success(clusterService.deleteNode(id, LoginUserUtils.getLoginUser().getName())); diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java index 6433f46655b..66b204cffa4 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongConsumeController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.enums.TenantUserTypeEnum; import org.apache.inlong.manager.common.validation.UpdateValidation; @@ -61,7 +62,7 @@ public class InlongConsumeController { private InlongConsumeProcessService consumeProcessService; @RequestMapping(value = "/consume/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CONSUME) @ApiOperation(value = "Save inlong consume") public Response save(@RequestBody InlongConsumeRequest request) { String operator = LoginUserUtils.getLoginUser().getName(); @@ -91,14 +92,14 @@ public Response> list(@RequestBody InlongCons } @PostMapping("/consume/update") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CONSUME) @ApiOperation(value = "Update inlong consume") public Response update(@Validated(UpdateValidation.class) @RequestBody InlongConsumeRequest request) { return Response.success(consumeService.update(request, LoginUserUtils.getLoginUser().getName())); } @DeleteMapping("/consume/delete/{id}") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CONSUME) @ApiOperation(value = "Delete inlong consume by ID") @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass = Integer.class, required = true) public Response delete(@PathVariable(name = "id") Integer id) { @@ -106,7 +107,7 @@ public Response delete(@PathVariable(name = "id") Integer id) { } @PostMapping("/consume/startProcess/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CONSUME) @ApiOperation(value = "Start inlong consume process") @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass = Integer.class, required = true) public Response startProcess(@PathVariable(name = "id") Integer id) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java index edf6ed6a339..2e49fd93806 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongGroupController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.enums.TenantUserTypeEnum; import org.apache.inlong.manager.common.validation.SaveValidation; @@ -68,7 +69,7 @@ public class InlongGroupController { private InlongGroupProcessService groupProcessOperation; @RequestMapping(value = "/group/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.GROUP) @ApiOperation(value = "Save inlong group") public Response save(@Validated(SaveValidation.class) @RequestBody InlongGroupRequest groupRequest) { String operator = LoginUserUtils.getLoginUser().getName(); @@ -126,7 +127,7 @@ public Response> listBrief(@RequestBody InlongG } @RequestMapping(value = "/group/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.GROUP) @ApiOperation(value = "Update inlong group") public Response update(@Validated(UpdateValidation.class) @RequestBody InlongGroupRequest groupRequest) { String operator = LoginUserUtils.getLoginUser().getName(); @@ -135,7 +136,7 @@ public Response update(@Validated(UpdateValidation.class) @RequestBody I @RequestMapping(value = "/group/delete/{groupId}", method = RequestMethod.DELETE) @ApiOperation(value = "Delete inlong group info") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.GROUP) @ApiImplicitParam(name = "groupId", value = "Inlong group id", dataTypeClass = String.class, required = true) public Response delete(@PathVariable String groupId) { String operator = LoginUserUtils.getLoginUser().getName(); @@ -144,7 +145,7 @@ public Response delete(@PathVariable String groupId) { @RequestMapping(value = "/group/deleteAsync/{groupId}", method = RequestMethod.DELETE) @ApiOperation(value = "Delete inlong group info") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.GROUP) @ApiImplicitParam(name = "groupId", value = "Inlong group id", dataTypeClass = String.class, required = true) public Response deleteAsync(@PathVariable String groupId) { String operator = LoginUserUtils.getLoginUser().getName(); diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java index 5a692629da4..5d78dab1531 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongRoleController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.pojo.common.PageResult; import org.apache.inlong.manager.pojo.common.Response; @@ -58,7 +59,7 @@ public Response get(@PathVariable int id) { } @RequestMapping(value = "/role/inlong/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.INLONG_ROLE) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) @ApiOperation(value = "Save inlong role") public Response save(@Validated @RequestBody InlongRoleRequest request) { @@ -67,7 +68,7 @@ public Response save(@Validated @RequestBody InlongRoleRequest request) } @RequestMapping(value = "/role/inlong/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.INLONG_ROLE) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) @ApiOperation(value = "Update inlong role") public Response update(@Validated @RequestBody InlongRoleRequest request) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java index 2d21e84fe29..da747818cee 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongStreamController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.exceptions.BusinessException; import org.apache.inlong.manager.common.tool.excel.ExcelTool; @@ -78,7 +79,7 @@ public class InlongStreamController { private InlongStreamProcessService streamProcessOperation; @RequestMapping(value = "/stream/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Save inlong stream") public Response save(@RequestBody InlongStreamRequest request) { int result = streamService.save(request, LoginUserUtils.getLoginUser().getName()); @@ -133,7 +134,7 @@ public Response> listAllWithGroupId(@RequestBody In } @RequestMapping(value = "/stream/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Update inlong stream") public Response update(@Validated(UpdateValidation.class) @RequestBody InlongStreamRequest request) { String username = LoginUserUtils.getLoginUser().getName(); @@ -190,7 +191,7 @@ public Response deleteProcess(@PathVariable String groupId, @PathVariab @Deprecated @RequestMapping(value = "/stream/delete", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Delete inlong stream") @ApiImplicitParams({ @ApiImplicitParam(name = "groupId", dataTypeClass = String.class, required = true), diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java index 17f78b9733a..6bc9d0d62fe 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.validation.UpdateByIdValidation; import org.apache.inlong.manager.pojo.common.PageResult; @@ -62,7 +63,7 @@ public Response get(@PathVariable String name) { } @RequestMapping(value = "/tenant/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.TENANT) @ApiOperation(value = "Save inlong tenant") @RequiresRoles(INLONG_ADMIN) public Response save(@Validated @RequestBody InlongTenantRequest request) { @@ -76,7 +77,7 @@ public Response> listByCondition(@RequestBody Inlon } @RequestMapping(value = "/tenant/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.TENANT) @ApiOperation(value = "Update inlong tenant") @RequiresRoles(INLONG_ADMIN) public Response update(@Validated(UpdateByIdValidation.class) @RequestBody InlongTenantRequest request) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java index d08ac5508d8..ffb45f96507 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/InlongTenantRoleController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.pojo.common.PageResult; import org.apache.inlong.manager.pojo.common.Response; @@ -59,7 +60,7 @@ public Response get(@PathVariable int id) { } @RequestMapping(value = "/role/tenant/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.TENANT_ROLE) @ApiOperation(value = "Save tenant role") @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) public Response save(@Validated @RequestBody TenantRoleRequest request) { @@ -68,7 +69,7 @@ public Response save(@Validated @RequestBody TenantRoleRequest request) } @RequestMapping(value = "/role/tenant/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.TENANT_ROLE) @ApiOperation(value = "Update tenant role") @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) public Response update(@Validated @RequestBody TenantRoleRequest request) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java new file mode 100644 index 00000000000..ca85d714d5d --- /dev/null +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/OperationLogController.java @@ -0,0 +1,51 @@ +/* + * 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.inlong.manager.web.controller; + +import org.apache.inlong.manager.pojo.common.PageResult; +import org.apache.inlong.manager.pojo.common.Response; +import org.apache.inlong.manager.pojo.operationLog.OperationLogRequest; +import org.apache.inlong.manager.pojo.operationLog.OperationLogResponse; +import org.apache.inlong.manager.service.operationlog.OperationLogService; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + * Operation record controller. + */ +@RestController +@RequestMapping("/api") +@Api(tags = "Operation log-API") +public class OperationLogController { + + @Autowired + private OperationLogService operationLogService; + + @RequestMapping(value = "/operationLog/list", method = RequestMethod.POST) + @ApiOperation(value = "List operation log by paginating") + public Response> listByCondition(@RequestBody OperationLogRequest request) { + return Response.success(operationLogService.listByCondition(request)); + } + +} diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java index 5b6b9b5e09f..e8d0ef93ab3 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSinkController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.validation.UpdateByIdValidation; import org.apache.inlong.manager.common.validation.UpdateByKeyValidation; @@ -59,7 +60,7 @@ public class StreamSinkController { private StreamSinkService sinkService; @RequestMapping(value = "/sink/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Save stream sink") public Response save(@Validated @RequestBody SinkRequest request) { return Response.success(sinkService.save(request, LoginUserUtils.getLoginUser().getName())); @@ -67,6 +68,7 @@ public Response save(@Validated @RequestBody SinkRequest request) { @RequestMapping(value = "/sink/get/{id}", method = RequestMethod.GET) @ApiOperation(value = "Get stream sink") + @OperationLog(operation = OperationType.GET, operationTarget = OperationTarget.SINK) @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = true) public Response get(@PathVariable Integer id) { return Response.success(sinkService.get(id, LoginUserUtils.getLoginUser())); @@ -79,14 +81,14 @@ public Response> listByCondition(@RequestBody S } @RequestMapping(value = "/sink/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Update stream sink") public Response update(@Validated(UpdateByIdValidation.class) @RequestBody SinkRequest request) { return Response.success(sinkService.update(request, LoginUserUtils.getLoginUser().getName())); } @RequestMapping(value = "/sink/updateByKey", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Update stream sink by key") public Response updateByKey( @Validated(UpdateByKeyValidation.class) @RequestBody SinkRequest request) { @@ -94,7 +96,7 @@ public Response updateByKey( } @RequestMapping(value = "/sink/delete/{id}", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Delete stream sink") @ApiImplicitParams({ @ApiImplicitParam(name = "startProcess", dataTypeClass = boolean.class), @@ -106,7 +108,7 @@ public Response delete(@PathVariable Integer id, } @RequestMapping(value = "/sink/deleteByKey", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Delete stream sink by key") @ApiImplicitParams({ @ApiImplicitParam(name = "startProcess", dataTypeClass = boolean.class), diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java index cd484532fec..f0cbbd56da6 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamSourceController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.validation.SaveValidation; import org.apache.inlong.manager.common.validation.UpdateValidation; @@ -54,7 +55,7 @@ public class StreamSourceController { StreamSourceService sourceService; @RequestMapping(value = "/source/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Save stream source") public Response save(@Validated(SaveValidation.class) @RequestBody SourceRequest request) { return Response.success(sourceService.save(request, LoginUserUtils.getLoginUser().getName())); @@ -74,14 +75,14 @@ public Response> listByCondition(@RequestBody } @RequestMapping(value = "/source/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Update stream source") public Response update(@Validated(UpdateValidation.class) @RequestBody SourceRequest request) { return Response.success(sourceService.update(request, LoginUserUtils.getLoginUser().getName())); } @RequestMapping(value = "/source/delete/{id}", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Delete stream source") @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = true) public Response delete(@PathVariable Integer id) { @@ -106,7 +107,7 @@ public Response restart(@PathVariable Integer id) { } @RequestMapping(value = "/source/forceDelete", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Force delete stream source by groupId and streamId") @ApiImplicitParams({ @ApiImplicitParam(name = "inlongGroupId", dataTypeClass = String.class, required = true), diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java index 2da355a2c79..7e803a5258e 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/StreamTransformController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.validation.UpdateValidation; import org.apache.inlong.manager.pojo.common.PageResult; @@ -52,7 +53,7 @@ public class StreamTransformController { protected StreamTransformService streamTransformService; @RequestMapping(value = "/transform/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.TRANSFORM) @ApiOperation(value = "Save stream transform") public Response save(@Validated @RequestBody TransformRequest request) { return Response.success( @@ -73,7 +74,7 @@ public Response get(@PathVariable Integer id) { } @RequestMapping(value = "/transform/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.TRANSFORM) @ApiOperation(value = "Update stream transform") public Response update(@Validated(UpdateValidation.class) @RequestBody TransformRequest request) { String operator = LoginUserUtils.getLoginUser().getName(); @@ -81,7 +82,7 @@ public Response update(@Validated(UpdateValidation.class) @RequestBody } @RequestMapping(value = "/transform/delete", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.TRANSFORM) @ApiOperation(value = "Delete stream transform") public Response delete(@Validated DeleteTransformRequest request) { String operator = LoginUserUtils.getLoginUser().getName(); diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java index 70b24dc9521..7d3f690f1df 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowApproverController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.enums.TenantUserTypeEnum; import org.apache.inlong.manager.pojo.common.PageResult; @@ -55,7 +56,7 @@ public class WorkflowApproverController { private WorkflowApproverService workflowApproverService; @PostMapping("/workflow/approver/save") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Save approver info") @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) public Response save(@RequestBody ApproverRequest config) { @@ -79,7 +80,7 @@ public Response> listByCondition(ApproverPageReques } @PostMapping("/workflow/approver/update") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Update approver info") @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) public Response update(@RequestBody ApproverRequest request) { @@ -87,7 +88,7 @@ public Response update(@RequestBody ApproverRequest request) { } @DeleteMapping("/workflow/approver/delete/{id}") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Delete approver by ID") @ApiImplicitParam(name = "id", value = "Workflow approver ID", dataTypeClass = Integer.class, required = true) @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java index b38fd6a298b..50bf6fe64f8 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.pojo.common.PageResult; import org.apache.inlong.manager.pojo.common.Response; @@ -65,7 +66,7 @@ public class WorkflowController { private WorkflowService workflowService; @PostMapping("/workflow/start") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Initiation process") public Response start(@RequestBody WorkflowOperationRequest request) { String applicant = LoginUserUtils.getLoginUser().getName(); @@ -73,7 +74,7 @@ public Response start(@RequestBody WorkflowOperationRequest requ } @PostMapping("/workflow/cancel/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Cancellation process") @ApiImplicitParam(name = "id", value = "Process ID", dataTypeClass = Integer.class, required = true) public Response cancel(@PathVariable Integer id, @RequestBody WorkflowOperationRequest request) { @@ -82,7 +83,7 @@ public Response cancel(@PathVariable Integer id, @RequestBody Wo } @PostMapping("/workflow/continue/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Continue process") @ApiImplicitParam(name = "id", value = "Process ID", dataTypeClass = Integer.class, required = true) public Response continueProcess(@PathVariable Integer id, @@ -92,7 +93,7 @@ public Response continueProcess(@PathVariable Integer id, } @PostMapping("/workflow/approve/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Approval and consent") @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = Integer.class, required = true) public Response approve(@PathVariable Integer id, @RequestBody WorkflowApprovalRequest request) { @@ -101,7 +102,7 @@ public Response approve(@PathVariable Integer id, @RequestBody W } @PostMapping("/workflow/reject/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Approval rejected") @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = Integer.class, required = true) public Response reject(@PathVariable Integer id, @RequestBody WorkflowApprovalRequest request) { @@ -110,7 +111,7 @@ public Response reject(@PathVariable Integer id, @RequestBody Wo } @PostMapping("/workflow/transfer/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Turn to another approver", notes = "Change approver") @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = Integer.class, required = true) public Response transfer(@PathVariable Integer id, @RequestBody WorkflowApprovalRequest request) { @@ -120,7 +121,7 @@ public Response transfer(@PathVariable Integer id, @RequestBody } @PostMapping("/workflow/complete/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Complete task by ID") @ApiImplicitParam(name = "id", value = "Task ID", dataTypeClass = Integer.class, required = true) public Response complete(@PathVariable Integer id, @RequestBody WorkflowApprovalRequest request) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java index 4ae48176c2f..e8ea4529676 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/WorkflowEventController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.enums.ProcessEvent; import org.apache.inlong.manager.common.enums.TaskEvent; @@ -66,7 +67,7 @@ public Response> list(EventLogRequest query) { @Deprecated @PostMapping("/workflow/event/executeEventListener/{id}") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Execute the listener based on the event log ID") @ApiImplicitParam(name = "id", value = "Event log ID", dataTypeClass = Integer.class, required = true) public Response executeEventListener(@PathVariable Integer id) { @@ -76,7 +77,7 @@ public Response executeEventListener(@PathVariable Integer id) { @Deprecated @PostMapping("/workflow/event/executeProcessEventListener") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Re-execute the specified listener based on the process ID") @ApiImplicitParams({ @ApiImplicitParam(name = "processId", value = "Process ID", dataTypeClass = Integer.class), @@ -90,7 +91,7 @@ public Response executeProcessEventListener(@RequestParam Integer proces @Deprecated @PostMapping("/workflow/event/executeTaskEventListener") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Re-execute the specified listener based on the task ID") @ApiImplicitParams({ @ApiImplicitParam(name = "taskId", value = "Task ID", dataTypeClass = Integer.class), @@ -103,7 +104,7 @@ public Response executeTaskEventListener(Integer taskId, String listener @Deprecated @PostMapping("/workflow/event/triggerProcessEvent") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Re-trigger the process event based on the process ID") public Response triggerProcessEvent( @ApiParam(value = "process id", required = true) Integer processId, @@ -114,7 +115,7 @@ public Response triggerProcessEvent( @Deprecated @PostMapping("/workflow/event/triggerTaskEvent") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.WORKFLOW) @ApiOperation(value = "Re-trigger the task event based on the task ID") public Response triggerTaskEvent( @ApiParam(value = "task id", required = true) Integer taskId, diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java index 833580edc39..37845aeb007 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenDataNodeController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.Preconditions; import org.apache.inlong.manager.common.validation.SaveValidation; @@ -75,7 +76,7 @@ public Response> list(@RequestBody DataNodePageRequest reques @PostMapping(value = "/node/save") @ApiOperation(value = "Save node") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.NODE) public Response save(@Validated(SaveValidation.class) @RequestBody DataNodeRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -84,7 +85,7 @@ public Response save(@Validated(SaveValidation.class) @RequestBody Data @PostMapping(value = "/node/update") @ApiOperation(value = "Update data node") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.NODE) public Response update(@Validated(UpdateByIdValidation.class) @RequestBody DataNodeRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.REQUEST_IS_EMPTY); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -93,7 +94,7 @@ public Response update(@Validated(UpdateByIdValidation.class) @RequestB @DeleteMapping(value = "/node/delete/{id}") @ApiOperation(value = "Delete data node by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.NODE) @ApiImplicitParam(name = "id", value = "Data node ID", dataTypeClass = Integer.class, required = true) public Response delete(@PathVariable Integer id) { Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "data node id cannot be null"); diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java index f72e66a416a..ebbfd442ef7 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongClusterController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.enums.TenantUserTypeEnum; import org.apache.inlong.manager.common.util.Preconditions; @@ -94,7 +95,7 @@ public Response> listTag(@RequestBody ClusterTagPageReq @PostMapping(value = "/cluster/tag/save") @ApiOperation(value = "Save cluster tag") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) public Response saveTag(@Validated(SaveValidation.class) @RequestBody ClusterTagRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -102,7 +103,7 @@ public Response saveTag(@Validated(SaveValidation.class) @RequestBody C } @PostMapping(value = "/cluster/tag/update") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Update cluster tag") public Response updateTag(@Validated(UpdateValidation.class) @RequestBody ClusterTagRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -112,7 +113,7 @@ public Response updateTag(@Validated(UpdateValidation.class) @RequestBo @DeleteMapping(value = "/cluster/tag/delete/{id}") @ApiOperation(value = "Delete cluster tag by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = Integer.class, required = true) public Response deleteTag(@PathVariable Integer id) { Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "tag id cannot be null"); @@ -141,7 +142,7 @@ public Response> list(@RequestBody ClusterPageRequest request) @PostMapping(value = "/cluster/save") @ApiOperation(value = "Save cluster") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) public Response save(@Validated(SaveValidation.class) @RequestBody ClusterRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -150,7 +151,7 @@ public Response save(@Validated(SaveValidation.class) @RequestBody Clus @PostMapping(value = "/cluster/update") @ApiOperation(value = "Update cluster") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) public Response update(@Validated(UpdateByIdValidation.class) @RequestBody ClusterRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -159,7 +160,7 @@ public Response update(@Validated(UpdateByIdValidation.class) @RequestB @PostMapping(value = "/cluster/bindTag") @ApiOperation(value = "Bind or unbind cluster tag") - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) public Response bindTag(@Validated @RequestBody BindTagRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -168,7 +169,7 @@ public Response bindTag(@Validated @RequestBody BindTagRequest request) @DeleteMapping(value = "/cluster/delete/{id}") @ApiOperation(value = "Delete cluster by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster ID", dataTypeClass = Integer.class, required = true) public Response delete(@PathVariable Integer id) { Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "cluster id cannot be null"); @@ -200,7 +201,7 @@ public Response> listNode(@RequestBody ClusterPageRequ @ApiImplicitParam(name = "clusterType", dataTypeClass = String.class, required = true), @ApiImplicitParam(name = "protocolType", dataTypeClass = String.class, required = false) }) - @OperationLog(operation = OperationType.GET) + @OperationLog(operation = OperationType.GET, operationTarget = OperationTarget.CLUSTER) public Response> listByGroupId(@RequestParam String inlongGroupId, @RequestParam String clusterType, @RequestParam(required = false) String protocolType) { Preconditions.expectNotBlank(inlongGroupId, ErrorCodeEnum.INVALID_PARAMETER, "inlongGroupId cannot be blank"); @@ -212,7 +213,7 @@ public Response> listByGroupId(@RequestParam String in @PostMapping(value = "/cluster/node/save") @ApiOperation(value = "Save cluster node") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) public Response saveNode(@Validated @RequestBody ClusterNodeRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); Preconditions.expectNotNull(LoginUserUtils.getLoginUser(), ErrorCodeEnum.LOGIN_USER_EMPTY); @@ -220,7 +221,7 @@ public Response saveNode(@Validated @RequestBody ClusterNodeRequest req } @RequestMapping(value = "/cluster/node/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CLUSTER) @ApiOperation(value = "Update cluster node") public Response updateNode(@Validated(UpdateValidation.class) @RequestBody ClusterNodeRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -230,7 +231,7 @@ public Response updateNode(@Validated(UpdateValidation.class) @RequestB @RequestMapping(value = "/cluster/node/delete/{id}", method = RequestMethod.DELETE) @ApiOperation(value = "Delete cluster node") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster node ID", dataTypeClass = Integer.class, required = true) public Response deleteNode(@PathVariable Integer id) { Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "cluster id cannot be null"); @@ -240,7 +241,7 @@ public Response deleteNode(@PathVariable Integer id) { @PostMapping(value = "/cluster/tenant/tag/save") @ApiOperation(value = "Save tenant cluster tag") - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CLUSTER) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response saveTenantTag( @Validated(SaveValidation.class) @RequestBody TenantClusterTagRequest request) { @@ -270,7 +271,7 @@ public Response> listByTenantRole( @DeleteMapping(value = "/cluster/tenant/tag/delete/{id}") @ApiOperation(value = "Delete tenant cluster tag by id") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CLUSTER) @ApiImplicitParam(name = "id", value = "Cluster tag ID", dataTypeClass = Integer.class, required = true) @RequiresRoles(value = UserRoleCode.INLONG_ADMIN) public Response deleteTenantTag(@PathVariable Integer id) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java index 97eb20e31bb..8dca1ad748b 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongGroupController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.Preconditions; import org.apache.inlong.manager.common.validation.SaveValidation; @@ -79,7 +80,7 @@ public Response> listBrief(@RequestBody InlongGroupPa } @RequestMapping(value = "/group/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.GROUP) @ApiOperation(value = "Save inlong group") public Response save(@Validated(SaveValidation.class) @RequestBody InlongGroupRequest groupRequest) { Preconditions.expectNotNull(groupRequest, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -88,7 +89,7 @@ public Response save(@Validated(SaveValidation.class) @RequestBody Inlon } @RequestMapping(value = "/group/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.GROUP) @ApiOperation(value = "Update inlong group") public Response update(@Validated(UpdateValidation.class) @RequestBody InlongGroupRequest groupRequest) { Preconditions.expectNotNull(groupRequest, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -98,7 +99,7 @@ public Response update(@Validated(UpdateValidation.class) @RequestBody I @RequestMapping(value = "/group/delete/{groupId}", method = RequestMethod.DELETE) @ApiOperation(value = "Delete inlong group info") - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.GROUP) @ApiImplicitParam(name = "groupId", value = "Inlong group id", dataTypeClass = String.class, required = true) public Response delete(@PathVariable String groupId) { Preconditions.expectNotBlank(groupId, ErrorCodeEnum.INVALID_PARAMETER, "groupId cannot be blank"); diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java index 7115132581d..893e0e589b2 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInLongStreamController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.Preconditions; import org.apache.inlong.manager.common.validation.UpdateValidation; @@ -96,7 +97,7 @@ public Response> listByCondition(@RequestBody Inlong } @RequestMapping(value = "/stream/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Save inlong stream") public Response save(@RequestBody InlongStreamRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -105,7 +106,7 @@ public Response save(@RequestBody InlongStreamRequest request) { } @RequestMapping(value = "/stream/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Update inlong stream") public Response update(@Validated(UpdateValidation.class) @RequestBody InlongStreamRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -114,7 +115,7 @@ public Response update(@Validated(UpdateValidation.class) @RequestBody } @RequestMapping(value = "/stream/delete", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Delete inlong stream") @ApiImplicitParams({ @ApiImplicitParam(name = "groupId", dataTypeClass = String.class, required = true), diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java new file mode 100644 index 00000000000..29d8a4c2c83 --- /dev/null +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongConsumeController.java @@ -0,0 +1,118 @@ +/* + * 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.inlong.manager.web.controller.openapi; + +import org.apache.inlong.manager.common.enums.OperationTarget; +import org.apache.inlong.manager.common.enums.OperationType; +import org.apache.inlong.manager.common.enums.TenantUserTypeEnum; +import org.apache.inlong.manager.common.validation.UpdateValidation; +import org.apache.inlong.manager.pojo.common.PageResult; +import org.apache.inlong.manager.pojo.common.Response; +import org.apache.inlong.manager.pojo.consume.InlongConsumeBriefInfo; +import org.apache.inlong.manager.pojo.consume.InlongConsumeCountInfo; +import org.apache.inlong.manager.pojo.consume.InlongConsumeInfo; +import org.apache.inlong.manager.pojo.consume.InlongConsumePageRequest; +import org.apache.inlong.manager.pojo.consume.InlongConsumeRequest; +import org.apache.inlong.manager.pojo.user.LoginUserUtils; +import org.apache.inlong.manager.pojo.workflow.WorkflowResult; +import org.apache.inlong.manager.service.consume.InlongConsumeProcessService; +import org.apache.inlong.manager.service.consume.InlongConsumeService; +import org.apache.inlong.manager.service.operationlog.OperationLog; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +/** + * Inlong consume control layer + */ +@RestController +@RequestMapping("/openapi") +@Api(tags = "Open-Consume-API") +public class OpenInlongConsumeController { + + @Autowired + private InlongConsumeService consumeService; + @Autowired + private InlongConsumeProcessService consumeProcessService; + + @RequestMapping(value = "/consume/save", method = RequestMethod.POST) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.CONSUME) + @ApiOperation(value = "Save inlong consume") + public Response save(@RequestBody InlongConsumeRequest request) { + String operator = LoginUserUtils.getLoginUser().getName(); + return Response.success(consumeService.save(request, operator)); + } + + @GetMapping("/consume/get/{id}") + @ApiOperation(value = "Get inlong consume") + @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass = Integer.class, required = true) + public Response get(@PathVariable(name = "id") Integer id) { + return Response.success(consumeService.get(id, LoginUserUtils.getLoginUser().getName())); + } + + @GetMapping(value = "/consume/countStatus") + @ApiOperation(value = "Count inlong consume status by current user") + public Response countStatusByUser() { + return Response.success(consumeService.countStatus(LoginUserUtils.getLoginUser().getName())); + } + + @PostMapping("/consume/list") + @ApiOperation(value = "List inlong consume by pagination") + public Response> list(@RequestBody InlongConsumePageRequest request) { + request.setCurrentUser(LoginUserUtils.getLoginUser().getName()); + request.setIsAdminRole( + LoginUserUtils.getLoginUser().getRoles().contains(TenantUserTypeEnum.TENANT_ADMIN.name())); + return Response.success(consumeService.list(request)); + } + + @PostMapping("/consume/update") + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CONSUME) + @ApiOperation(value = "Update inlong consume") + public Response update(@Validated(UpdateValidation.class) @RequestBody InlongConsumeRequest request) { + return Response.success(consumeService.update(request, LoginUserUtils.getLoginUser().getName())); + } + + @DeleteMapping("/consume/delete/{id}") + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.CONSUME) + @ApiOperation(value = "Delete inlong consume by ID") + @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass = Integer.class, required = true) + public Response delete(@PathVariable(name = "id") Integer id) { + return Response.success(consumeService.delete(id, LoginUserUtils.getLoginUser().getName())); + } + + @PostMapping("/consume/startProcess/{id}") + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.CONSUME) + @ApiOperation(value = "Start inlong consume process") + @ApiImplicitParam(name = "id", value = "Inlong consume ID", dataTypeClass = Integer.class, required = true) + public Response startProcess(@PathVariable(name = "id") Integer id) { + String username = LoginUserUtils.getLoginUser().getName(); + return Response.success(consumeProcessService.startProcess(id, username)); + } + +} diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java index 6f9bd2a79f1..b14b40777db 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller.openapi; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.validation.UpdateByIdValidation; import org.apache.inlong.manager.pojo.common.PageResult; @@ -55,7 +56,7 @@ public Response get(@PathVariable String name) { } @RequestMapping(value = "/tenant/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.TENANT) @ApiOperation(value = "Save inlong tenant") public Response save(@Validated @RequestBody InlongTenantRequest request) { return Response.success(tenantService.save(request)); @@ -68,7 +69,7 @@ public Response> listByCondition(@RequestBody Inlon } @RequestMapping(value = "/tenant/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.TENANT) @ApiOperation(value = "Update inlong tenant") public Response update(@Validated(UpdateByIdValidation.class) @RequestBody InlongTenantRequest request) { return Response.success(tenantService.update(request)); diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java index 37f478cc3d8..7e24b866e8b 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenInlongTenantRoleController.java @@ -17,6 +17,7 @@ package org.apache.inlong.manager.web.controller.openapi; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.pojo.common.PageResult; import org.apache.inlong.manager.pojo.common.Response; @@ -59,7 +60,7 @@ public Response get(@PathVariable int id) { } @RequestMapping(value = "/role/tenant/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.TENANT) @ApiOperation(value = "Save tenant role") @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) public Response save(@Validated @RequestBody TenantRoleRequest request) { @@ -68,7 +69,7 @@ public Response save(@Validated @RequestBody TenantRoleRequest request) } @RequestMapping(value = "/role/tenant/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.TENANT) @ApiOperation(value = "Update tenant role") @RequiresRoles(logical = Logical.OR, value = {UserRoleCode.TENANT_ADMIN, UserRoleCode.INLONG_ADMIN}) public Response update(@Validated @RequestBody TenantRoleRequest request) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java index d85c43a5ab8..d69f0895f43 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSinkController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.Preconditions; import org.apache.inlong.manager.common.validation.UpdateByIdValidation; @@ -57,6 +58,7 @@ public class OpenStreamSinkController { @RequestMapping(value = "/sink/get/{id}", method = RequestMethod.GET) @ApiOperation(value = "Get stream sink") + @OperationLog(operation = OperationType.GET, operationTarget = OperationTarget.SINK) @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = true) public Response get(@PathVariable Integer id) { Preconditions.expectNotNull(id, ErrorCodeEnum.INVALID_PARAMETER, "sinkId cannot be null"); @@ -73,7 +75,7 @@ public Response> listByCondition(@RequestBody SinkPag } @RequestMapping(value = "/sink/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Save stream sink") public Response save(@Validated @RequestBody SinkRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -82,7 +84,7 @@ public Response save(@Validated @RequestBody SinkRequest request) { } @RequestMapping(value = "/sink/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Update stream sink") public Response update(@Validated(UpdateByIdValidation.class) @RequestBody SinkRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -91,7 +93,7 @@ public Response update(@Validated(UpdateByIdValidation.class) @RequestB } @RequestMapping(value = "/sink/delete/{id}", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.SINK) @ApiOperation(value = "Delete stream sink") @ApiImplicitParams({ @ApiImplicitParam(name = "startProcess", dataTypeClass = boolean.class), diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java index 5e5ef9adc3e..6bd7ab19ddb 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamSourceController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.Preconditions; import org.apache.inlong.manager.common.validation.SaveValidation; @@ -71,7 +72,7 @@ public Response> listByCondition(@RequestBody } @RequestMapping(value = "/source/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Save stream source") public Response save(@Validated(SaveValidation.class) @RequestBody SourceRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -80,7 +81,7 @@ public Response save(@Validated(SaveValidation.class) @RequestBody Sour } @RequestMapping(value = "/source/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Update stream source") public Response update(@Validated(UpdateValidation.class) @RequestBody SourceRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -89,7 +90,7 @@ public Response update(@Validated(UpdateValidation.class) @RequestBody } @RequestMapping(value = "/source/delete/{id}", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.DELETE) + @OperationLog(operation = OperationType.DELETE, operationTarget = OperationTarget.SOURCE) @ApiOperation(value = "Delete stream source") @ApiImplicitParam(name = "id", dataTypeClass = Integer.class, required = true) public Response delete(@PathVariable Integer id) { diff --git a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java index 66a45e74e9a..80d939d5ff7 100644 --- a/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java +++ b/inlong-manager/manager-web/src/main/java/org/apache/inlong/manager/web/controller/openapi/OpenStreamTransformController.java @@ -18,6 +18,7 @@ package org.apache.inlong.manager.web.controller.openapi; import org.apache.inlong.manager.common.enums.ErrorCodeEnum; +import org.apache.inlong.manager.common.enums.OperationTarget; import org.apache.inlong.manager.common.enums.OperationType; import org.apache.inlong.manager.common.util.Preconditions; import org.apache.inlong.manager.common.validation.UpdateValidation; @@ -63,7 +64,7 @@ public Response> list(@RequestParam("inlongGroupId") Str } @RequestMapping(value = "/transform/save", method = RequestMethod.POST) - @OperationLog(operation = OperationType.CREATE) + @OperationLog(operation = OperationType.CREATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Save stream transform") public Response save(@Validated @RequestBody TransformRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -73,7 +74,7 @@ public Response save(@Validated @RequestBody TransformRequest request) } @RequestMapping(value = "/transform/update", method = RequestMethod.POST) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Update stream transform") public Response update(@Validated(UpdateValidation.class) @RequestBody TransformRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null"); @@ -82,7 +83,7 @@ public Response update(@Validated(UpdateValidation.class) @RequestBody } @RequestMapping(value = "/transform/delete", method = RequestMethod.DELETE) - @OperationLog(operation = OperationType.UPDATE) + @OperationLog(operation = OperationType.UPDATE, operationTarget = OperationTarget.STREAM) @ApiOperation(value = "Delete stream transform") public Response delete(@Validated DeleteTransformRequest request) { Preconditions.expectNotNull(request, ErrorCodeEnum.INVALID_PARAMETER, "request cannot be null");