This is an automated email from the ASF dual-hosted git repository.
benjobs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git
The following commit(s) were added to refs/heads/dev by this push:
new 9cbb92ecb [Feature] Support openapi3 & accessToken unit test (#2459)
9cbb92ecb is described below
commit 9cbb92ecb6eb3bdb70f3a6661c9eda7c82da741d
Author: lvshaokang <[email protected]>
AuthorDate: Sat Apr 15 23:52:30 2023 +0800
[Feature] Support openapi3 & accessToken unit test (#2459)
* [Feature] Support openapi3
* feat: add operation and tag
---------
Co-authored-by: benjobs <[email protected]>
---
.../streampark-console-service/pom.xml | 29 ++-
.../console/base/config/OpenapiConfig.java | 79 ++++++++
.../console/base/config/SwaggerConfig.java | 141 --------------
.../console/base/domain/RestRequest.java | 11 ++
.../console/core/bean/AlertConfigWithParams.java | 26 +--
.../console/core/bean/AlertDingTalkParams.java | 23 ++-
.../console/core/bean/AlertEmailParams.java | 7 +-
.../console/core/bean/AlertHttpCallbackParams.java | 17 +-
.../console/core/bean/AlertLarkParams.java | 20 +-
.../console/core/bean/AlertWeComParams.java | 7 +-
.../console/core/controller/AlertController.java | 65 ++-----
.../ApplicationBuildPipelineController.java | 46 ++---
.../core/controller/ApplicationController.java | 216 +++++++++++----------
.../controller/ApplicationHistoryController.java | 14 +-
.../console/core/controller/ConfigController.java | 9 +
.../core/controller/ExternalLinkController.java | 40 ++--
.../core/controller/FlinkClusterController.java | 12 ++
.../core/controller/FlinkEnvController.java | 11 ++
.../controller/FlinkPodTemplateController.java | 8 +
.../core/controller/FlinkSqlController.java | 13 +-
.../console/core/controller/IndexController.java | 2 +
.../console/core/controller/MessageController.java | 5 +
.../console/core/controller/ProjectController.java | 17 ++
.../core/controller/SavePointController.java | 35 ++--
.../console/core/controller/SettingController.java | 8 +
.../core/controller/VariableController.java | 11 ++
.../core/controller/YarnQueueController.java | 58 ++----
.../console/system/authentication/ShiroConfig.java | 7 +-
.../system/controller/AccessTokenController.java | 64 +++++-
.../system/controller/MemberController.java | 10 +
.../console/system/controller/MenuController.java | 8 +
.../system/controller/PassportController.java | 5 +
.../console/system/controller/RoleController.java | 9 +
.../console/system/controller/TeamController.java | 8 +
.../console/system/controller/UserController.java | 19 ++
.../src/main/resources/application.yml | 10 +-
.../resources/mapper/system/AccessTokenMapper.xml | 2 +-
.../core/service/AccessTokenServiceTest.java | 30 ++-
38 files changed, 622 insertions(+), 480 deletions(-)
diff --git a/streampark-console/streampark-console-service/pom.xml
b/streampark-console/streampark-console-service/pom.xml
index 9259dadcb..67dd320d7 100644
--- a/streampark-console/streampark-console-service/pom.xml
+++ b/streampark-console/streampark-console-service/pom.xml
@@ -41,8 +41,8 @@
<MaxPermGen>512m</MaxPermGen>
<CodeCacheSize>512m</CodeCacheSize>
- <swagger-bootstrap.version>2.0.9</swagger-bootstrap.version>
- <springfox.version>3.0.0</springfox.version>
+ <knife4j-openapi3.version>4.0.0</knife4j-openapi3.version>
+ <springdoc-openapi-ui.version>1.6.9</springdoc-openapi-ui.version>
<commons-compress.version>1.21</commons-compress.version>
<javax-mail.version>1.4.7</javax-mail.version>
<shiro.version>1.10.0</shiro.version>
@@ -358,24 +358,23 @@
<artifactId>jackson-module-scala_${scala.binary.version}</artifactId>
</dependency>
- <!-- swagger 3 -->
+ <!-- openapi -->
<dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-boot-starter</artifactId>
- <version>${springfox.version}</version>
+ <groupId>org.springdoc</groupId>
+ <artifactId>springdoc-openapi-ui</artifactId>
+ <version>${springdoc-openapi-ui.version}</version>
</dependency>
- <!-- swagger-bootstrap -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
- <artifactId>knife4j-spring-ui</artifactId>
- <version>${swagger-bootstrap.version}</version>
- </dependency>
-
- <dependency>
- <groupId>com.github.xiaoymin</groupId>
- <artifactId>knife4j-spring-boot-autoconfigure</artifactId>
- <version>${swagger-bootstrap.version}</version>
+ <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
+ <version>${knife4j-openapi3.version}</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>springdoc-openapi-webflux-core</artifactId>
+ <groupId>org.springdoc</groupId>
+ </exclusion>
+ </exclusions>
</dependency>
<!--Test dependencies start.-->
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/OpenapiConfig.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/OpenapiConfig.java
new file mode 100644
index 000000000..e076dece2
--- /dev/null
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/OpenapiConfig.java
@@ -0,0 +1,79 @@
+/*
+ * 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.streampark.console.base.config;
+
+import org.apache.http.HttpHeaders;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import io.swagger.v3.oas.models.Components;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Contact;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import io.swagger.v3.oas.models.security.SecurityRequirement;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springdoc.core.GroupedOpenApi;
+import
org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.Collections;
+
+@EnableKnife4j
+@Configuration
+@ConditionalOnWebApplication
+public class OpenapiConfig implements WebMvcConfigurer {
+
+ @Bean
+ public OpenAPI apiV1Info() {
+ return new OpenAPI()
+ .info(
+ new Info()
+ .title("Apache StreamPark Api Docs")
+ .description("Apache StreamPark Api Docs")
+ .contact(
+ new Contact()
+ .name("Apache StreamPark")
+ .url("https://streampark.apache.org/")
+ .email("[email protected]"))
+ .version("2.1.0-SNAPSHOT")
+ .license(new License().name("Apache-2.0 license")))
+ .components(
+ new Components()
+ .addSecuritySchemes(
+ HttpHeaders.AUTHORIZATION,
+ new SecurityScheme()
+ .type(SecurityScheme.Type.APIKEY)
+ .name(HttpHeaders.AUTHORIZATION)
+ .in(SecurityScheme.In.HEADER)))
+ .security(
+ Collections.singletonList(
+ new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)));
+ }
+
+ @Bean
+ public GroupedOpenApi publicApiV1() {
+ return
GroupedOpenApi.builder().group("v1").pathsToExclude("/v2/**").build();
+ }
+
+ @Bean
+ public GroupedOpenApi publicApiV2() {
+ return GroupedOpenApi.builder().group("v2").pathsToMatch("/v2/**").build();
+ }
+}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
deleted file mode 100644
index 7355dc3fa..000000000
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/SwaggerConfig.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.streampark.console.base.config;
-
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Value;
-import
org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
-import
org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
-import
org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
-import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
-import org.springframework.boot.actuate.endpoint.web.EndpointLinksResolver;
-import org.springframework.boot.actuate.endpoint.web.EndpointMapping;
-import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes;
-import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint;
-import org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier;
-import
org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
-import
org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
-import
org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
-import
org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-import org.springframework.util.StringUtils;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.oas.annotations.EnableOpenApi;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.ApiKey;
-import springfox.documentation.service.AuthorizationScope;
-import springfox.documentation.service.Contact;
-import springfox.documentation.service.SecurityReference;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContextBuilder;
-import springfox.documentation.spring.web.plugins.Docket;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-@Configuration
-@EnableOpenApi
-@ConditionalOnWebApplication
-public class SwaggerConfig implements WebMvcConfigurer {
-
- @Value("${swagger.enable:false}")
- private Boolean swaggerEnabled;
-
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.OAS_30)
- .enable(swaggerEnabled)
- .apiInfo(apiInfo())
- .securitySchemes(
- Collections.singletonList(new ApiKey("Authorization",
"Authorization", "header")))
- .securityContexts(
- Collections.singletonList(
- new SecurityContextBuilder()
- .securityReferences(
- Collections.singletonList(
- SecurityReference.builder()
- .scopes(new AuthorizationScope[0])
- .reference("Authorization")
- .build()))
- .operationSelector(s -> true)
- .build()))
- .select()
- .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- .paths(PathSelectors.any())
- .build();
- }
-
- private ApiInfo apiInfo() {
- return new ApiInfoBuilder()
- .title("Apache StreamPark Api Docs")
- .description("Apache StreamPark Api Docs")
- .contact(
- new Contact(
- "Apache StreamPark", "https://streampark.apache.org/",
"[email protected]"))
- .version("2.1.0-SNAPSHOT")
- .license("Apache-2.0 license")
- .build();
- }
-
- /**
- * Streampark used `ant_path_matcher` as default matching-strategy in the
springboot 2.6+ version,
- * but actuator endpoint used `PathPattern` based URL matching. So rewrite
- * webEndpointServletHandlerMapping @Bean for resolve springfox and actuator
conflicts.
- */
- @Bean
- public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(
- WebEndpointsSupplier webEndpointsSupplier,
- ServletEndpointsSupplier servletEndpointsSupplier,
- ControllerEndpointsSupplier controllerEndpointsSupplier,
- EndpointMediaTypes endpointMediaTypes,
- CorsEndpointProperties corsProperties,
- WebEndpointProperties webEndpointProperties,
- Environment environment) {
- List<ExposableEndpoint<?>> allEndpoints = new ArrayList<>();
- Collection<ExposableWebEndpoint> webEndpoints =
webEndpointsSupplier.getEndpoints();
- allEndpoints.addAll(webEndpoints);
- allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
- allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
- String basePath = webEndpointProperties.getBasePath();
- EndpointMapping endpointMapping = new EndpointMapping(basePath);
- boolean shouldRegisterLinksMapping =
- this.shouldRegisterLinksMapping(webEndpointProperties, environment,
basePath);
- return new WebMvcEndpointHandlerMapping(
- endpointMapping,
- webEndpoints,
- endpointMediaTypes,
- corsProperties.toCorsConfiguration(),
- new EndpointLinksResolver(allEndpoints, basePath),
- shouldRegisterLinksMapping,
- null);
- }
-
- private boolean shouldRegisterLinksMapping(
- WebEndpointProperties webEndpointProperties, Environment environment,
String basePath) {
- return webEndpointProperties.getDiscovery().isEnabled()
- && (StringUtils.hasText(basePath)
- ||
ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
- }
-}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/RestRequest.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/RestRequest.java
index 15eb62383..42fe5084a 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/RestRequest.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/RestRequest.java
@@ -17,18 +17,29 @@
package org.apache.streampark.console.base.domain;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import org.springdoc.api.annotations.ParameterObject;
import java.io.Serializable;
+@ParameterObject
@Data
public class RestRequest implements Serializable {
private static final long serialVersionUID = -4869594085374385813L;
+ @Schema(example = "10", required = true)
private int pageSize = 10;
+
+ @Schema(example = "1", required = true)
private int pageNum = 1;
+ @Schema(example = "", description = "e.g. create_time")
private String sortField;
+
+ @Schema(
+ example = "",
+ allowableValues = {"asc", "desc"})
private String sortOrder;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertConfigWithParams.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertConfigWithParams.java
index 5fb5a1811..634f99248 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertConfigWithParams.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertConfigWithParams.java
@@ -23,44 +23,46 @@ import
org.apache.streampark.console.core.entity.AlertConfig;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
-@ApiModel(value = "AlertConfig")
+@Schema(name = "AlertConfig")
@Data
@Slf4j
public class AlertConfigWithParams implements Serializable {
- @ApiModelProperty(name = "id", value = "id")
+ @Schema(example = "1")
private Long id;
- @ApiModelProperty(name = "userId", value = "user id")
+ @Schema(example = "100000")
private Long userId;
- @ApiModelProperty(name = "alertName", value = "alert name")
+ @Schema(example = "test-alert")
private String alertName;
- @ApiModelProperty(name = "alertType", value = "alert type")
+ @Schema(
+ example = "1",
+ description =
+ "base type, email 1, dink-talk 2, we-com 4, http callback 8, lark
16, also choose a combination, e.g. 3 means email + dink-talk")
private Integer alertType;
- @ApiModelProperty(name = "emailParams", value = "email alert params")
+ @Schema(description = "email alert parameters")
private AlertEmailParams emailParams;
- @ApiModelProperty(name = "dingTalkParams", value = "ding-talk alert params")
+ @Schema(description = "ding-talk alert parameters")
private AlertDingTalkParams dingTalkParams;
- @ApiModelProperty(name = "weComParams", value = "we-com alert params")
+ @Schema(description = "we-com alert parameters")
private AlertWeComParams weComParams;
- @ApiModelProperty(name = "httpCallbackParams", value = "http callback alert
params")
+ @Schema(description = "http callback alert parameters")
private AlertHttpCallbackParams httpCallbackParams;
- @ApiModelProperty(name = "larkParams", value = "lark alert params")
+ @Schema(description = "lark alert parameters")
private AlertLarkParams larkParams;
public static AlertConfigWithParams of(AlertConfig config) {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertDingTalkParams.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertDingTalkParams.java
index 06f704eae..d6bb14e41 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertDingTalkParams.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertDingTalkParams.java
@@ -18,38 +18,37 @@
package org.apache.streampark.console.core.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
-@ApiModel(value = "AlertDingTalk")
+@Schema(name = "AlertDingTalk")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AlertDingTalkParams implements Serializable {
- @ApiModelProperty(name = "token", value = "token")
+ @Schema(description = "dink-talk token")
@NotBlank(message = "The access token of DingTalk must be not empty")
private String token;
- @ApiModelProperty(name = "contacts", value = "phone, multiple use ','
delimiter")
+ @Schema(description = "phone numbers, use ',' to split multiple phone
numbers")
private String contacts;
- @ApiModelProperty(name = "alertDingUrl", value = "ding url")
+ @Schema(description = "ding-talk url")
private String alertDingURL;
- @ApiModelProperty(name = "isAtAll", value = "is @all", example = "false")
+ @Schema(description = "is @all", example = "false", defaultValue = "false")
private Boolean isAtAll = false;
- @ApiModelProperty(
- name = "secretEnable",
- value = "is ding robot secret enabled",
- example = "false")
+ @Schema(
+ description = "is ding-talk robot secret enabled",
+ example = "false",
+ defaultValue = "false")
private Boolean secretEnable = false;
- @ApiModelProperty(name = "secretToken", value = "ding robot webhook secret
token")
+ @Schema(description = "ding-talk robot webhook secret token")
private String secretToken;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertEmailParams.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertEmailParams.java
index 168648300..b9e7ac89f 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertEmailParams.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertEmailParams.java
@@ -18,20 +18,19 @@
package org.apache.streampark.console.core.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
-@ApiModel(value = "AlertEmail")
+@Schema(name = "AlertEmail")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AlertEmailParams implements Serializable {
- @ApiModelProperty(name = "contacts", value = "email address")
+ @Schema(example = "[email protected]", description = "email address")
@NotBlank(message = "The address of email must be not empty")
private String contacts;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertHttpCallbackParams.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertHttpCallbackParams.java
index ac876e1e7..f95311717 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertHttpCallbackParams.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertHttpCallbackParams.java
@@ -18,29 +18,32 @@
package org.apache.streampark.console.core.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
-@ApiModel(value = "AlertHttpCallback")
+@Schema(name = "AlertHttpCallback")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AlertHttpCallbackParams implements Serializable {
- @ApiModelProperty(name = "url", value = "callback url")
+ @Schema(description = "http callback url")
@NotBlank(message = "The url of callback must be not empty")
private String url;
- @ApiModelProperty(name = "method", value = "http method")
+ @Schema(
+ description = "http method",
+ defaultValue = "POST",
+ example = "POST",
+ allowableValues = {"POST", "GET"})
private String method = "POST";
- @ApiModelProperty(name = "contentType", value = "content type", example =
"application/json")
+ @Schema(description = "content type header", example = "application/json")
private String contentType;
- @ApiModelProperty(name = "requestTemplate", value = "use freemarker template
replace the params")
+ @Schema(description = "use freemarker template replace the parameters")
private String requestTemplate;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertLarkParams.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertLarkParams.java
index 8e676681f..01f55511b 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertLarkParams.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertLarkParams.java
@@ -18,32 +18,32 @@
package org.apache.streampark.console.core.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
-@ApiModel(value = "AlertLark")
+@Schema(name = "AlertLark")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AlertLarkParams implements Serializable {
- @ApiModelProperty(name = "token", value = "lark token")
+ @Schema(description = "lark access token")
@NotBlank(message = "The access token of Lark must be not empty")
private String token;
- @ApiModelProperty(name = "isAtAll", value = "is @all", example = "false")
+ @Schema(description = "is @all", example = "false", implementation =
boolean.class)
private Boolean isAtAll = false;
- @ApiModelProperty(
- name = "secretEnable",
- value = "is lark robot secret enabled",
- example = "false")
+ @Schema(
+ description = "is lark robot secret enabled",
+ example = "false",
+ defaultValue = "false",
+ implementation = boolean.class)
private Boolean secretEnable = false;
- @ApiModelProperty(name = "secretToken", value = "lark robot webhook secret
token")
+ @Schema(description = "lark robot webhook secret token")
private String secretToken;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertWeComParams.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertWeComParams.java
index fddd422b8..3568f3dd3 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertWeComParams.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/bean/AlertWeComParams.java
@@ -18,20 +18,19 @@
package org.apache.streampark.console.core.bean;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
-@ApiModel(value = "AlertWeCom")
+@Schema(name = "AlertWeCom")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class AlertWeComParams implements Serializable {
- @ApiModelProperty(name = "token", value = "we-com token")
+ @Schema(name = "token", description = "we-com token")
@NotBlank(message = "The access token of WeCom must be not empty")
private String token;
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
index 316276811..aebd46e2d 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/AlertController.java
@@ -28,10 +28,10 @@ import
org.apache.streampark.console.core.service.alert.AlertConfigService;
import org.apache.streampark.console.core.service.alert.AlertService;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -48,7 +48,7 @@ import java.util.Date;
import java.util.List;
import java.util.TimeZone;
-@Api(tags = {"ALERT_TAG"})
+@Tag(name = "ALERT_TAG")
@Slf4j
@Validated
@RestController
@@ -59,82 +59,51 @@ public class AlertController {
@Autowired private AlertService alertService;
- @ApiOperation(value = "Create alert config")
+ @Operation(summary = "Create alert config")
@PostMapping(value = "/add")
public RestResponse createAlertConfig(@RequestBody AlertConfigWithParams
params) {
boolean save = alertConfigService.save(AlertConfig.of(params));
return RestResponse.success(save);
}
- @ApiOperation(value = "Exist alert config")
+ @Operation(summary = "Check alert config exist")
@PostMapping(value = "/exists")
- public RestResponse existsAlertConfig(@RequestBody AlertConfigWithParams
params) {
+ public RestResponse verifyAlertConfig(@RequestBody AlertConfigWithParams
params) {
boolean exist = alertConfigService.exist(AlertConfig.of(params));
return RestResponse.success(exist);
}
- @ApiOperation(value = "Update alert config")
+ @Operation(summary = "Update alert config")
@PostMapping(value = "/update")
public RestResponse updateAlertConfig(@RequestBody AlertConfigWithParams
params) {
boolean update = alertConfigService.updateById(AlertConfig.of(params));
return RestResponse.success(update);
}
- @ApiOperation(value = "Get alert config")
+ @Operation(summary = "Get alert config")
@PostMapping("/get")
public RestResponse getAlertConfig(@RequestBody AlertConfigWithParams
params) {
AlertConfig alertConfig = alertConfigService.getById(params.getId());
return RestResponse.success(AlertConfigWithParams.of(alertConfig));
}
- @ApiOperation(value = "List alert configs(Pagination)")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "pageSize",
- value = "page size",
- required = true,
- example = "10",
- dataTypeClass = Integer.class),
- @ApiImplicitParam(
- name = "pageNum",
- value = "page num",
- required = true,
- example = "1",
- dataTypeClass = Integer.class),
- @ApiImplicitParam(
- name = "sortField",
- value = "sort field",
- dataType = "string",
- dataTypeClass = String.class),
- @ApiImplicitParam(
- name = "sortOrder",
- value = "sort order",
- dataType = "string",
- dataTypeClass = String.class)
- })
+ @Operation(summary = "List alert configs (Pagination)")
@PostMapping(value = "/list")
- public RestResponse listPageAlertConfigs(
+ public RestResponse alertConfigsPaginationList(
@RequestBody AlertConfigWithParams params, RestRequest request) {
IPage<AlertConfigWithParams> page = alertConfigService.page(params,
request);
return RestResponse.success(page);
}
- @ApiOperation(value = "List alert configs")
+ @Operation(summary = "List alert configs")
@PostMapping(value = "/listWithOutPage")
- public RestResponse listAlertConfigs() {
+ public RestResponse alertConfigsList() {
List<AlertConfig> page = alertConfigService.list();
return RestResponse.success(page);
}
- @ApiOperation(value = "Delete alert config")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "id",
- value = "config id",
- required = true,
- paramType = "query",
- dataTypeClass = Long.class)
- })
+ @Operation(summary = "Delete alert config")
+ @Parameters({@Parameter(name = "id", required = true, description = "config
id")})
@DeleteMapping("/delete")
public RestResponse deleteAlertConfig(
@RequestParam("id") @NotNull(message = "config id must be not null")
Long id) {
@@ -142,7 +111,7 @@ public class AlertController {
return RestResponse.success(result);
}
- /** TODO after remove to unit test */
+ @Operation(summary = "Send alert config")
@PostMapping("/send")
public RestResponse sendAlert(Long id) throws AlertException {
AlertTemplate alertTemplate = new AlertTemplate();
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
index d2b560dac..69ca3b28a 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationBuildPipelineController.java
@@ -26,7 +26,6 @@ import
org.apache.streampark.console.core.entity.AppBuildPipeline;
import org.apache.streampark.console.core.entity.Application;
import org.apache.streampark.console.core.entity.ApplicationLog;
import org.apache.streampark.console.core.entity.FlinkEnv;
-import org.apache.streampark.console.core.enums.Operation;
import org.apache.streampark.console.core.service.AppBuildPipeService;
import org.apache.streampark.console.core.service.ApplicationLogService;
import org.apache.streampark.console.core.service.ApplicationService;
@@ -37,10 +36,11 @@ import
org.apache.streampark.flink.packer.pipeline.PipelineType;
import org.apache.shiro.authz.annotation.RequiresPermissions;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -53,7 +53,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
-@Api(tags = {"FLINK_APPLICATION_BUILD_PIPELINE_TAG"})
+@Tag(name = "FLINK_APPLICATION_BUILD_PIPELINE_TAG")
@Slf4j
@Validated
@RestController
@@ -77,28 +77,20 @@ public class ApplicationBuildPipelineController {
* @param forceBuild forced start pipeline or not
* @return Whether the pipeline was successfully started
*/
- @ApiAccess
- @ApiOperation(
- value = "Release application",
- notes = "Release application",
- tags = ApiDocConstant.FLINK_APP_OP_TAG,
- consumes = "application/x-www-form-urlencoded")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "appId",
- value = "APP_ID",
- required = true,
- paramType = "query",
- dataTypeClass = Long.class),
- @ApiImplicitParam(
+ @Operation(
+ summary = "Release application",
+ tags = {ApiDocConstant.FLINK_APP_OP_TAG})
+ @Parameters({
+ @Parameter(name = "appId", description = "app id", required = true,
example = "100000"),
+ @Parameter(
name = "forceBuild",
- value = "FORCE_BUILD",
+ description = "force build",
required = true,
- paramType = "query",
- dataTypeClass = Boolean.class,
- defaultValue = "false"),
+ example = "false",
+ schema = @Schema(defaultValue = "false", implementation =
boolean.class))
})
- @PostMapping(value = "build", consumes = "application/x-www-form-urlencoded")
+ @ApiAccess
+ @PostMapping(value = "build")
@RequiresPermissions("app:create")
public RestResponse buildApplication(Long appId, boolean forceBuild) {
try {
@@ -128,7 +120,8 @@ public class ApplicationBuildPipelineController {
// you don't need to go through the build process)
ApplicationLog applicationLog = new ApplicationLog();
- applicationLog.setOptionName(Operation.RELEASE.getValue());
+ applicationLog.setOptionName(
+
org.apache.streampark.console.core.enums.Operation.RELEASE.getValue());
applicationLog.setAppId(app.getId());
applicationLog.setOptionTime(new Date());
@@ -157,6 +150,7 @@ public class ApplicationBuildPipelineController {
* @param appId application id
* @return "pipeline" -> pipeline details, "docker" -> docker resolved
snapshot
*/
+ @Operation(summary = "Get application release pipeline")
@ApiAccess
@PostMapping("/detail")
@RequiresPermissions("app:view")
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
index 7884effe0..73ca135d1 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
@@ -39,10 +39,13 @@ import
org.apache.streampark.flink.packer.pipeline.PipelineStatus;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Hidden;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -50,7 +53,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
import java.io.File;
import java.io.IOException;
@@ -61,7 +63,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-@Api(tags = {"FLINK_APPLICATION_TAG"})
+@Tag(name = "FLINK_APPLICATION_TAG")
@Slf4j
@Validated
@RestController
@@ -76,6 +78,7 @@ public class ApplicationController {
@Autowired private AppBuildPipeService appBuildPipeService;
+ @Operation(summary = "Get application")
@ApiAccess
@PostMapping("get")
@RequiresPermissions("app:detail")
@@ -84,6 +87,7 @@ public class ApplicationController {
return RestResponse.success(application);
}
+ @Operation(summary = "Create application")
@ApiAccess
@PostMapping("create")
@RequiresPermissions("app:create")
@@ -92,36 +96,27 @@ public class ApplicationController {
return RestResponse.success(saved);
}
- @ApiAccess
- @ApiOperation(
- value = "Copy application from the exist app",
- tags = ApiDocConstant.FLINK_APP_OP_TAG,
- consumes = "application/x-www-form-urlencoded")
- @ApiImplicitParams({
- @ApiImplicitParam(
+ @Operation(
+ summary = "Copy application",
+ tags = {ApiDocConstant.FLINK_APP_OP_TAG})
+ @Parameters({
+ @Parameter(
name = "id",
- value = "copy target app id",
+ description = "copied target app id",
+ in = ParameterIn.QUERY,
required = true,
- paramType = "query",
- dataTypeClass = Long.class),
- @ApiImplicitParam(
+ example = "100000"),
+ @Parameter(
name = "jobName",
- value = "name of the copied application",
- required = true,
- paramType = "query",
- dataTypeClass = String.class,
- defaultValue = ""),
- @ApiImplicitParam(
- name = "args",
- value = "commit parameters after copying",
- required = false,
- paramType = "query",
- dataTypeClass = String.class,
- defaultValue = "")
+ description = "new application name",
+ in = ParameterIn.QUERY,
+ example = "copy-app"),
+ @Parameter(name = "args", description = "new application args", in =
ParameterIn.QUERY)
})
- @PostMapping(value = "copy", consumes = "application/x-www-form-urlencoded")
+ @ApiAccess
+ @PostMapping(value = "copy")
@RequiresPermissions("app:copy")
- public RestResponse copy(@ApiIgnore Application app) throws IOException {
+ public RestResponse copy(@Parameter(hidden = true) Application app) throws
IOException {
Long id = applicationService.copy(app);
Map<String, String> data = new HashMap<>();
data.put("id", Long.toString(id));
@@ -130,6 +125,7 @@ public class ApplicationController {
: RestResponse.success(true).data(data);
}
+ @Operation(summary = "Update application")
@AppUpdated
@PostMapping("update")
@RequiresPermissions("app:update")
@@ -138,12 +134,14 @@ public class ApplicationController {
return RestResponse.success(true);
}
+ @Operation(summary = "Get applications dashboard data")
@PostMapping("dashboard")
public RestResponse dashboard(Long teamId) {
Map<String, Serializable> map = applicationService.dashboard(teamId);
return RestResponse.success(map);
}
+ @Operation(summary = "List applications")
@ApiAccess
@PostMapping("list")
@RequiresPermissions("app:view")
@@ -180,6 +178,7 @@ public class ApplicationController {
return RestResponse.success(applicationList);
}
+ @Operation(summary = "Mapping application")
@AppUpdated
@PostMapping("mapping")
@RequiresPermissions("app:mapping")
@@ -188,6 +187,7 @@ public class ApplicationController {
return RestResponse.success(flag);
}
+ @Operation(summary = "Revoke application")
@AppUpdated
@PostMapping("revoke")
@RequiresPermissions("app:release")
@@ -196,43 +196,40 @@ public class ApplicationController {
return RestResponse.success();
}
- @ApiAccess
- @ApiOperation(
- value = "Start application",
- tags = ApiDocConstant.FLINK_APP_OP_TAG,
- consumes = "application/x-www-form-urlencoded")
- @ApiImplicitParams({
- @ApiImplicitParam(
+ @Operation(
+ summary = "Start application",
+ tags = {ApiDocConstant.FLINK_APP_OP_TAG})
+ @Parameters({
+ @Parameter(
name = "id",
- value = "app Id",
+ description = "start app id",
+ in = ParameterIn.QUERY,
required = true,
- paramType = "query",
- dataTypeClass = Long.class),
- @ApiImplicitParam(
+ example = "100000",
+ schema = @Schema(implementation = Long.class)),
+ @Parameter(
name = "savePointed",
- value = "restored app from the savepoint or latest checkpoint",
+ description = "restored app from the savepoint or latest checkpoint",
+ in = ParameterIn.QUERY,
required = true,
- paramType = "query",
- dataTypeClass = Boolean.class,
- defaultValue = "false"),
- @ApiImplicitParam(
+ example = "false",
+ schema = @Schema(implementation = boolean.class, defaultValue =
"false")),
+ @Parameter(
name = "savePoint",
- value = "savepoint or checkpoint path",
- required = true,
- paramType = "query",
- dataTypeClass = String.class,
- defaultValue = ""),
- @ApiImplicitParam(
+ description = "savepoint or checkpoint path",
+ in = ParameterIn.QUERY,
+ schema = @Schema(implementation = String.class)),
+ @Parameter(
name = "allowNonRestored",
- value = "ignore savepoint then cannot be restored",
- required = true,
- paramType = "query",
- dataTypeClass = Boolean.class,
- defaultValue = "false")
+ description = "ignore savepoint if cannot be restored",
+ in = ParameterIn.QUERY,
+ required = false,
+ schema = @Schema(implementation = boolean.class, defaultValue =
"false"))
})
- @PostMapping(value = "start", consumes = "application/x-www-form-urlencoded")
+ @ApiAccess
+ @PostMapping(value = "start")
@RequiresPermissions("app:start")
- public RestResponse start(@ApiIgnore Application app) {
+ public RestResponse start(@Parameter(hidden = true) Application app) {
try {
applicationService.checkEnv(app);
applicationService.start(app, false);
@@ -242,46 +239,46 @@ public class ApplicationController {
}
}
+ @Operation(
+ summary = "Cancel application",
+ tags = {ApiDocConstant.FLINK_APP_OP_TAG})
@ApiAccess
- @ApiOperation(
- value = "Cancel application",
- tags = ApiDocConstant.FLINK_APP_OP_TAG,
- consumes = "application/x-www-form-urlencoded")
- @ApiImplicitParams({
- @ApiImplicitParam(
+ @Parameters({
+ @Parameter(
name = "id",
- value = "app id",
+ description = "cancel app id",
+ in = ParameterIn.QUERY,
required = true,
- paramType = "query",
- dataTypeClass = Long.class),
- @ApiImplicitParam(
+ example = "100000",
+ schema = @Schema(implementation = Long.class)),
+ @Parameter(
name = "savePointed",
- value = "whether trigger savepoint before taking stopping",
+ description = "trigger savepoint before taking stopping",
+ in = ParameterIn.QUERY,
required = true,
- paramType = "query",
- dataTypeClass = Boolean.class,
- defaultValue = "false"),
- @ApiImplicitParam(
+ schema = @Schema(implementation = boolean.class, defaultValue =
"false")),
+ @Parameter(
name = "savePoint",
- value = "savepoint path",
- paramType = "query",
- dataTypeClass = String.class,
- defaultValue = "hdfs:///tm/xxx"),
- @ApiImplicitParam(
+ description = "savepoint path",
+ in = ParameterIn.QUERY,
+ example = "hdfs:///savepoint/100000",
+ schema = @Schema(implementation = String.class)),
+ @Parameter(
name = "drain",
- value = "send max watermark before canceling",
+ description = "send max watermark before canceling",
+ in = ParameterIn.QUERY,
required = true,
- paramType = "query",
- dataTypeClass = Boolean.class,
- defaultValue = "false")
+ example = "false",
+ schema = @Schema(implementation = boolean.class, defaultValue =
"false"))
})
- @PostMapping(value = "cancel", consumes =
"application/x-www-form-urlencoded")
+ @PostMapping(value = "cancel")
@RequiresPermissions("app:cancel")
- public RestResponse cancel(@ApiIgnore Application app) throws Exception {
+ public RestResponse cancel(@Parameter(hidden = true) Application app) throws
Exception {
applicationService.cancel(app);
return RestResponse.success();
}
+ @Operation(summary = "Clean application")
@AppUpdated
@ApiAccess
@PostMapping("clean")
@@ -292,6 +289,7 @@ public class ApplicationController {
}
/** force stop(stop normal start or in progress) */
+ @Operation(summary = "Force stop application")
@PostMapping("forcedStop")
@RequiresPermissions("app:cancel")
public RestResponse forcedStop(Application app) {
@@ -299,54 +297,55 @@ public class ApplicationController {
return RestResponse.success();
}
+ @Operation(summary = "Get application on yarn proxy address")
@PostMapping("yarn")
public RestResponse yarn() {
return RestResponse.success(YarnUtils.getRMWebAppProxyURL());
}
+ @Operation(summary = "Get application on yarn name")
@PostMapping("name")
public RestResponse yarnName(Application app) {
String yarnName = applicationService.getYarnName(app);
return RestResponse.success(yarnName);
}
+ @Operation(summary = "Check the application exist status")
@PostMapping("checkName")
public RestResponse checkName(Application app) {
AppExistsState exists = applicationService.checkExists(app);
return RestResponse.success(exists.get());
}
+ @Operation(summary = "Get application conf")
@PostMapping("readConf")
public RestResponse readConf(Application app) throws IOException {
String config = applicationService.readConf(app);
return RestResponse.success(config);
}
+ @Operation(summary = "Get application main-class")
@PostMapping("main")
public RestResponse getMain(Application application) {
String mainClass = applicationService.getMain(application);
return RestResponse.success(mainClass);
}
+ @Operation(summary = "List application backups")
@PostMapping("backups")
public RestResponse backups(ApplicationBackUp backUp, RestRequest request) {
IPage<ApplicationBackUp> backups = backUpService.page(backUp, request);
return RestResponse.success(backups);
}
- @PostMapping("rollback")
- public RestResponse rollback(ApplicationBackUp backUp) {
- // TODO: next version implementation
- // backUpService.rollback(backUp);
- return RestResponse.success();
- }
-
+ @Operation(summary = "List application operation logs")
@PostMapping("optionlog")
public RestResponse optionlog(ApplicationLog applicationLog, RestRequest
request) {
IPage<ApplicationLog> applicationList =
applicationLogService.page(applicationLog, request);
return RestResponse.success(applicationList);
}
+ @Operation(summary = "Delete application operation log")
@PostMapping("deleteOperationLog")
@RequiresPermissions("app:delete")
public RestResponse deleteOperationLog(ApplicationLog applicationLog) {
@@ -354,6 +353,7 @@ public class ApplicationController {
return RestResponse.success(deleted);
}
+ @Operation(summary = "Delete application")
@PostMapping("delete")
@RequiresPermissions("app:delete")
public RestResponse delete(Application app) throws InternalException {
@@ -361,12 +361,14 @@ public class ApplicationController {
return RestResponse.success(deleted);
}
+ @Operation(summary = "Backup application when deleted")
@PostMapping("deletebak")
public RestResponse deleteBak(ApplicationBackUp backUp) throws
InternalException {
Boolean deleted = backUpService.delete(backUp.getId());
return RestResponse.success(deleted);
}
+ @Operation(summary = "Check the application jar")
@PostMapping("checkjar")
public RestResponse checkjar(String jar) {
File file = new File(jar);
@@ -378,6 +380,7 @@ public class ApplicationController {
}
}
+ @Operation(summary = "Upload the application jar")
@PostMapping("upload")
@RequiresPermissions("app:create")
public RestResponse upload(MultipartFile file) throws Exception {
@@ -385,6 +388,7 @@ public class ApplicationController {
return RestResponse.success(uploadPath);
}
+ @Hidden
@PostMapping("verifySchema")
public RestResponse verifySchema(String path) {
final URI uri = URI.create(path);
@@ -407,6 +411,7 @@ public class ApplicationController {
return restResponse;
}
+ @Operation(summary = "Check the application savepoint path")
@PostMapping("checkSavepointPath")
public RestResponse checkSavepointPath(Application app) throws Exception {
String error = applicationService.checkSavepointPath(app);
@@ -417,11 +422,26 @@ public class ApplicationController {
}
}
- @ApiOperation(value = "Read flink on k8s deploy log")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "id", value = "app id"),
- @ApiImplicitParam(name = "offset", value = "number of log lines offset"),
- @ApiImplicitParam(name = "limit", value = "number of log lines loaded at
once")
+ @Operation(summary = "Get application on k8s deploy logs")
+ @Parameters({
+ @Parameter(
+ name = "id",
+ description = "app id",
+ required = true,
+ example = "100000",
+ schema = @Schema(implementation = Long.class)),
+ @Parameter(
+ name = "offset",
+ description = "number of log lines offset",
+ required = true,
+ example = "0",
+ schema = @Schema(implementation = int.class)),
+ @Parameter(
+ name = "limit",
+ description = "number of log lines loaded at once",
+ required = true,
+ example = "100",
+ schema = @Schema(implementation = int.class)),
})
@PostMapping(value = "k8sStartLog")
public RestResponse k8sStartLog(Long id, Integer offset, Integer limit)
throws Exception {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationHistoryController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationHistoryController.java
index 15b9e3d5b..2ba542336 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationHistoryController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationHistoryController.java
@@ -23,7 +23,8 @@ import
org.apache.streampark.console.core.service.ApplicationService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -34,9 +35,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
-@Api(
- tags = "[flink history] related operations",
- consumes = "Content-Type=application/x-www-form-urlencoded")
+@Tag(name = "FLINK_APPLICATION_HISTORY_TAG")
@Slf4j
@Validated
@RestController
@@ -45,6 +44,7 @@ public class ApplicationHistoryController {
@Autowired private ApplicationService applicationService;
+ @Operation(summary = "List the upload jar history records")
@PostMapping("uploadJars")
@RequiresPermissions("app:create")
public RestResponse listUploadJars() {
@@ -52,6 +52,7 @@ public class ApplicationHistoryController {
return RestResponse.success(jars);
}
+ @Operation(summary = "List the k8s namespace history records")
@PostMapping("k8sNamespaces")
@RequiresPermissions("app:create")
public RestResponse listK8sNamespace() {
@@ -59,6 +60,7 @@ public class ApplicationHistoryController {
return RestResponse.success(namespaces);
}
+ @Operation(summary = "List the session cluster history records")
@PostMapping("sessionClusterIds")
@RequiresPermissions("app:create")
public RestResponse listSessionClusterId(int executionMode) {
@@ -76,6 +78,7 @@ public class ApplicationHistoryController {
return RestResponse.success(clusterIds);
}
+ @Operation(summary = "List the flink base image history records")
@PostMapping("flinkBaseImages")
@RequiresPermissions("app:create")
public RestResponse listFlinkBaseImage() {
@@ -83,6 +86,7 @@ public class ApplicationHistoryController {
return RestResponse.success(images);
}
+ @Operation(summary = "List the flink pod template history records")
@PostMapping("flinkPodTemplates")
@RequiresPermissions("app:create")
public RestResponse listPodTemplate() {
@@ -90,6 +94,7 @@ public class ApplicationHistoryController {
return RestResponse.success(templates);
}
+ @Operation(summary = "List the flink JM pod template history records")
@PostMapping("flinkJmPodTemplates")
@RequiresPermissions("app:create")
public RestResponse listJmPodTemplate() {
@@ -97,6 +102,7 @@ public class ApplicationHistoryController {
return RestResponse.success(templates);
}
+ @Operation(summary = "List the flink TM pod template history records")
@PostMapping("flinkTmPodTemplates")
@RequiresPermissions("app:create")
public RestResponse listTmPodTemplate() {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ConfigController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ConfigController.java
index a31647921..ba4d59e15 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ConfigController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ConfigController.java
@@ -28,6 +28,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.ImmutableMap;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -38,6 +40,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
+@Tag(name = "CONFIG_TAG")
@Slf4j
@Validated
@RestController
@@ -46,30 +49,35 @@ public class ConfigController {
@Autowired private ApplicationConfigService applicationConfigService;
+ @Operation(summary = "Get config")
@PostMapping("get")
public RestResponse get(Long id) {
ApplicationConfig config = applicationConfigService.get(id);
return RestResponse.success(config);
}
+ @Operation(summary = "Get the flink application conf-template")
@PostMapping("template")
public RestResponse template() {
String config = applicationConfigService.readTemplate();
return RestResponse.success(config);
}
+ @Operation(summary = "List the application configs")
@PostMapping("list")
public RestResponse list(ApplicationConfig config, RestRequest request) {
IPage<ApplicationConfig> page = applicationConfigService.page(config,
request);
return RestResponse.success(page);
}
+ @Operation(summary = "List application config histories")
@PostMapping("history")
public RestResponse history(Application application) {
List<ApplicationConfig> history =
applicationConfigService.history(application);
return RestResponse.success(history);
}
+ @Operation(summary = "Delete config")
@PostMapping("delete")
@RequiresPermissions("conf:delete")
public RestResponse delete(Long id) {
@@ -77,6 +85,7 @@ public class ConfigController {
return RestResponse.success(deleted);
}
+ @Operation(summary = "Get system hadoop configs")
@PostMapping("sysHadoopConf")
@RequiresPermissions("app:create")
public RestResponse getSystemHadoopConfig() {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ExternalLinkController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ExternalLinkController.java
index 11c75a87a..db1f8ec5c 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ExternalLinkController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ExternalLinkController.java
@@ -24,10 +24,10 @@ import
org.apache.streampark.console.core.service.ExternalLinkService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -42,7 +42,7 @@ import javax.validation.constraints.NotNull;
import java.util.List;
-@Api(tags = {"FLINK_EXTERNAL_LINK_TAG"})
+@Tag(name = "FLINK_EXTERNAL_LINK_TAG")
@Slf4j
@Validated
@RestController
@@ -51,7 +51,7 @@ public class ExternalLinkController {
@Autowired private ExternalLinkService externalLinkService;
- @ApiOperation(value = "List externalLink")
+ @Operation(summary = "List external link")
@PostMapping("/list")
@RequiresPermissions("externalLink:view")
public RestResponse list() {
@@ -59,15 +59,10 @@ public class ExternalLinkController {
return RestResponse.success(externalLink);
}
- @ApiOperation(value = "Render externalLink by appId")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "appId",
- value = "application id",
- required = true,
- paramType = "query",
- dataTypeClass = Long.class)
- })
+ @Operation(
+ summary = "Get the application external links",
+ description = "Render external link by app id")
+ @Parameters({@Parameter(name = "appId", required = true, example =
"100000")})
@PostMapping("/render")
public RestResponse render(
@NotNull(message = "The flink app id cannot be null")
@RequestParam("appId") Long appId) {
@@ -75,7 +70,7 @@ public class ExternalLinkController {
return RestResponse.success(renderedExternalLink);
}
- @ApiOperation(value = "Create externalLink")
+ @Operation(summary = "Create external link")
@PostMapping("/create")
@RequiresPermissions("externalLink:create")
public RestResponse create(@Valid ExternalLink externalLink) {
@@ -83,7 +78,7 @@ public class ExternalLinkController {
return RestResponse.success();
}
- @ApiOperation(value = "Update externalLink")
+ @Operation(summary = "Update external link")
@PostMapping("/update")
@RequiresPermissions("externalLink:update")
public RestResponse update(@Valid ExternalLink externalLink) {
@@ -92,15 +87,8 @@ public class ExternalLinkController {
return RestResponse.success();
}
- @ApiOperation(value = "Delete externalLink")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "id",
- value = "external link id",
- required = true,
- paramType = "query",
- dataTypeClass = Long.class)
- })
+ @Operation(summary = "Delete external link")
+ @Parameters({@Parameter(name = "appId", required = true, example =
"100000")})
@DeleteMapping("/delete")
@RequiresPermissions("externalLink:delete")
public RestResponse delete(
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkClusterController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkClusterController.java
index 9465cad5f..148cd554b 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkClusterController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkClusterController.java
@@ -25,6 +25,8 @@ import
org.apache.streampark.console.core.service.FlinkClusterService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -34,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
+@Tag(name = "FLINK_CLUSTER_TAG")
@Slf4j
@Validated
@RestController
@@ -42,24 +45,28 @@ public class FlinkClusterController {
@Autowired private FlinkClusterService flinkClusterService;
+ @Operation(summary = "List flink clusters")
@PostMapping("list")
public RestResponse list() {
List<FlinkCluster> flinkClusters = flinkClusterService.list();
return RestResponse.success(flinkClusters);
}
+ @Operation(summary = "Get flink cluster remote address")
@PostMapping("remoteUrl")
public RestResponse remoteUrl(Long id) {
FlinkCluster cluster = flinkClusterService.getById(id);
return RestResponse.success(cluster.getAddress());
}
+ @Operation(summary = "Check the cluster status")
@PostMapping("check")
public RestResponse check(FlinkCluster cluster) {
ResponseResult checkResult = flinkClusterService.check(cluster);
return RestResponse.success(checkResult);
}
+ @Operation(summary = "Create flink cluster")
@PostMapping("create")
@RequiresPermissions("cluster:create")
public RestResponse create(FlinkCluster cluster) {
@@ -67,6 +74,7 @@ public class FlinkClusterController {
return RestResponse.success(success);
}
+ @Operation(summary = "Update flink cluster")
@PostMapping("update")
@RequiresPermissions("cluster:update")
public RestResponse update(FlinkCluster cluster) {
@@ -74,24 +82,28 @@ public class FlinkClusterController {
return RestResponse.success();
}
+ @Operation(summary = "Get flink cluster")
@PostMapping("get")
public RestResponse get(Long id) throws InternalException {
FlinkCluster cluster = flinkClusterService.getById(id);
return RestResponse.success(cluster);
}
+ @Operation(summary = "Start flink cluster")
@PostMapping("start")
public RestResponse start(FlinkCluster cluster) {
flinkClusterService.start(cluster);
return RestResponse.success();
}
+ @Operation(summary = "Shutdown flink cluster")
@PostMapping("shutdown")
public RestResponse shutdown(FlinkCluster cluster) {
flinkClusterService.shutdown(cluster);
return RestResponse.success();
}
+ @Operation(summary = "Delete flink cluster")
@PostMapping("delete")
public RestResponse delete(FlinkCluster cluster) {
flinkClusterService.delete(cluster);
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
index b87255b29..1eab993cc 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkEnvController.java
@@ -22,6 +22,8 @@ import
org.apache.streampark.console.base.exception.ApiDetailException;
import org.apache.streampark.console.core.entity.FlinkEnv;
import org.apache.streampark.console.core.service.FlinkEnvService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -31,6 +33,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
+@Tag(name = "FLINK_ENV_TAG")
@Slf4j
@Validated
@RestController
@@ -39,18 +42,21 @@ public class FlinkEnvController {
@Autowired private FlinkEnvService flinkEnvService;
+ @Operation(summary = "Get flink environment")
@PostMapping("list")
public RestResponse list() {
List<FlinkEnv> list = flinkEnvService.list();
return RestResponse.success(list);
}
+ @Operation(summary = "Verify flink environment")
@PostMapping("check")
public RestResponse check(FlinkEnv version) {
Integer checkResp = flinkEnvService.check(version);
return RestResponse.success(checkResp);
}
+ @Operation(summary = "Create flink environment")
@PostMapping("create")
public RestResponse create(FlinkEnv version) {
try {
@@ -61,6 +67,7 @@ public class FlinkEnvController {
return RestResponse.success(true);
}
+ @Operation(summary = "Get flink environment")
@PostMapping("get")
public RestResponse get(Long id) throws Exception {
FlinkEnv flinkEnv = flinkEnvService.getById(id);
@@ -68,12 +75,14 @@ public class FlinkEnvController {
return RestResponse.success(flinkEnv);
}
+ @Operation(summary = "Sync flink environment conf")
@PostMapping("sync")
public RestResponse sync(Long id) throws Exception {
flinkEnvService.syncConf(id);
return RestResponse.success();
}
+ @Operation(summary = "Update flink environment")
@PostMapping("update")
public RestResponse update(FlinkEnv version) throws Exception {
try {
@@ -84,12 +93,14 @@ public class FlinkEnvController {
return RestResponse.success(true);
}
+ @Operation(summary = "Delete flink environment")
@PostMapping("delete")
public RestResponse delete(Long id) {
flinkEnvService.delete(id);
return RestResponse.success();
}
+ @Operation(summary = "Update flink environment as default")
@PostMapping("default")
public RestResponse setDefault(Long id) {
flinkEnvService.setDefault(id);
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkPodTemplateController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkPodTemplateController.java
index 66f311b51..034a08c29 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkPodTemplateController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkPodTemplateController.java
@@ -23,6 +23,8 @@ import
org.apache.streampark.flink.kubernetes.PodTemplateParser;
import org.apache.commons.lang3.StringUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@@ -35,12 +37,14 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+@Tag(name = "FLINK_POD_TEMPLATE_TAG")
@Slf4j
@Validated
@RestController
@RequestMapping("flink/podtmpl")
public class FlinkPodTemplateController {
+ @Operation(summary = "Get system hosts")
@PostMapping("sysHosts")
public RestResponse getHosts() {
// hostname -> ipv4
@@ -52,12 +56,14 @@ public class FlinkPodTemplateController {
return RestResponse.success(friendlyHosts);
}
+ @Operation(summary = "Get initial pod template")
@PostMapping("init")
public RestResponse getInitContent() {
return RestResponse.success(PodTemplateParser.getInitPodTemplateContent());
}
/** @param hosts hostname:ipv4,hostname:ipv4,hostname:ipv4... */
+ @Operation(summary = "Get pod template of complete host-alias")
@PostMapping("compHostAlias")
public RestResponse completeHostAlias(String hosts, String podTemplate) {
Map<String, String> hostMap = covertHostsParamToMap(hosts);
@@ -82,6 +88,7 @@ public class FlinkPodTemplateController {
}
}
+ @Operation(summary = "Extract host-alias from pod template")
@PostMapping("extractHostAlias")
public RestResponse extractHostAlias(String podTemplate) {
Map<String, String> hosts =
PodTemplateParser.extractHostAliasMap(podTemplate);
@@ -93,6 +100,7 @@ public class FlinkPodTemplateController {
}
/** @param hosts hostname:ipv4,hostname:ipv4,hostname:ipv4... */
+ @Operation(summary = "Preview pod template with host-alias")
@PostMapping("previewHostAlias")
public RestResponse previewHostAlias(String hosts) {
Map<String, String> hostMap = covertHostsParamToMap(hosts);
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
index b427ac0f9..2fad82e5b 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/FlinkSqlController.java
@@ -30,7 +30,8 @@ import
org.apache.streampark.flink.core.FlinkSqlValidationResult;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.annotations.Api;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -42,9 +43,7 @@ import javax.validation.constraints.NotNull;
import java.util.List;
-@Api(
- tags = "[flink sql] related operations",
- consumes = "Content-Type=application/x-www-form-urlencoded")
+@Tag(name = "FLINK_SQL_TAG")
@Slf4j
@Validated
@RestController
@@ -57,6 +56,7 @@ public class FlinkSqlController {
@Autowired private SqlCompleteService sqlComplete;
+ @Operation(summary = "Verify sql")
@PostMapping("verify")
public RestResponse verify(String sql, Long versionId, Long teamId) {
sql = variableService.replaceVariable(teamId, sql);
@@ -83,12 +83,14 @@ public class FlinkSqlController {
}
}
+ @Operation(summary = "List the application sql")
@PostMapping("list")
public RestResponse list(Long appId, RestRequest request) {
IPage<FlinkSql> page = flinkSqlService.page(appId, request);
return RestResponse.success(page);
}
+ @Operation(summary = "Delete sql")
@PostMapping("delete")
@RequiresPermissions("sql:delete")
public RestResponse delete(Long id) {
@@ -96,6 +98,7 @@ public class FlinkSqlController {
return RestResponse.success(deleted);
}
+ @Operation(summary = "List sql by ids")
@PostMapping("get")
public RestResponse get(String id) throws InternalException {
String[] array = id.split(",");
@@ -109,12 +112,14 @@ public class FlinkSqlController {
return RestResponse.success(new FlinkSql[] {flinkSql1, flinkSql2});
}
+ @Operation(summary = "List the applications sql histories")
@PostMapping("history")
public RestResponse sqlhistory(Application application) {
List<FlinkSql> sqlList = flinkSqlService.history(application);
return RestResponse.success(sqlList);
}
+ @Operation(summary = "Get the complete sql")
@PostMapping("sqlComplete")
public RestResponse getSqlComplete(@NotNull(message = "{required}") String
sql) {
return RestResponse.success().put("word", sqlComplete.getComplete(sql));
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/IndexController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/IndexController.java
index 950a4d130..ca3ddf6d1 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/IndexController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/IndexController.java
@@ -17,6 +17,7 @@
package org.apache.streampark.console.core.controller;
+import io.swagger.v3.oas.annotations.Hidden;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -26,6 +27,7 @@ import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
+ @Hidden
@GetMapping("/")
public ModelAndView index() {
return new ModelAndView("/index.html");
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MessageController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MessageController.java
index f13fe254c..87d763783 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MessageController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/MessageController.java
@@ -24,6 +24,8 @@ import org.apache.streampark.console.core.enums.NoticeType;
import org.apache.streampark.console.core.service.MessageService;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -31,6 +33,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+@Tag(name = "MESSAGE_TAG")
@Slf4j
@Validated
@RestController
@@ -39,6 +42,7 @@ public class MessageController {
@Autowired private MessageService messageService;
+ @Operation(summary = "List notices")
@PostMapping("notice")
public RestResponse notice(Integer type, RestRequest request) {
NoticeType noticeType = NoticeType.of(type);
@@ -46,6 +50,7 @@ public class MessageController {
return RestResponse.success(pages);
}
+ @Operation(summary = "Delete notice")
@PostMapping("delnotice")
public RestResponse delNotice(Long id) {
return RestResponse.success(messageService.removeById(id));
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProjectController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProjectController.java
index 8ad1ae081..859261933 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProjectController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ProjectController.java
@@ -28,6 +28,8 @@ import
org.apache.streampark.console.core.service.ProjectService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -40,6 +42,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
+@Tag(name = "PROJECT_TAG")
@Slf4j
@Validated
@RestController
@@ -48,6 +51,7 @@ public class ProjectController {
@Autowired private ProjectService projectService;
+ @Operation(summary = "Create project")
@PostMapping("create")
@RequiresPermissions("project:create")
public RestResponse create(Project project) {
@@ -56,6 +60,7 @@ public class ProjectController {
return projectService.create(project);
}
+ @Operation(summary = "Update project")
@AppUpdated
@PostMapping("update")
@RequiresPermissions("project:update")
@@ -64,11 +69,13 @@ public class ProjectController {
return RestResponse.success().data(update);
}
+ @Operation(summary = "Get project")
@PostMapping("get")
public RestResponse get(Long id) {
return RestResponse.success().data(projectService.getById(id));
}
+ @Operation(summary = "Build project")
@PostMapping("build")
@RequiresPermissions("project:build")
public RestResponse build(Long id) throws Exception {
@@ -76,6 +83,7 @@ public class ProjectController {
return RestResponse.success();
}
+ @Operation(summary = "Get project build logs")
@PostMapping("buildlog")
@RequiresPermissions("project:build")
public RestResponse buildLog(
@@ -83,6 +91,7 @@ public class ProjectController {
return projectService.getBuildLog(id, startOffset);
}
+ @Operation(summary = "List projects")
@PostMapping("list")
@RequiresPermissions("project:view")
public RestResponse list(Project project, RestRequest restRequest) {
@@ -93,12 +102,14 @@ public class ProjectController {
return RestResponse.success().data(page);
}
+ @Operation(summary = "List git project branches")
@PostMapping("branches")
public RestResponse branches(Project project) {
List<String> branches = project.getAllBranches();
return RestResponse.success().data(branches);
}
+ @Operation(summary = "Delete project")
@PostMapping("delete")
@RequiresPermissions("project:delete")
public RestResponse delete(Long id) {
@@ -106,36 +117,42 @@ public class ProjectController {
return RestResponse.success().data(deleted);
}
+ @Operation(summary = "Authenticate git project")
@PostMapping("gitcheck")
public RestResponse gitCheck(Project project) {
GitAuthorizedError error = project.gitCheck();
return RestResponse.success().data(error.getType());
}
+ @Operation(summary = "Check the project")
@PostMapping("exists")
public RestResponse exists(Project project) {
boolean exists = projectService.checkExists(project);
return RestResponse.success().data(exists);
}
+ @Operation(summary = "List project modules")
@PostMapping("modules")
public RestResponse modules(Long id) {
List<String> result = projectService.modules(id);
return RestResponse.success().data(result);
}
+ @Operation(summary = "List project jars")
@PostMapping("jars")
public RestResponse jars(Project project) {
List<String> result = projectService.jars(project);
return RestResponse.success().data(result);
}
+ @Operation(summary = "List project configurations")
@PostMapping("listconf")
public RestResponse listConf(Project project) {
List<Map<String, Object>> list = projectService.listConf(project);
return RestResponse.success().data(list);
}
+ @Operation(summary = "List the team projects")
@PostMapping("select")
public RestResponse select(@RequestParam Long teamId) {
List<Project> list = projectService.findByTeamId(teamId);
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
index 7ba61296c..b5d69dde1 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SavePointController.java
@@ -29,9 +29,11 @@ import
org.apache.streampark.console.core.service.SavePointService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -41,6 +43,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Nullable;
+@Tag(name = "SAVEPOINT_TAG")
@Slf4j
@Validated
@RestController
@@ -51,18 +54,21 @@ public class SavePointController {
@Autowired private SavePointService savePointService;
+ @Operation(summary = "Get application savepoint latest")
@PostMapping("latest")
public RestResponse latest(Long appId) {
SavePoint savePoint = savePointService.getLatest(appId);
return RestResponse.success(savePoint);
}
+ @Operation(summary = "List application savepoint histories")
@PostMapping("history")
public RestResponse history(SavePoint savePoint, RestRequest request) {
IPage<SavePoint> page = savePointService.page(savePoint, request);
return RestResponse.success(page);
}
+ @Operation(summary = "Delete savepoint")
@PostMapping("delete")
@RequiresPermissions("savepoint:delete")
public RestResponse delete(Long id) throws InternalException {
@@ -72,21 +78,22 @@ public class SavePointController {
return RestResponse.success(deleted);
}
- @ApiAccess
- @ApiOperation(value = "Trigger savepoint for specified application by id.")
- @ApiImplicitParams({
- @ApiImplicitParam(
+ @Operation(
+ summary = "Trigger savepoint",
+ description = "trigger savepoint for specified application")
+ @Parameters({
+ @Parameter(
name = "appId",
- value = "application id",
+ description = "app id",
required = true,
- paramType = "query",
- dataTypeClass = Long.class),
- @ApiImplicitParam(
+ example = "100000",
+ schema = @Schema(implementation = Long.class)),
+ @Parameter(
name = "savepointPath",
- value = "specified savepoint path",
- paramType = "query",
- dataTypeClass = String.class)
+ description = "specified savepoint path",
+ schema = @Schema(implementation = String.class))
})
+ @ApiAccess
@PostMapping("trigger")
@RequiresPermissions("savepoint:trigger")
public RestResponse trigger(Long appId, @Nullable String savepointPath) {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
index 06aa1aeac..5fb9cd14d 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/SettingController.java
@@ -25,6 +25,8 @@ import
org.apache.streampark.console.core.service.SettingService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -34,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
+@Tag(name = "SETTING_TAG")
@Slf4j
@Validated
@RestController
@@ -42,6 +45,7 @@ public class SettingController {
@Autowired private SettingService settingService;
+ @Operation(summary = "List settings")
@PostMapping("all")
@RequiresPermissions("setting:view")
public RestResponse all() {
@@ -51,18 +55,21 @@ public class SettingController {
return RestResponse.success(setting);
}
+ @Operation(summary = "Get setting")
@PostMapping("get")
public RestResponse get(String key) {
Setting setting = settingService.get(key);
return RestResponse.success(setting);
}
+ @Operation(summary = "Get streampark address")
@PostMapping("weburl")
public RestResponse webUrl() {
String url = settingService.getStreamParkAddress();
return RestResponse.success(url == null ? null : url.trim());
}
+ @Operation(summary = "Update setting")
@PostMapping("update")
@RequiresPermissions("setting:update")
public RestResponse update(Setting setting) {
@@ -70,6 +77,7 @@ public class SettingController {
return RestResponse.success(updated);
}
+ @Operation(summary = "Check hadoop status")
@PostMapping("checkHadoop")
public RestResponse checkHadoop() {
try {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
index 9017243ff..b57b4c4b8 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/VariableController.java
@@ -26,6 +26,8 @@ import
org.apache.streampark.console.core.service.VariableService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -41,6 +43,7 @@ import javax.validation.constraints.NotBlank;
import java.util.List;
+@Tag(name = "VARIABLE_TAG")
@Slf4j
@Validated
@RestController
@@ -56,6 +59,7 @@ public class VariableController {
* @param variable
* @return
*/
+ @Operation(summary = "List variables")
@PostMapping("page")
@RequiresPermissions("variable:view")
public RestResponse page(RestRequest restRequest, Variable variable) {
@@ -73,6 +77,7 @@ public class VariableController {
* @param keyword Fuzzy search keywords through variable code or
description, Nullable.
* @return
*/
+ @Operation(summary = "List variables")
@PostMapping("list")
public RestResponse variableList(@RequestParam Long teamId, String keyword) {
List<Variable> variableList = variableService.findByTeamId(teamId,
keyword);
@@ -82,6 +87,7 @@ public class VariableController {
return RestResponse.success(variableList);
}
+ @Operation(summary = "List the variable depend applications")
@PostMapping("dependApps")
@RequiresPermissions("variable:depend_apps")
public RestResponse dependApps(RestRequest restRequest, Variable variable) {
@@ -89,6 +95,7 @@ public class VariableController {
return RestResponse.success(dependApps);
}
+ @Operation(summary = "Create variable")
@PostMapping("post")
@RequiresPermissions("variable:add")
public RestResponse addVariable(@Valid Variable variable) {
@@ -96,6 +103,7 @@ public class VariableController {
return RestResponse.success();
}
+ @Operation(summary = "Update variable")
@PutMapping("update")
@RequiresPermissions("variable:update")
public RestResponse updateVariable(@Valid Variable variable) {
@@ -103,6 +111,7 @@ public class VariableController {
return RestResponse.success();
}
+ @Operation(summary = "Get variable")
@PostMapping("showOriginal")
@RequiresPermissions("variable:show_original")
public RestResponse showOriginal(@RequestParam Long id) {
@@ -110,6 +119,7 @@ public class VariableController {
return RestResponse.success(v);
}
+ @Operation(summary = "Delete variable")
@DeleteMapping("delete")
@RequiresPermissions("variable:delete")
public RestResponse deleteVariable(@Valid Variable variable) {
@@ -117,6 +127,7 @@ public class VariableController {
return RestResponse.success();
}
+ @Operation(summary = "Check variable code")
@PostMapping("check/code")
public RestResponse checkVariableCode(
@RequestParam Long teamId, @NotBlank(message = "{required}") String
variableCode) {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/YarnQueueController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/YarnQueueController.java
index 694b3a833..4f05dd404 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/YarnQueueController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/YarnQueueController.java
@@ -26,16 +26,17 @@ import
org.apache.streampark.console.core.service.YarnQueueService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
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.RestController;
+@Tag(name = "YARN_QUEUE_TAG")
@Slf4j
@Validated
@RestController
@@ -51,6 +52,7 @@ public class YarnQueueController {
* @param yarnQueue optional fields used to search.
* @return RestResponse with IPage<{@link YarnQueue}> object.
*/
+ @Operation(summary = "List yarn queues")
@ApiAccess
@PostMapping("list")
public RestResponse list(RestRequest restRequest, YarnQueue yarnQueue) {
@@ -58,67 +60,37 @@ public class YarnQueueController {
return RestResponse.success(queuePage);
}
+ @Operation(summary = "Check yarn queue valid")
@ApiAccess
- @ApiOperation(value = "Check the yarn queue whether is valid.")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "yarnQueue",
- value = "yarn queue",
- required = true,
- paramType = "body",
- dataTypeClass = Long.class)
- })
@PostMapping("check")
- public RestResponse check(YarnQueue yarnQueue) {
+ public RestResponse check(@RequestBody YarnQueue yarnQueue) {
return RestResponse.success(yarnQueueService.checkYarnQueue(yarnQueue));
}
+ @Operation(summary = "Create yarn queue")
@ApiAccess
- @ApiOperation(value = "Create a new yarn queue.")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "yarnQueue",
- value = "yarn queue",
- required = true,
- paramType = "body",
- dataTypeClass = Long.class)
- })
@PostMapping("create")
@RequiresPermissions("yarnQueue:create")
- public RestResponse create(YarnQueue yarnQueue) {
+ public RestResponse create(@RequestBody YarnQueue yarnQueue) {
return RestResponse.success(yarnQueueService.createYarnQueue(yarnQueue));
}
+ @Operation(summary = "Update yarn queue")
@ApiAccess
- @ApiOperation(value = "Update the yarn queue.")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "yarnQueue",
- value = "yarn queue",
- required = true,
- paramType = "body",
- dataTypeClass = Long.class)
- })
@PostMapping("update")
@RequiresPermissions("yarnQueue:update")
- public RestResponse update(YarnQueue yarnQueue) {
+ public RestResponse update(@RequestBody YarnQueue yarnQueue) {
yarnQueueService.updateYarnQueue(yarnQueue);
return RestResponse.success();
}
+ @Operation(
+ summary = "Delete yarn queue",
+ description = "delete by (team id & yarn queue) or yarn queue id")
@ApiAccess
- @ApiOperation(value = "Delete a yarn queue by (team id & yarn queue) or yarn
queue id.")
- @ApiImplicitParams({
- @ApiImplicitParam(
- name = "yarnQueue",
- value = "Yarn Queue json value",
- required = true,
- paramType = "body",
- dataTypeClass = YarnQueue.class)
- })
@PostMapping("delete")
@RequiresPermissions("yarnQueue:delete")
- public RestResponse delete(YarnQueue yarnQueue) {
+ public RestResponse delete(@RequestBody YarnQueue yarnQueue) {
yarnQueueService.deleteYarnQueue(yarnQueue);
return RestResponse.success();
}
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
index ae37ef038..3384723ae 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroConfig.java
@@ -45,11 +45,10 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/actuator/**", "anon");
filterChainDefinitionMap.put("/doc.html", "anon");
+ filterChainDefinitionMap.put("/swagger-ui.html", "anon");
filterChainDefinitionMap.put("/swagger-ui/**", "anon");
- filterChainDefinitionMap.put("/swagger-resources", "anon");
- filterChainDefinitionMap.put("/swagger-resources/configuration/security",
"anon");
- filterChainDefinitionMap.put("/swagger-resources/configuration/ui",
"anon");
- filterChainDefinitionMap.put("/v3/api-docs", "anon");
+ filterChainDefinitionMap.put("/swagger-resources/**", "anon");
+ filterChainDefinitionMap.put("/v3/api-docs/**", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/passport/**", "anon");
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
index d2cef3a16..09dd0b55c 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
@@ -29,15 +29,23 @@ import
org.apache.streampark.console.system.service.AccessTokenService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+@Tag(name = "ACCESS_TOKEN_TAG")
@RestController
@RequestMapping("token")
public class AccessTokenController {
@@ -47,16 +55,38 @@ public class AccessTokenController {
@Autowired private CommonService commonService;
/** generate token string */
+ @Operation(summary = "Create token")
+ @Parameters({
+ @Parameter(
+ name = "userId",
+ description = "user id",
+ required = true,
+ example = "100000",
+ schema = @Schema(implementation = Long.class)),
+ @Parameter(
+ name = "expireTime",
+ description = "token expire time, yyyy-MM-dd HH:mm:ss",
+ required = true,
+ example = "9999-01-01 00:00:00",
+ schema = @Schema(implementation = String.class)),
+ @Parameter(
+ name = "description",
+ description = "token description",
+ schema = @Schema(implementation = String.class))
+ })
@PostMapping(value = "create")
@RequiresPermissions("token:add")
public RestResponse createToken(
- @NotBlank(message = "{required}") Long userId, String expireTime, String
description)
+ @NotBlank(message = "{required}") Long userId,
+ String expireTime,
+ @RequestParam(required = false) String description)
throws InternalException {
return accessTokenService.generateToken(userId, expireTime, description);
}
+ @Operation(summary = "Verify current user token")
@PostMapping(value = "check")
- public RestResponse checkToken() {
+ public RestResponse verifyToken() {
Long userId = commonService.getUserId();
RestResponse restResponse = RestResponse.success();
if (userId != null) {
@@ -75,14 +105,32 @@ public class AccessTokenController {
}
/** query token list */
+ @Operation(summary = "List tokens")
+ @Parameters({
+ @Parameter(
+ name = "userId",
+ in = ParameterIn.QUERY,
+ description = "user id",
+ schema = @Schema(implementation = Long.class))
+ })
@PostMapping(value = "list")
@RequiresPermissions("token:view")
- public RestResponse tokenList(RestRequest restRequest, AccessToken
accessToken) {
+ public RestResponse tokensList(
+ RestRequest restRequest, @Parameter(hidden = true) AccessToken
accessToken) {
IPage<AccessToken> accessTokens =
accessTokenService.findAccessTokens(accessToken, restRequest);
return RestResponse.success(accessTokens);
}
/** update token status */
+ @Operation(summary = "Toggle token")
+ @Parameters({
+ @Parameter(
+ name = "tokenId",
+ description = "token id",
+ required = true,
+ example = "1",
+ schema = @Schema(implementation = Long.class))
+ })
@PostMapping("toggle")
@RequiresPermissions("token:add")
public RestResponse toggleToken(@NotNull(message = "{required}") Long
tokenId) {
@@ -90,6 +138,15 @@ public class AccessTokenController {
}
/** delete token by id */
+ @Operation(summary = "Delete token")
+ @Parameters({
+ @Parameter(
+ name = "tokenId",
+ description = "token id",
+ required = true,
+ example = "1",
+ schema = @Schema(implementation = Long.class))
+ })
@DeleteMapping(value = "delete")
@RequiresPermissions("token:delete")
public RestResponse deleteToken(@NotBlank(message = "{required}") Long
tokenId) {
@@ -101,6 +158,7 @@ public class AccessTokenController {
* copy cURL, hardcode now, there is no need for configuration here, because
there are several
* fixed interfaces
*/
+ @Operation(summary = "Generate api with token")
@PostMapping(value = "curl")
public RestResponse copyRestApiCurl(
@NotBlank(message = "{required}") String appId,
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
index 971d51c00..c92df03f8 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
@@ -27,6 +27,8 @@ import
org.apache.streampark.console.system.service.MemberService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -41,6 +43,7 @@ import javax.validation.constraints.NotBlank;
import java.util.List;
+@Tag(name = "MEMBER_TAG")
@Slf4j
@Validated
@RestController
@@ -49,30 +52,35 @@ public class MemberController {
@Autowired private MemberService memberService;
+ @Operation(summary = "List members")
@PostMapping("list")
public RestResponse memberList(RestRequest restRequest, Member member) {
IPage<Member> userList = memberService.findUsers(member, restRequest);
return RestResponse.success(userList);
}
+ @Operation(summary = "List candidate users")
@PostMapping("candidateUsers")
public RestResponse candidateUsers(Long teamId) {
List<User> userList = memberService.findCandidateUsers(teamId);
return RestResponse.success(userList);
}
+ @Operation(summary = "List teams")
@PostMapping("teams")
public RestResponse listTeams(Long userId) {
List<Team> teamList = memberService.findUserTeams(userId);
return RestResponse.success(teamList);
}
+ @Operation(summary = "Check the username")
@PostMapping("check/user")
public RestResponse check(@NotBlank(message = "{required}") Long teamId,
String userName) {
Member result = this.memberService.findByUserName(teamId, userName);
return RestResponse.success(result == null);
}
+ @Operation(summary = "Create member")
@PostMapping("post")
@RequiresPermissions("member:add")
public RestResponse create(@Valid Member member) {
@@ -80,6 +88,7 @@ public class MemberController {
return RestResponse.success();
}
+ @Operation(summary = "Delete member")
@DeleteMapping("delete")
@RequiresPermissions("member:delete")
public RestResponse delete(Member member) {
@@ -87,6 +96,7 @@ public class MemberController {
return RestResponse.success();
}
+ @Operation(summary = "Update member")
@PutMapping("update")
@RequiresPermissions("member:update")
public RestResponse update(Member member) {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
index 79288f803..0e6218888 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MenuController.java
@@ -25,6 +25,9 @@ import
org.apache.streampark.console.system.service.MenuService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -38,6 +41,7 @@ import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Map;
+@Tag(name = "MENU_TAG")
@Slf4j
@Validated
@RestController
@@ -48,6 +52,7 @@ public class MenuController {
@Autowired private CommonService commonService;
+ @Operation(summary = "List menu-routes")
@PostMapping("router")
public RestResponse getUserRouters(Long teamId) {
// TODO The teamId is required, get routers should be called after choose
teamId.
@@ -56,6 +61,7 @@ public class MenuController {
return RestResponse.success(routers);
}
+ @Operation(summary = "List menus")
@PostMapping("list")
@RequiresPermissions("menu:view")
public RestResponse menuList(Menu menu) {
@@ -63,6 +69,7 @@ public class MenuController {
return RestResponse.success(maps);
}
+ @Operation(summary = "Create menu")
@PostMapping("post")
@RequiresPermissions("menu:add")
public RestResponse addMenu(@Valid Menu menu) {
@@ -70,6 +77,7 @@ public class MenuController {
return RestResponse.success();
}
+
@PutMapping("update")
@RequiresPermissions("menu:update")
public RestResponse updateMenu(@Valid Menu menu) throws Exception {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
index eb7799cf2..bfb5f819c 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
@@ -32,6 +32,8 @@ import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@@ -43,6 +45,7 @@ import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.Map;
+@Tag(name = "PASSPORT_TAG")
@Validated
@RestController
@RequestMapping("passport")
@@ -54,6 +57,7 @@ public class PassportController {
@Autowired private Authenticator authenticator;
+ @Operation(summary = "Signin")
@PostMapping("signin")
public RestResponse signin(
@NotBlank(message = "{required}") String username,
@@ -95,6 +99,7 @@ public class PassportController {
return new RestResponse().data(userInfo);
}
+ @Operation(summary = "Signout")
@PostMapping("signout")
public RestResponse signout() {
SecurityUtils.getSecurityManager().logout(SecurityUtils.getSubject());
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/RoleController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/RoleController.java
index 3760fd7ab..7c639782d 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/RoleController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/RoleController.java
@@ -27,6 +27,8 @@ import
org.apache.streampark.console.system.service.RoleService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -42,6 +44,7 @@ import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.stream.Collectors;
+@Tag(name = "ROLE_TAG")
@Slf4j
@Validated
@RestController
@@ -51,6 +54,7 @@ public class RoleController {
@Autowired private RoleService roleService;
@Autowired private RoleMenuServie roleMenuServie;
+ @Operation(summary = "List roles")
@PostMapping("list")
@RequiresPermissions("role:view")
public RestResponse roleList(RestRequest restRequest, Role role) {
@@ -58,12 +62,14 @@ public class RoleController {
return RestResponse.success(roleList);
}
+ @Operation(summary = "Check the role name")
@PostMapping("check/name")
public RestResponse checkRoleName(@NotBlank(message = "{required}") String
roleName) {
Role result = this.roleService.findByName(roleName);
return RestResponse.success(result == null);
}
+ @Operation(summary = "List role menus")
@PostMapping("menu")
public RestResponse getRoleMenus(@NotBlank(message = "{required}") String
roleId) {
List<RoleMenu> list = this.roleMenuServie.getByRoleId(roleId);
@@ -74,6 +80,7 @@ public class RoleController {
return RestResponse.success(roleMenus);
}
+ @Operation(summary = "Create role")
@PostMapping("post")
@RequiresPermissions("role:add")
public RestResponse addRole(@Valid Role role) {
@@ -81,6 +88,7 @@ public class RoleController {
return RestResponse.success();
}
+ @Operation(summary = "Delete role")
@DeleteMapping("delete")
@RequiresPermissions("role:delete")
public RestResponse deleteRole(Long roleId) {
@@ -88,6 +96,7 @@ public class RoleController {
return RestResponse.success();
}
+ @Operation(summary = "Update role")
@PutMapping("update")
@RequiresPermissions("role:update")
public RestResponse updateRole(Role role) throws Exception {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamController.java
index fed8b041e..86736b9e6 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamController.java
@@ -25,6 +25,8 @@ import
org.apache.streampark.console.system.service.TeamService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -37,6 +39,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
+@Tag(name = "TEAM_TAG")
@Slf4j
@Validated
@RestController
@@ -45,18 +48,21 @@ public class TeamController {
@Autowired private TeamService teamService;
+ @Operation(summary = "List teams")
@PostMapping("list")
public RestResponse teamList(RestRequest restRequest, Team team) {
IPage<Team> teamList = teamService.findTeams(team, restRequest);
return RestResponse.success(teamList);
}
+ @Operation(summary = "Check the team name")
@PostMapping("check/name")
public RestResponse checkTeamName(@NotBlank(message = "{required}") String
teamName) {
Team result = this.teamService.findByName(teamName);
return RestResponse.success(result == null);
}
+ @Operation(summary = "Create team")
@PostMapping("post")
@RequiresPermissions("team:add")
public RestResponse addTeam(@Valid Team team) {
@@ -64,6 +70,7 @@ public class TeamController {
return RestResponse.success();
}
+ @Operation(summary = "Delete team")
@DeleteMapping("delete")
@RequiresPermissions("team:delete")
public RestResponse deleteTeam(Team team) {
@@ -71,6 +78,7 @@ public class TeamController {
return RestResponse.success();
}
+ @Operation(summary = "Update team")
@PutMapping("update")
@RequiresPermissions("team:update")
public RestResponse updateTeam(Team team) {
diff --git
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
index cf927d677..07da93547 100644
---
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
+++
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
@@ -34,6 +34,9 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
+
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -41,6 +44,7 @@ import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@@ -49,6 +53,7 @@ import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
+@Tag(name = "USER_TAG")
@Slf4j
@Validated
@RestController
@@ -61,6 +66,8 @@ public class UserController {
@Autowired private CommonService commonService;
+
+ @Operation(summary = "List users")
@PostMapping("list")
@RequiresPermissions(
value = {"user:view", "app:view"},
@@ -70,6 +77,7 @@ public class UserController {
return RestResponse.success(userList);
}
+ @Operation(summary = "Create user")
@PostMapping("post")
@RequiresPermissions("user:add")
public RestResponse addUser(@Valid User user) throws Exception {
@@ -78,6 +86,7 @@ public class UserController {
return RestResponse.success();
}
+ @Operation(summary = "Update user")
@PutMapping("update")
@RequiresPermissions("user:update")
public RestResponse updateUser(@Valid User user) throws Exception {
@@ -85,6 +94,7 @@ public class UserController {
return RestResponse.success();
}
+ @Operation(summary = "Delete user")
@DeleteMapping("delete")
@RequiresPermissions("user:delete")
public RestResponse deleteUser(Long userId) throws Exception {
@@ -92,24 +102,29 @@ public class UserController {
return RestResponse.success();
}
+
+ @Operation(summary = "List without token users")
@PostMapping("getNoTokenUser")
public RestResponse getNoTokenUser() {
List<User> userList = this.userService.getNoTokenUser();
return RestResponse.success(userList);
}
+ @Operation(summary = "Check the username")
@PostMapping("check/name")
public RestResponse checkUserName(@NotBlank(message = "{required}") String
username) {
boolean result = this.userService.findByName(username) == null;
return RestResponse.success(result);
}
+ @Operation(summary = "Update password")
@PutMapping("password")
public RestResponse updatePassword(User user) throws Exception {
userService.updatePassword(user);
return RestResponse.success();
}
+ @Operation(summary = "Reset password")
@PutMapping("password/reset")
@RequiresPermissions("user:reset")
public RestResponse resetPassword(@NotBlank(message = "{required}") String
usernames)
@@ -119,12 +134,14 @@ public class UserController {
return RestResponse.success();
}
+ @Operation(summary = "List user types")
@PostMapping("types")
@RequiresPermissions("user:types")
public RestResponse userTypes() {
return RestResponse.success(UserType.values());
}
+ @Operation(summary = "Init the user teams")
@PostMapping("initTeam")
public RestResponse initTeam(Long teamId, Long userId) {
Team team = teamService.getById(teamId);
@@ -135,6 +152,7 @@ public class UserController {
return RestResponse.success();
}
+ @Operation(summary = "Set the current user teams")
@PostMapping("setTeam")
public RestResponse setTeam(Long teamId) {
Team team = teamService.getById(teamId);
@@ -153,6 +171,7 @@ public class UserController {
return new RestResponse().data(infoMap);
}
+ @Operation(summary = "List the team users")
@PostMapping("appOwners")
public RestResponse appOwners(Long teamId) {
List<User> userList = userService.findByAppOwner(teamId);
diff --git
a/streampark-console/streampark-console-service/src/main/resources/application.yml
b/streampark-console/streampark-console-service/src/main/resources/application.yml
index 7d4a2d197..d21c11666 100644
---
a/streampark-console/streampark-console-service/src/main/resources/application.yml
+++
b/streampark-console/streampark-console-service/src/main/resources/application.yml
@@ -28,9 +28,6 @@ logging:
level:
root: info
-swagger:
- enable: true
-
knife4j:
enable: true
basic:
@@ -39,6 +36,13 @@ knife4j:
username: admin
password: streampark
+springdoc:
+ api-docs:
+ enabled: true
+ swagger-ui:
+ path: /swagger-ui.html
+ packages-to-scan: org.apache.streampark.console
+
spring:
profiles.active: h2 #[h2,pgsql,mysql]
application.name: StreamPark
diff --git
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
index 7b544b42a..e36715720 100644
---
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
+++
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/AccessTokenMapper.xml
@@ -44,7 +44,7 @@
from t_access_token t1 join t_user t2 on t1.user_id = t2.user_id
<where>
<if test="accessToken.userId != null and accessToken.userId != ''">
- and t1.user_id = accessToken.userId
+ and t1.user_id = #{accessToken.userId}
</if>
</where>
</select>
diff --git
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
index b13e5f6bd..70b8768d0 100644
---
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
+++
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/AccessTokenServiceTest.java
@@ -18,6 +18,7 @@
package org.apache.streampark.console.core.service;
import org.apache.streampark.console.SpringTestBase;
+import org.apache.streampark.console.base.domain.RestRequest;
import org.apache.streampark.console.base.domain.RestResponse;
import org.apache.streampark.console.base.util.WebUtils;
import org.apache.streampark.console.system.authentication.JWTToken;
@@ -27,6 +28,7 @@ import org.apache.streampark.console.system.entity.User;
import org.apache.streampark.console.system.service.AccessTokenService;
import org.apache.streampark.console.system.service.UserService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,12 +40,14 @@ public class AccessTokenServiceTest extends SpringTestBase {
@Autowired private UserService userService;
@Test
- void testGenerateToken() throws Exception {
+ void testCrudToken() throws Exception {
Long mockUserId = 100000L;
String expireTime = "9999-01-01 00:00:00";
RestResponse restResponse = accessTokenService.generateToken(mockUserId,
expireTime, "");
Assertions.assertNotNull(restResponse);
Assertions.assertInstanceOf(AccessToken.class, restResponse.get("data"));
+
+ // verify
AccessToken accessToken = (AccessToken) restResponse.get("data");
LOG.info(accessToken.getToken());
JWTToken jwtToken = new
JWTToken(WebUtils.decryptToken(accessToken.getToken()));
@@ -54,5 +58,29 @@ public class AccessTokenServiceTest extends SpringTestBase {
User user = userService.findByName(username);
Assertions.assertNotNull(user);
Assertions.assertTrue(JWTUtil.verify(jwtToken.getToken(), username));
+
+ // list
+ AccessToken mockToken1 = new AccessToken();
+ mockToken1.setUserId(100000L);
+ IPage<AccessToken> tokens1 =
accessTokenService.findAccessTokens(mockToken1, new RestRequest());
+ Assertions.assertEquals(1, tokens1.getRecords().size());
+ AccessToken mockToken2 = new AccessToken();
+ mockToken2.setUserId(100001L);
+ IPage<AccessToken> tokens2 =
accessTokenService.findAccessTokens(mockToken2, new RestRequest());
+ Assertions.assertTrue(tokens2.getRecords().isEmpty());
+
+ // toggle
+ Long tokenId = accessToken.getId();
+ RestResponse toggleTokenResp = accessTokenService.toggleToken(tokenId);
+ Assertions.assertNotNull(toggleTokenResp);
+ Assertions.assertTrue((Boolean) toggleTokenResp.get("data"));
+
+ // get
+ AccessToken afterToggle = accessTokenService.getByUserId(mockUserId);
+ Assertions.assertNotNull(afterToggle);
+ Assertions.assertEquals(AccessToken.STATUS_DISABLE,
afterToggle.getStatus());
+
+ // delete
+ Assertions.assertTrue(accessTokenService.deleteToken(tokenId));
}
}