Skip to content

Commit

Permalink
feat(mis/portal): 增加获取 SCOW API 版本的接口 (#1381)
Browse files Browse the repository at this point in the history
### 做了什么
增加了一个proto接口 getVersion,可以用来获取scow的版本,方便其它服务判断当前部署的scow是否支持某些功能
  • Loading branch information
tongchong authored Aug 1, 2024
1 parent ce6c08e commit 4bef1b3
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 2 deletions.
5 changes: 5 additions & 0 deletions .changeset/kind-owls-buy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@scow/grpc-api": minor
---

增加获取 SCOW API 版本的接口
6 changes: 6 additions & 0 deletions .changeset/mean-boats-repair.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@scow/portal-server": patch
"@scow/mis-server": patch
---

增加获取 SCOW API 版本的接口
11 changes: 11 additions & 0 deletions apps/mis-server/src/services/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import { convertClusterConfigsToServerProtoType, NO_CLUSTERS } from "@scow/lib-s
import { scowErrorMetadata } from "@scow/lib-server/build/error";
import { libCheckActivatedClusters } from "@scow/lib-server/build/misCommon/clustersActivation";
import { ConfigServiceServer, ConfigServiceService } from "@scow/protos/build/common/config";
import { readFileSync } from "fs";
import { join } from "path";
import { getActivatedClusters, updateCluster } from "src/bl/clustersUtils";

export const configServiceServer = plugin((server) => {
Expand Down Expand Up @@ -76,5 +78,14 @@ export const configServiceServer = plugin((server) => {
return [{ clusterConfigs: clusterConfigsProto }];
},

getApiVersion: async () => {

const version = await JSON.parse(readFileSync(join(__dirname,
"../../node_modules/@scow/protos/package.json"), "utf-8")).version;

const [major, minor, patch] = version.split(".").map(Number);

return [{ major, minor, patch }];
},
});
});
14 changes: 12 additions & 2 deletions apps/portal-server/src/services/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ import { ConfigServiceServer, ConfigServiceService, Partition } from "@scow/prot
import { ConfigServiceServer as runTimeConfigServiceServer, ConfigServiceService as runTimeConfigServiceService }
from "@scow/protos/build/portal/config";
import { ApiVersion } from "@scow/utils/build/version";
import { readFileSync } from "fs";
import { join } from "path";
import { callOnOne, checkActivatedClusters } from "src/utils/clusters";

export const staticConfigServiceServer = plugin((server) => {
return server.addService<ConfigServiceServer>(ConfigServiceService, {

getClusterConfig: async ({ request, logger }) => {
const { cluster } = request;
await checkActivatedClusters({ clusterIds: cluster });
Expand Down Expand Up @@ -63,7 +64,7 @@ export const staticConfigServiceServer = plugin((server) => {
availablePartitions = [];
}

return [ { partitions: availablePartitions } ];
return [{ partitions: availablePartitions }];
},


Expand All @@ -85,6 +86,15 @@ export const staticConfigServiceServer = plugin((server) => {
return [{ clusterConfigs: clusterConfigsProto }];
},

getApiVersion: async () => {

const version = await JSON.parse(readFileSync(join(__dirname,
"../../node_modules/@scow/protos/package.json"), "utf-8")).version;

const [major, minor, patch] = version.split(".").map(Number);

return [{ major, minor, patch }];
},
});
});

Expand Down
60 changes: 60 additions & 0 deletions apps/portal-server/tests/utils/config.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/**
* Copyright (c) 2022 Peking University and Peking University Institute for Computing and Digital Economy
* SCOW is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/

/**
* Copyright (c) 2022 Peking University and Peking University Institute for Computing and Digital Economy
* SCOW is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/

import { asyncUnaryCall } from "@ddadaal/tsgrpc-client";
import { Server } from "@ddadaal/tsgrpc-server";
import { credentials } from "@grpc/grpc-js";
import { ConfigServiceClient } from "@scow/protos/build/common/config";
import { readFileSync } from "fs";
import { join } from "path";
import { createServer } from "src/app";

let server: Server;
let client: ConfigServiceClient;

beforeEach(async () => {

server = await createServer();

await server.start();

client = new ConfigServiceClient(server.serverAddress, credentials.createInsecure());
});

afterEach(async () => {
await server.close();
});

it("get scow version configs info", async () => {

const reply = await asyncUnaryCall(client, "getApiVersion", { query: {} });

const version = await JSON.parse(readFileSync(join(__dirname,
"../../node_modules/@scow/protos/package.json"), "utf-8")).version;
const [major, minor, patch] = version.split(".").map(Number);
console.log(version);
expect(reply.major).toBe(major);
expect(reply.minor).toBe(minor);
expect(reply.patch).toBe(patch);
});
13 changes: 13 additions & 0 deletions protos/common/config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,24 @@ message GetClusterConfigFilesResponse {
repeated ClusterConfigSchemaProto cluster_configs = 1;
}

message GetApiVersionRequest {

}

message GetApiVersionResponse {
uint32 major = 1;
uint32 minor = 2;
uint32 patch = 3;
}

service ConfigService {
rpc GetClusterConfig(GetClusterConfigRequest) returns (GetClusterConfigResponse);

rpc GetAvailablePartitionsForCluster(GetAvailablePartitionsForClusterRequest) returns (GetAvailablePartitionsForClusterResponse);

// 获取 SCOW 部署的集群配置文件中的集群信息
rpc GetClusterConfigFiles(GetClusterConfigFilesRequest) returns (GetClusterConfigFilesResponse);

// 获取当前部署 SCOW API 的版本,方便接入其它服务
rpc GetApiVersion(GetApiVersionRequest) returns (GetApiVersionResponse);
}

0 comments on commit 4bef1b3

Please sign in to comment.