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:

Reply via email to