You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2024/02/20 11:21:28 UTC
(skywalking) branch master updated: Mock `/api/v1/status/buildinfo` for PromQL API (#11901)
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 <wa...@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: