This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push: new a41bd6eddd Mock `/api/v1/status/buildinfo` for PromQL API (#11901) a41bd6eddd is described below commit a41bd6eddd27277706b280105de978f099d70ce9 Author: Wan Kai <wankai...@foxmail.com> AuthorDate: Tue Feb 20 19:21:22 2024 +0800 Mock `/api/v1/status/buildinfo` for PromQL API (#11901) --- docs/en/changes/changes.md | 1 + docs/en/setup/backend/configuration-vocabulary.md | 6 +++++ .../skywalking/oap/query/promql/PromQLConfig.java | 8 +++++++ .../oap/query/promql/PromQLProvider.java | 2 +- .../{PromQLConfig.java => entity/BuildInfo.java} | 27 +++++++++++----------- .../response/BuildInfoRsp.java} | 21 +++++++---------- .../oap/query/promql/handler/PromQLApiHandler.java | 21 ++++++++++++++++- .../src/main/resources/application.yml | 7 ++++++ 8 files changed, 65 insertions(+), 28 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index f63a3cd727..abd3db6f1f 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -51,6 +51,7 @@ - ROCKETMQ -> K8S_SERVICE - VIRTUAL_MQ -> ROCKETMQ * Fix ServiceInstance `in` query. +* Mock `/api/v1/status/buildinfo` for PromQL API. * Fix table exists check in the JDBC Storage Plugin. #### UI diff --git a/docs/en/setup/backend/configuration-vocabulary.md b/docs/en/setup/backend/configuration-vocabulary.md index 25dea0650c..3b30be2475 100644 --- a/docs/en/setup/backend/configuration-vocabulary.md +++ b/docs/en/setup/backend/configuration-vocabulary.md @@ -265,6 +265,12 @@ The Configuration Vocabulary lists all available configurations provided by `app | - | - | restMaxThreads | Maximum thread number of RESTful services. [...] | - | - | restIdleTimeOut | Connector idle timeout of RESTful services (in milliseconds). [...] | - | - | restAcceptQueueSize | Maximum request header size accepted. [...] +| - | - | buildInfoVersion | Mock version for API buildInfo [...] +| - | - | buildInfoRevision | Mock revision for API buildInfo [...] +| - | - | buildInfoBranch | Mock branch for API buildInfo [...] +| - | - | buildInfoBuildUser | Mock build user for API buildInfo [...] +| - | - | buildInfoBuildDate | Mock build date for API buildInfo [...] +| - | - | buildInfoGoVersion | Mock go version for API buildInfo [...] | alarm | default | - | Read [alarm doc](backend-alarm.md) for more details. [...] | telemetry | - | - | Read [telemetry doc](backend-telemetry.md) for more details. [...] | - | none | - | No op implementation. [...] diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java index 244cb50b5d..36c9399cbf 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java @@ -31,4 +31,12 @@ public class PromQLConfig extends ModuleConfig { private int restMaxThreads = 200; private long restIdleTimeOut = 30000; private int restAcceptQueueSize = 0; + + // The following configs are used to build `/api/v1/status/buildinfo` API response. + private String buildInfoVersion = "2.45.0"; // Declare compatibility with 2.45 LTS version APIs. + private String buildInfoRevision = ""; + private String buildInfoBranch = ""; + private String buildInfoBuildUser = ""; + private String buildInfoBuildDate = ""; + private String buildInfoGoVersion = ""; } diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLProvider.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLProvider.java index 5cced8546e..f25bc5dd05 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLProvider.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLProvider.java @@ -80,7 +80,7 @@ public class PromQLProvider extends ModuleProvider { httpServer = new HTTPServer(httpServerConfig); httpServer.initialize(); httpServer.addHandler( - new PromQLApiHandler(getManager()), + new PromQLApiHandler(getManager(), config), Arrays.asList(HttpMethod.POST, HttpMethod.GET) ); } diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/entity/BuildInfo.java similarity index 64% copy from oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java copy to oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/entity/BuildInfo.java index 244cb50b5d..61a3308a7a 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/entity/BuildInfo.java @@ -16,19 +16,20 @@ * */ -package org.apache.skywalking.oap.query.promql; +package org.apache.skywalking.oap.query.promql.entity; -import lombok.Getter; -import lombok.Setter; -import org.apache.skywalking.oap.server.library.module.ModuleConfig; +import lombok.Data; -@Setter -@Getter -public class PromQLConfig extends ModuleConfig { - private String restHost; - private int restPort; - private String restContextPath; - private int restMaxThreads = 200; - private long restIdleTimeOut = 30000; - private int restAcceptQueueSize = 0; +/** + * Mock build info for PromQL API, sometimes the client(such as Grafana) use it to detect the version of the data-source server + * for different API support. + */ +@Data +public class BuildInfo { + private String version; + private String revision; + private String branch; + private String buildUser; + private String buildDate; + private String goVersion; } diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/entity/response/BuildInfoRsp.java similarity index 64% copy from oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java copy to oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/entity/response/BuildInfoRsp.java index 244cb50b5d..09ae57c3c2 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/PromQLConfig.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/entity/response/BuildInfoRsp.java @@ -16,19 +16,14 @@ * */ -package org.apache.skywalking.oap.query.promql; +package org.apache.skywalking.oap.query.promql.entity.response; -import lombok.Getter; -import lombok.Setter; -import org.apache.skywalking.oap.server.library.module.ModuleConfig; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.skywalking.oap.query.promql.entity.BuildInfo; -@Setter -@Getter -public class PromQLConfig extends ModuleConfig { - private String restHost; - private int restPort; - private String restContextPath; - private int restMaxThreads = 200; - private long restIdleTimeOut = 30000; - private int restAcceptQueueSize = 0; +@EqualsAndHashCode(callSuper = true) +@Data +public class BuildInfoRsp extends QueryResponse { + private BuildInfo data = new BuildInfo(); } diff --git a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java index 519f142e00..289dff7254 100644 --- a/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java +++ b/oap-server/server-query-plugin/promql-plugin/src/main/java/org/apache/skywalking/oap/query/promql/handler/PromQLApiHandler.java @@ -42,6 +42,7 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.apache.skywalking.oap.query.graphql.resolver.MetadataQueryV2; import org.apache.skywalking.oap.query.graphql.resolver.MetricsQuery; import org.apache.skywalking.oap.query.graphql.resolver.RecordsQuery; +import org.apache.skywalking.oap.query.promql.PromQLConfig; import org.apache.skywalking.oap.query.promql.entity.ErrorType; import org.apache.skywalking.oap.query.promql.entity.LabelName; import org.apache.skywalking.oap.query.promql.entity.LabelValuePair; @@ -49,6 +50,7 @@ import org.apache.skywalking.oap.query.promql.entity.MetricInstantData; import org.apache.skywalking.oap.query.promql.entity.MetricMetadata; import org.apache.skywalking.oap.query.promql.entity.MetricRangeData; import org.apache.skywalking.oap.query.promql.entity.TimeValuePair; +import org.apache.skywalking.oap.query.promql.entity.response.BuildInfoRsp; import org.apache.skywalking.oap.query.promql.entity.response.ExprQueryRsp; import org.apache.skywalking.oap.query.promql.entity.MetricInfo; import org.apache.skywalking.oap.query.promql.entity.response.LabelValuesQueryRsp; @@ -94,12 +96,14 @@ public class PromQLApiHandler { private final MetadataQueryV2 metadataQuery; private final MetricsQuery metricsQuery; private final RecordsQuery recordsQuery; + private final PromQLConfig config; private static final ObjectMapper MAPPER = new ObjectMapper(); - public PromQLApiHandler(ModuleManager moduleManager) { + public PromQLApiHandler(ModuleManager moduleManager, PromQLConfig config) { this.metadataQuery = new MetadataQueryV2(moduleManager); this.metricsQuery = new MetricsQuery(moduleManager); this.recordsQuery = new RecordsQuery(moduleManager); + this.config = config; } @Get @@ -394,6 +398,21 @@ public class PromQLApiHandler { return jsonResponse(response); } + @Get + @Post + @Path("/api/v1/status/buildinfo") + public HttpResponse buildInfo() throws IOException { + BuildInfoRsp buildInfoRsp = new BuildInfoRsp(); + buildInfoRsp.setStatus(ResultStatus.SUCCESS); + buildInfoRsp.getData().setVersion(config.getBuildInfoVersion()); + buildInfoRsp.getData().setRevision(config.getBuildInfoRevision()); + buildInfoRsp.getData().setBranch(config.getBuildInfoBranch()); + buildInfoRsp.getData().setBuildUser(config.getBuildInfoBuildUser()); + buildInfoRsp.getData().setBuildDate(config.getBuildInfoBuildDate()); + buildInfoRsp.getData().setGoVersion(config.getBuildInfoGoVersion()); + return jsonResponse(buildInfoRsp); + } + private HttpResponse jsonResponse(QueryResponse response) throws JsonProcessingException { return HttpResponse.of(ResponseHeaders.builder(HttpStatus.OK) .contentType(MediaType.JSON) diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml index 147694a244..501bbf2a3a 100644 --- a/oap-server/server-starter/src/main/resources/application.yml +++ b/oap-server/server-starter/src/main/resources/application.yml @@ -443,6 +443,13 @@ promql: restMaxThreads: ${SW_PROMQL_REST_MAX_THREADS:200} restIdleTimeOut: ${SW_PROMQL_REST_IDLE_TIMEOUT:30000} restAcceptQueueSize: ${SW_PROMQL_REST_QUEUE_SIZE:0} + # The below config is for the API buildInfo, set the value to mock the build info. + buildInfoVersion: ${SW_PROMQL_BUILD_INFO_VERSION:"2.45.0"} + buildInfoRevision: ${SW_PROMQL_BUILD_INFO_REVISION:""} + buildInfoBranch: ${SW_PROMQL_BUILD_INFO_BRANCH:""} + buildInfoBuildUser: ${SW_PROMQL_BUILD_INFO_BUILD_USER:""} + buildInfoBuildDate: ${SW_PROMQL_BUILD_INFO_BUILD_DATE:""} + buildInfoGoVersion: ${SW_PROMQL_BUILD_INFO_GO_VERSION:""} #This module is for LogQL API. logql: