From 6e0718a05f8fab4e8777f75ca0713de8c1a66fc5 Mon Sep 17 00:00:00 2001 From: mabofu Date: Tue, 3 Jan 2023 19:49:08 +0800 Subject: [PATCH] Add about feature --- .../system/controller/SystemController.java | 44 +++++++++ .../modules/system/model/vo/ComponentVO.java | 68 ++++++++++++++ .../system/service/IManagerService.java | 30 ++++++ .../service/impl/ManagerServiceImpl.java | 91 +++++++++++++++++++ .../com/dsms/common/constant/SystemConst.java | 5 + 5 files changed, 238 insertions(+) create mode 100644 dsms-engine-application/src/main/java/com/dsms/modules/system/controller/SystemController.java create mode 100644 dsms-engine-application/src/main/java/com/dsms/modules/system/model/vo/ComponentVO.java create mode 100644 dsms-engine-application/src/main/java/com/dsms/modules/system/service/IManagerService.java create mode 100644 dsms-engine-application/src/main/java/com/dsms/modules/system/service/impl/ManagerServiceImpl.java diff --git a/dsms-engine-application/src/main/java/com/dsms/modules/system/controller/SystemController.java b/dsms-engine-application/src/main/java/com/dsms/modules/system/controller/SystemController.java new file mode 100644 index 0000000..a724a01 --- /dev/null +++ b/dsms-engine-application/src/main/java/com/dsms/modules/system/controller/SystemController.java @@ -0,0 +1,44 @@ +/* + * Copyright 2022 The DSMS Authors. + * + * Licensed 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 com.dsms.modules.system.controller; + + +import com.dsms.common.model.Result; +import com.dsms.modules.system.model.vo.ComponentVO; +import com.dsms.modules.system.service.IManagerService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Slf4j +@Api(tags = "系统模块") +public class SystemController { + + @Autowired + public IManagerService managerService; + + @ApiOperation("系统模块-关于") + @PostMapping("/api/component/about") + public Result about() { + return Result.OK(managerService.getComponentAbout()); + } + +} diff --git a/dsms-engine-application/src/main/java/com/dsms/modules/system/model/vo/ComponentVO.java b/dsms-engine-application/src/main/java/com/dsms/modules/system/model/vo/ComponentVO.java new file mode 100644 index 0000000..cb70aba --- /dev/null +++ b/dsms-engine-application/src/main/java/com/dsms/modules/system/model/vo/ComponentVO.java @@ -0,0 +1,68 @@ +/* + * Copyright 2022 The DSMS Authors. + * + * Licensed 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 com.dsms.modules.system.model.vo; + +import com.dsms.dfsbroker.cluster.model.remote.ServerResult; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.stream.Collectors; + +@ApiModel(value = "管理平台信息") +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComponentVO { + @ApiModelProperty(value = "dsms engine version") + private String dsmsEngineVersion; + + @ApiModelProperty(value = "dsms engine git commit id") + private String dsmsEngineCommitId; + + @ApiModelProperty(value = "dsms engine git tag ids") + private String dsmsEngineCommitTags; + + @ApiModelProperty(value = "dsms release version") + private String dsmsReleaseVersion; + + @ApiModelProperty(value = "dsms storage ceph version") + private List storageVersions; + + @NoArgsConstructor + @Data + @AllArgsConstructor + public static class StorageVersion { + @ApiModelProperty(value = "dsms storage node name") + private String nodeName; + @ApiModelProperty(value = "dsms storage node version") + private String dsmsStorageVersion; + + } + + + public static List parseServiceToStorageVersions(List servers) { + return servers.stream().map((server) -> new StorageVersion(server.getHostname(), server.getCephVersion())).collect(Collectors.toList()); + } + + +} diff --git a/dsms-engine-application/src/main/java/com/dsms/modules/system/service/IManagerService.java b/dsms-engine-application/src/main/java/com/dsms/modules/system/service/IManagerService.java new file mode 100644 index 0000000..3fd93af --- /dev/null +++ b/dsms-engine-application/src/main/java/com/dsms/modules/system/service/IManagerService.java @@ -0,0 +1,30 @@ +/* + * Copyright 2022 The DSMS Authors. + * + * Licensed 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 com.dsms.modules.system.service; + +import com.dsms.modules.system.model.vo.ComponentVO; + +public interface IManagerService { + + /** + * get dsms component info. include version,commitId + * + * @return Component view object + */ + ComponentVO getComponentAbout(); + +} diff --git a/dsms-engine-application/src/main/java/com/dsms/modules/system/service/impl/ManagerServiceImpl.java b/dsms-engine-application/src/main/java/com/dsms/modules/system/service/impl/ManagerServiceImpl.java new file mode 100644 index 0000000..72cdd98 --- /dev/null +++ b/dsms-engine-application/src/main/java/com/dsms/modules/system/service/impl/ManagerServiceImpl.java @@ -0,0 +1,91 @@ +/* + * Copyright 2022 The DSMS Authors. + * + * Licensed 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 com.dsms.modules.system.service.impl; + +import com.dsms.dfsbroker.cluster.api.ClusterApi; +import com.dsms.dfsbroker.cluster.model.remote.ServerResult; +import com.dsms.modules.system.model.vo.ComponentVO; +import com.dsms.modules.system.service.IManagerService; +import com.dsms.modules.util.RemoteCallUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.info.GitProperties; +import org.springframework.stereotype.Service; +import org.springframework.util.ResourceUtils; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.List; + +import static com.dsms.common.constant.SystemConst.RELEASE_VERSION_FILE_PATH; +import static com.dsms.common.constant.SystemConst.VERSION_FILE_PATH; + + +@Slf4j +@Service +public class ManagerServiceImpl implements IManagerService { + + @Autowired + private GitProperties gitProperties; + + @Autowired + private ClusterApi clusterApi; + + @Override + public ComponentVO getComponentAbout() { + ComponentVO componentVO = new ComponentVO(); + //1. get git info + componentVO.setDsmsEngineCommitId(gitProperties.getCommitId()); + componentVO.setDsmsEngineVersion(gitProperties.get("tags")); + //2. get dsms-engine version + String version = "unknown"; + try { + File versionFile = ResourceUtils.getFile(VERSION_FILE_PATH); + if (versionFile.exists()) { + version = Files.readString(versionFile.toPath(), StandardCharsets.UTF_8); + } + } catch (IOException e) { + log.error("get dsms-engine version fail,fail message:{}", e.getMessage(), e); + } + componentVO.setDsmsEngineVersion(version); + //3. get release version + String releaseVersion = "unknown"; + try { + File releaseVersionFile = ResourceUtils.getFile(RELEASE_VERSION_FILE_PATH); + if (releaseVersionFile.exists()) { + releaseVersion = Files.readString(releaseVersionFile.toPath(), StandardCharsets.UTF_8); + } + } catch (IOException e) { + log.error("get dsms release version fail,fail message:{}", e.getMessage(), e); + } + componentVO.setDsmsReleaseVersion(releaseVersion); + + //4. get dsms-storage version,if get fail show null + List storageVersions = null; + try { + List server = clusterApi.getServer(RemoteCallUtil.generateRemoteRequest()); + storageVersions = ComponentVO.parseServiceToStorageVersions(server); + } catch (Throwable e) { + log.error("get dsms-storage version fail,fail message:{}", e.getMessage(), e); + } + componentVO.setStorageVersions(storageVersions); + + return componentVO; + } +} diff --git a/dsms-engine-common/src/main/java/com/dsms/common/constant/SystemConst.java b/dsms-engine-common/src/main/java/com/dsms/common/constant/SystemConst.java index 7c4d315..a027941 100644 --- a/dsms-engine-common/src/main/java/com/dsms/common/constant/SystemConst.java +++ b/dsms-engine-common/src/main/java/com/dsms/common/constant/SystemConst.java @@ -38,6 +38,11 @@ public class SystemConst { */ public static final String VERSION_FILE_PATH = "classpath:version"; + /** + * release version file path + */ + public static final String RELEASE_VERSION_FILE_PATH = "/etc/dsms/version"; + /** * redis 存储token前缀 */ -- Gitee